How About Drivers In Devices?
An anonymous reader asks: "I was setting up a new system the other day and after trying to find 30,000 different device drivers, it hit me: What's wrong with the idea of having basic drivers for common OSes in a flash ROM embedded within devices, so that when we plug the device in, the driver is then downloaded to the machine in question? You could always update it or override the process, but it would sure save us a lot of scrambling around for disks. Am I the only one who has thought of this?"
No.
TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
A friend of mine at IBM is doing a project just that. He is part of team that write Perl to download driver for IBM server.
I thought of this a few years ago. Then Handspring went and did it. Which is something everyone thought was very cool when they first came out.
All the Springboard expansion modules had drivers in the cards. Although, based on the more recent PDA offerings from Handspring, it looks like they're abandoning the technology. The Treo doesn't have a Springboard slot and the Visor Edge requires an extra caddy thing to plug the modules into (May or may not come with it. idunno).
However, including the drivers was made possible by the fact that there was only one platform to bundle drivers for, the platform is pretty static. There aren't that many PalmOS updates and they don't change that much between versions.
The Statue of Liberty is America's lawn jockey.
google fcode
I've had this sig for three days.
Just chose better devices and you're half way there
Modems that are just a serial port and not crappy WinModems.
USB storage devices that implement the USB storage protocall.
Printers that are PostScript - or at least PCL.
Video Cards that are VESA complient.
Sound cards that can pretend to be SB-16's
SCSI
Keyboards without those crappy 'internet keys'
Digital Cameras that implement the USB storage protocall
Let's imagine that a virus somehow got on a ROM chip for a popular video card. The company would have to issue a recall. The investors would be angry from losing money over it.
I'm suprised that virus writers haven't figured out how to update the firmware of DVD drives with infected drivers to ensure a longer life for their creations.
In review, storing drivers in ROM chips bring extra cost from R&D and Flashable ROM chips introduce new places for evil viruses to hide. Extra costs will be passed on to us and I don't want to pay $425 for the next top of the line video card just because it includes a fancy new ROM chip when Windows VGA driver is good enough.
"Oh no, a few minutes of 640x480! How will I ever survive?!?!?!"
Now we only need to have disks with the software needed to download the drivers from the device to the host operating system (still one disk for each device) !
I've certainly thought of this at least once when trying to get something working that was being a pain in the ass.
Stop and think about what is actually going on here, though. The point of a driver is to provide glue between a standard set of apis and whatever the external device speaks. If you include the driver on the device, you just require a higher layer abstraction to manage the drivers - a driver driver, basically. What happens when there's a bug fix for the driver you install,and you upgrade/reinstall your system? Either the driver driver has to track dependencies and know when to override the card or you have to write the new drivers to EEPROM or some such. In the first case, you have to have an update list it can contact to find out if the card has the right version (your drive or WinXX died), and in the later, you drive cost up and potentially add new ways to fry hardware. And if you're doing a net enabled driver manager, why worry about what software lives on the card at all?
At best, you can support recent kernels of popular OSes. Older ones and newer ones will still have to ignore the supplied drivers and provide different ones. You're providing a shortcut for a possibly short temporal period at the cost of a new protocol, more on-board memory and engineering for the device, and a new driver manager. A better approach would be to ape a well standardized protocol for communication (like some really old modems and some very high end scanners and image setters do).
It isn't a great idea, cost-wise, and for non-throw-away hardware, there's no point. I have a NIC that I've had for 7 years currently happily doing service in a firewall. It is a piece of crap, but it works fine and outperforms my outgoing bandwidth. What good are Win3.1 drivers on that card going to do me, other than be potentially annoying and drive (ahem) the price up?
-j
I forget what 8 was for.
If they don't even bother to include drivers on disks "for the most common OSes", how are you going to get them to include those drivers on flash?
Free, as in your money being freed from the confines of your account.
I have a digital camera and so does my friend. We were both pleasantly surprised to find that XP didn't require any drivers when we just plugged it into the USB port. The reason it doesn't need any drivers is because the protocol that our cameras use to talk down the cable is standardized (the Picture Transfer Protocol). No driver is needed, or more precisely, only one driver is needed, for every camera that implements the protocol.
Why is this possible? Because digital cameras are smart devices. They can be programmed to conform to a previously defined protocol. This is a good thing. My mouse is not a smart device. There is no microprocessor in my mouse, it is not programmable. It would be easy to come up with a protocol that all mice are expected to implement but it would not be used because that microcontroller in the mouse would cost twice as much as any of the other parts in the mouse. The solution is to make a bit of software that translates my mouse's particular hardware protocol into the defined protocol that my operation system understands. That's why we have software drivers.
Putting a rom in something as "unsmart" as a mouse would cost too much, and the first company that came out with mice that are half the cost but require you to install a driver would capture the market. This is what actually happened, way way way back in the days of the PC wars.
But thankfully, things are looking up. Devices are getting smarter. My optical mouse has a microcontroller in it and so does my digital camera. A whole lot of things that plug into my USB port have a microcontroller in them. Does this mean we should have software drivers in rom as you suggest? I say no! Because this would mean that we would still have all the "drivers only for windows" problems that we have today, and what about when you update your operating system, is the driver on the rom still going to work? No. The solution is to have all smart devices conform to a protocol that is standardized, like the picture transfer protocol for digital cameras.
How we know is more important than what we know.
First, cost: Compare the cost per MB of CD's with flash. To fit a driver in the flash you'd have to put a huge flash on the chip. And flash is EXPENSIVE! On the order of dollars per megabyte, where as CD's are a dime a dozen.
Second, you have to have a driver that knows how to fetch the driver from flash. So you need to establish a new interface on top of PCI to know how to get a driver, plus you have to have a universal OS ID that can be used to get the right driver, so that Win NT SP3 is unique as compared to Win NT SP4.
Third, you have to update the driver. I don't know about you, but i'm always nervous when I have to flash a component on my system.
Fourth, manufacturing. If you're going to build these things, the lead time on the flash image is probably longer than on a CD or a web-site. If the drivers are taking a while, you can send the board to the factory before the CD image.
Nubus was the proprietary bus interface used by Apple in the Mac II series. It was finally abandonned when Apple adopted PCI for internal extension. This approach was very good for plug and play, but very expensive.
I think that loading drivers inside peripheral is very reasonable: first it would be expensive and second how many drivers would there be? If you build a PCI card, this would mean you would need drivers for different plateforms (xx86, PowerPC ,Sparc and probably others) and different OSes. This means a lot of combinations. More reasonable ideas IMHO are:
ah.
Doesn't the device require machine code to run? I mean, seriously. How is the downloadable device driver (lets say the device is USB) going to work on different processors and different operating systems? This just won't work. The thing that _has_ to be done is for standards to be used. You know... standards.. things you could find in the pre-monopoly era.
It would be easy for devices to have in its ROM the windows device driver. But what good is that really? Just pick a standard for a certain device to communicate and leave it at that... If you do something different, publish it on the web somewhere so different OS vendors can read your document and build a device driver around it. Hell, freaking distribute sample C code or something of an implementation of the device driver so people can port it easier.
Some graphics card vendors obfusicate their driver to hide the implementation of their device, which I do not compleatly understand I guess. If they really wanted they could pick a type of bytecode and publish that. It isn't difficult to get some java byte code and translate it to whatever the native processor is. I'm not talking about a full fledged java implementation to do this, just translating the op codes since as far as byte codes go. Java has the best published ones for a virtual machine out there. They could reinvent the wheel if they pleased, I don't care.
But either way, ya... some of this stuff sucks. Just refuse to buy things that don't have decent standards, as a previous poster was speaking of. I would of never bought my Sony Clie had I realized the USB/memory stick storage was not a published standard. As far as the Clie is concerened neither linux or freebsd have working drivers to mount the memory sticks on them. (Sony laptops that have the memory stick reader in them can usually be mounted in freebsd/linux as SCSI devices). I love or hate Sony depending on what side of the bed I wake up on. (The side with my TV and PS2 is the good side):)
Device drivers take up memory to load. So, include enough RAM for the driver on the device itself, so that each device adds its weight to the bus.
</ironic>
You're advocating something very similar....think about it.
You're only like the hojillionth person who has thought of this. It even got implemented on a fairly large scale by Sun. The SBUS cards from Sun used a general purpose driver written in "FCode" until the OS booted and the real driver could be loaded. One benefit of FCode is that the card can be used before the OS boots (useful for Ethernet and SCSI cards). The other great benefit is that FCode is CPU and architecture independent: it's an interpreted language!
I'll bet money that Sun wasn't the first company to implement the idea, and almost certainly not the first people to think of this idea. You're probably 30 years too late for that.
As many people have pointed out, this is sadly not possible for reasons of cost and maintainability. On the other hand drivers will always be around until all devices get smart and use only standard APIs. As a developer I can tell you that that is going to happen in the near future. In terms of the age of the universe, "not by the year 3000" is the near future.
An alternative solution would be a more controlled process for device identification. PCI goes a long way to do this, and most new devices have some sort of identification. Basically every model of every device from every manufacturer needs a unique ModelID which is easily retrievable according to the basic protocols of the bus in question.
The ModelID could easily be a 128 bit number (64 bits assigned to the manufacturer, 64 assigned by the manufacturer; they control that range).
Then we need some sort of industry level agreement (or non-profit organisation with lots of clout) to maintain a database of ModelID = Device name + driver (or at least where to find the driver).
We can dream ...
i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
...would be to store just a URL on the device where drivers can be downloaded from. This way the host OS could go out and pull the drivers automatically. There would need to be some sort of naming convention to differentiate between drivers for the various versions of Windows, Mac OS, Linux, etc.... but this would avoid having to store all flavours of drivers on the device itself.
Of course if the device IS your method of connecting to the net then this may prove to be quite hard! ;-)
Just search google for i2o split driver model. I'm not sure what ever happened to it, but the idea was to split the driver into two parts. One was a device specific OS independent driver which resided on the device (which had a processor on it), and the other part was an OS specific driver for a particular class of device, which would then work with all devices of this class. (One driver for all disk controllers, etc)
Besides, doesn't USB do something similar too? Quite a lot of devices work just fine with the standard driver for their device class. Think input devices, storage, etc.
Open Firmware has already solved this. The device driver is written in Forth. A Forth interpreter in ROM compiles it for the local machine.
If I recall correctly, this protocol would handle both discovery and drivers. The basic idea is that each type of device would have some industry agreed upon interface. For example a printer would support and interface with a "public static Status print(Document d) throws IOException" interface. There is a way to ask for devices near you that support such an interface. The devices that do, would respond with an Object (or driver) that implements that interface and you would be good to go.
Microsoft didn't support it so hardware vendors don't support it, so it is fairly dead at this point. However, it would have been kewl.
This will happen eventually. As PC's keep going on, I see more and more things implemented on PC's that mainframes have done for a LONG time. Take VM ware. Mainfrmes has had Virtual Machines for a long time. PC's are just now getting powerful enough to do this.
On a mainframe, every device has intelligence(usually). They all have a channel processor and everything. The channel processor is the one who reads and processes the microcode. All of the processing needed for that device to works usually occurs on that device. All the mainframe wants to do is pump data out through it. Basically, it's already happening if at a lower level. Take Graphics cards. The GPU handles alot of the rendering independant of the processor. It just happens to share a bus with the main CPU. This may not be having drivers built into the device, but there is talk of bringing channel like functions to PC's especially for I/O intensive devices like Hard Disks, Graphics Cards and Network Cards. When this happens, all the kernel would have to know is how to talk to a chanel type device. At that point, it would just pump data. What kind it is would in not matter much to the main CPU. At least that's the way I understand it.
Gorkman
The problem is hardware makers are in something called the corporate ideomotoric flux... It's a separate universe where you become a kaishain, a corporate slave, and your thinking moves slower, especially the kind of thinking that actually does something. Well, there's that, and there's intellectual property. These two issues have lead to device drivers being externalized although all devices could just as easily use the same system functions, and have any extra driver code embedded in the device.
It is a little excessive - even if we want to me methodical about it.
24 bits for a vendor, allowing 16777216 vendors.
16 bits for the device, allowing each vendor to produce 65536 types of device. If this runs out, they can apply for a new vender number.
24 bits for a serial number, allowing for 16777216 devices of each type (with a new device number if they produce more than this many of any specific part)
Or alternatively - 24 bits for device type, 24 bits for vendor ID number, 16 bits for device version.
Maybe these numbers should be fooled with a little, since the link indicates that 16 bits for a vendor is perfectly adequate. It might be possible to increase the size of the device ID number to more than 32 bits by adding version and revision numbers.
Of course, the vendor ID could just be an 8 char non-terminated string. Most of the companies could have their name squished into 8 chars without getting too confusing.
Acorn machines did (do) this. The expansions cards (hilariously called IIRC "podules") had (have) drivers in ROM. Drivers on disk were unusual. I believe that in later versions of the platform it became necessary to have a disk with some OS software.
I'd like to see printers and the like use Java-based drivers that implement a standard interface. You could either load the java into your print spooler from the printer, or have the printer provide an RMI-accessible object that your spooler can talk to. Woohoo! Finally, OS and printer independence!!!
Tiller's Rule: Never use a word in written form that you've only heard and never read. You will end up looking foolish.
Can't the OS Driver interface be a VM that will interpret some kind of generic code (maybe Java) placed in the peripheral ROM?
The code could be downloaded, and then, compiled for the native CPU code. So there'll be no compatibility problems at all.
Or, maybe, all communications between the peripheral and the hardware could de done through some kind of standart protocol... Then the OS only have to interpret the protocol, no more problems supporting different kinds of OSes. This protocol could be expanded without lossing compatibility with older hardware!
I think FireWire relies in some thing like this... it wold be great!
--Sorry my poor english!--
victor.hogemann@uol.com.br
> Nubus was the proprietary bus interface used by
> Apple in the Mac II series.
Just a quibble. NuBus was not an Apple-proprietary technology. It was designed by MIT and first used by Texas Instruments. Apple licensed it for use in the Mac II and its followons.
No sig? Sigh...
VESA = Stone Age.
On a related note, I haven't seen a card in years that didn't have VESA compatibility. But VESA only provides an interface for the most basic featureset of a card. If you're using VESA compatibility mode instead of getting a proper driver, you're throwing away everything that sets a $250 GeForce4 Ti from a $20 S3 or Trident POS video card.
Same goes for SB16 compatibility - Lots of cards have this. Would I want to use it? No way, not with all of the benefits that newer cards offer.
Keyboards w/o "internet keys" - Hmm? I've never had any problems with such keyboards. Don't touch the "internet keys" and the rest of the keyboard is 100% identical to a normal PS/2 keyboard. In the case of "Internet Keys", usually they're just extra scancodes which the driver has no problem understanding and it's a simple matter of mapping the keys to a useful function in X or wherever.
retrorocket.o not found, launch anyway?
All devices (especially PnP devices) should have drivers built into them. Then you only need a meta-level driver who'se protocol would work on any bus.
// don't forget binary drivers are made for an architecture! ...and a few others... i.e. get_device_text_id() // upgrade the driver
You'd need the following functions:
enum_driver_arch()
get_driver_offset(this_arch)
get_driver_size()
retrieve_driver(offset, size)
as well as:
store_driver(driver, arch)
The problem is you'd end up adding a few $ to each device by adding flash, even NAND flash. With the scale of production, I don't think it'd work out economically. It'll come down to a guy in the store seeing two modems, one is $3 more, and says that there will ne no driver hassle, and the one next to it says "plug-n-play"
Which one are you going to choose? The cheaper one!
Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
30,000 drivers? What were you trying to do, make the Debian GNU/Driver distribution or something?
Drivers in microcode or ,machinecode would be quite small, especially if gzipped. Make the microcode a standard instead of just assembly machine code, and it will work easily for any windows linux solaris macosx computer.
Toughest part is making a standard. Once a standard companies will theoretically flock to do this..
Secondly I think it should allow for just putting in a URL that the OS could use to download the driver. This will be used by cheaper parts like special headphones or mice.
Thirdly for older products.. there should be ONE standard online database of the product numbers and serial numbers where companies would submit their drivers, and OSes would download them as needed. Strong crypto will be needed for this.
Overall this shows the severe lack of standards dominant in this industry.
"Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
Most big networked printers (HP) have their drivers on a tiny web/SMB server on the printer. If you use windows, you can just browse to the printer and it will pick out the proper driver for you.
That said, the trend these days is towards less and less intelligence in the peripheral and more and more dependence on the OS and main CPU. The Winmodem is an extreme example. So while you've got a good idea, it's so 1970's and not nearly trendy enough for today's manufacturers :-).
But yes, it would be nice if you could do it.
The driver wouldn't be for common OS, but rather would confrom to UDI.
Universal Driver Interface.
On startup the OS would extract the driver from ROM, check that it has no updated version installed, and load the driver from ROM/HD (if there is updated version).
--
Two witches watched two watches.
Which witch watched which watch?
Standards, not drivers.
Take digital cameras as an example. Yah, it's sure be neato to have to driver on the camera to avoid having to find it! Or, like mine (and alot of cameras nowadays) the camera can just adhere to a standard (ie USB Mass Storage Device) and Just Work(TM). Which is better?
Sure, this doesn't work for some things, but it applies to most external-type things that putting a flash driver into makes sense anyway.
And of course Amigas had it in the form of AutoConfig before Mac ever used NuBus. NuBus came in one the MacII line, I believe. Amigas had AutoConfig since the Amiga 1000, though the support for onboard ROM-based drivers didn't come in until Amiga OS 1.3.
-- There is no truth. There is only Perception. To Percieve is to Exist.
why not just make standard interfaces for all or most all devices?
:) )
Like postscript for printers?
just build every soundcard with a standard interface, you could still have all the fancy features but the driver would just be the standard sound interface.
regulate the standards via some group so that new modules or interface types could be added and and updated. like USB3 comes out, the group introduces the OPEN standard and then microsoft, linux, freebsd, etc etc could take that OPEN interface and built a driver for their OS. every device sound card whether it were a realtek onboard chip or a sound blaster audigy would interface to the OS the same way. You would need drivers for extended features not supplied by the standard interface, but id rather see my sound card work properly in the first place than b*tch about my EAX not functioning.
I'd like compare it loosely to IDE drives. Their are many different IDE drives as well as different chips on the drives and different firmware etc etc, but you can still plug in ANY ATA100 drive into an ATA100 controller and it would flawlessly, no driver installs, a stable flexible interface(that is now outdated by SATA
be this is just my opinion
No, this is not the way to go. What we need is for a standardized driver format so a manufacturer only has to write the driver one time. The file would have specific fields containing info of the device and its capabilities. The customer's OS would then read the file and use the data to interpret how to use the device.
One driver, no fuss, no muss.
Hmmm...of course we may need to use firewire or USB2 for our mice
XML isn't always the best language framework, especially for streaming events over a low bandwidth link. When I begin to run into more markup than data, I typically switch to a simple text-based encoding, and if that isn't efficient enough, I use binary.
A single packet ("move x+10 y-7 b1+") shouldn't take too much bandwidth over USB 1.
Will I retire or break 10K?
In addition, with CDs, you need to order a significant number.
Not anymore.
Will I retire or break 10K?
why not just make standard interfaces for all or most all devices? Like postscript for printers?
Because PostScript printers cost twice as much, part for the added hardware for running the PS interpreter, and part for the interpreter software license (if you choose Adobe's over Aladdin's).
I'd go for a simpler interface where the host sends the printer a PNG of the page, and the printer prints it. The host should also be able to query the printer's paper sizes, hardware pixel densities, color model (black, cmyk, or hexachrome), and dot spread. Then Any Old Rasterizer(tm) would work.
Will I retire or break 10K?
store just a URL on the device where drivers can be downloaded from.
URLs are not guaranteed to be stable, even when the company follows the W3C's rules. Even Tim BL admits that "Pretty much the only good reason for a document to disappear from the Web is that the company which owned the domain name went out of business or can no longer afford to keep the server running" or had the domain forcibly taken from them in UDRP arbitration. Personal computer peripheral manufacturers do go out of business.
Will I retire or break 10K?
But then a bunch of folks got together to define a common standard for firewire chips that came to be called OHCI. There are several OHCI firewire chips, and they can all use the same driver on any given OS because they are register-compatible.
Microsoft Windows only supports OHCI. It doesn't support PCILynx.
Funny thing is, the "content industry" - movie, tv, RIAA, etc., participated in setting the standard for OHCI. Firewire is a big deal in professional video production; Apple got an Emmy for developing FireWire.
It seems the content industry was concerned that allowing for promiscuous mode in OHCI would help defeat copy protection of content that's delivered on the firewire bus.
So there's no promiscuous mode provided for in the OHCI standard.
PCILynx cards are I think no longer manufactured because Microsoft won't support them and OHCI cards are so ubiquitous. The Mac OS still supports them but Apple builds all their new Macs with OHCI.
It's getting hard to find PCILynx cards. I've been fortunate to get ahold of a couple CardBus PCILynx cards inexpensively. The one source of PCI PCILynx cards I've found charges $290 for them. So instead of getting a PCI card for my Mac 8500 I got a PCMCIA to PCI adapter that claims to support the Mac and I've been all day trying to get it to work.
That's what setting standards for this sort of thing will get you. The DMCA hardwired into the protocol. That's not what you want.
Search for "copy protection" at the 1394 Trade Association's website.
Personally, my plan is to start writing a GPL protocol sniffer soon. I'm going to make it cross-platform, using a library to abstract the system-call interface. Mac OS 9 and Linux support should be easy; OS X support will hopefully be straightforward. To support Windows I'll have to write a PCILynx driver for it.
Request your free CD of my piano music.
Oh, how many times have I rebooted with FAA6G.... Or hooked CIN/COUT... I actually wrote a 'macro package' that hooked CIN and expanded certain control keys out to strings for you. It was one of the first programs I wrote after getting a proper assembler. Prior to that, I hand coded opcodes directly in the monitor. 2C 30 C0.... 4C 00 03.... ah the memories... (Ok, sometimes, if I was programming under DOS 3.3, I'd load Integer BASIC into the language card and do F666G. But it was a PITA.)
But now I'm extremely off topic...
--JoeProgram Intellivision!
CDs are cheaper to make than flashram. It's that simple.
It is worth noting that the operating system for the Amiga was mostly in ROM as well, but the shell and all the commands were on hard disk or floppy or whatever. If you had enough ram you could mirror ROM into ram and boot from it, or load a disk file and boot that or whatever. Otherwise, the OS ran (more slowly) out of ROM but didn't take up space. Ah, the joys of a big address space.
As has been noted elsewhere, OpenFirmware machines (including every sparc-based sun) have a forth interpreter and you write some hacked up forth for drivers which the OS uses. Of course, it's ungodly slow, so it doesn't replace actual drivers in the OS, it just lets you get started. You get enough intelligence to, say, netboot, or load a kernel, and you get to use your primary graphics display. This is the reason why a Sun's console is slower than X, even on the 68k suns and the earliest sparcs, with their crappy CG3 framebuffers.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
But you are approaching the problem from the wrong angle. It has been mentioned by some people here, but the Rigth Thing (TM) would be using communicating standards. We have some already, the USB has few, Mass Storage Device comes to mind. My digital camera just acts as another disk drive, no special drivers needed.
We have semi-standard VESA mode for graphics cards. If we only could get good 2D & 3D minimal standards.
But what I am trying to say: If we could agree on some minimal standards to talk to all kinds of things, but to make to most of them, you would need specalized driver. Graphics, Video, Sound, Storage, Input, all these would benefit from these "minimal standard drivers". Just plug in a sound card, and you get sound. Maybe not highes quality or Dolby Stereo, but usable for your games.
Well you get my drift.
PSION Organiser II, a little 6303 based handheld (IMHO the mother/father of all handhelds), had exactly that approach. ;-) for whatever you jacked in, RS232, barcode reader, swipe reader, printer, application packs. ;-). As a matter of fact, I didn't feel like mapping it into an assembler either so I just jacked it into an array in OPL and called the address to execute it. Ah, those were the days (grin).
...
/// Ye olde Anonymous Coward /// ;-).
Any peripheral you plugged in contained a little ROM where the extra driver was loaded in when booted (basically pressing 'ON' twice). The result was extra commands on its main menu, and extra instructions available in its programming language (OPL, Organiser Programming Language, duh
And failing that you could always address the peripheral ports via machine code - that's how I made an interface for a Mitutoya digital caliper (I couldn't be bothered to code a complete ROM framework just to catch some serially presented bytes
We're talking the 80's here, so no, not a new idea, but having said all that, it is still very much needed.
The possibility of this happening is increasing when peripheral communication is standardised. If you don't need a driver to start the first 'conversation' (like a BIOS talking to a HDD to bootstrap) it is doable, and USB and serial ATA are going the right way. Look at IDE - most devices can now identify themselves to your system on bootup - it doesn't take much to take that idea further. But have you thought about upgrades? Easier in software then firmware
(couldn't be bothered to log in
===
"The best contribution the Internet has made is an increased ability to correctly spell 'anonymous'. The next step is to change the FTP login to 'miscellaneous' and gradually work through the dictionary."
Designing the interface to the driver in the BIOS was a bit of a challenge, because it had to work with everything from the 5380 (a very low level SCSI chip--basically all it implemented was those parts of SCSI that were too fast to do in software efficiently, like REQ/ACK handshakes during data transfer) all the way to the 537xx, which was basically a SCSI coprocessor, capable of doing everything, including management of a queue of requests.
To use the BIOS driver, you had to load it into memory, and relocate it (a relocation table was included in the BIOS), and give it a table of callback functions that it could use to do things like enable/disable interrupts, allocate and free memory, map virtual to physical addresses, and stuff like that. So, for each supported OS, we had to write a driver that could do that. This part tended to be fairly simple.
This worked very well. You could take a Unix system with a 5380, and decide you needed better performance. Shutdown. Replace 5380 card with 53720 card. Reboot. You now have better SCSI performance.
A way I found helpful to think about this while desiging it was to think about this question: "If you could design the ultimate intelligent SCSI card, what would you want it to do? How would you interface between it and the OS?". We basically then designed for that interface, and that's what the driver in the BIOS implemented. The NCR cards were essentially intelligent SCSI cards that just happened to not have a CPU onboard...so they had to make use of the system CPU.
What is needed is a consistant interface for all devices so that drivers are not needed.
You just notify what "class" of device, and the OS magically knows what to do.
---- Booth was a patriot ----