|  | The SGI IOC4 PCI device is a bit of a strange beast, so some notes on | 
|  | it are in order. | 
|  |  | 
|  | First, even though the IOC4 performs multiple functions, such as an | 
|  | IDE controller, a serial controller, a PS/2 keyboard/mouse controller, | 
|  | and an external interrupt mechanism, it's not implemented as a | 
|  | multifunction device.  The consequence of this from a software | 
|  | standpoint is that all these functions share a single IRQ, and | 
|  | they can't all register to own the same PCI device ID.  To make | 
|  | matters a bit worse, some of the register blocks (and even registers | 
|  | themselves) present in IOC4 are mixed-purpose between these several | 
|  | functions, meaning that there's no clear "owning" device driver. | 
|  |  | 
|  | The solution is to organize the IOC4 driver into several independent | 
|  | drivers, "ioc4", "sgiioc4", and "ioc4_serial".  Note that there is no | 
|  | PS/2 controller driver as this functionality has never been wired up | 
|  | on a shipping IO card. | 
|  |  | 
|  | ioc4 | 
|  | ==== | 
|  | This is the core (or shim) driver for IOC4.  It is responsible for | 
|  | initializing the basic functionality of the chip, and allocating | 
|  | the PCI resources that are shared between the IOC4 functions. | 
|  |  | 
|  | This driver also provides registration functions that the other | 
|  | IOC4 drivers can call to make their presence known.  Each driver | 
|  | needs to provide a probe and remove function, which are invoked | 
|  | by the core driver at appropriate times.  The interface of these | 
|  | IOC4 function probe and remove operations isn't precisely the same | 
|  | as PCI device probe and remove operations, but is logically the | 
|  | same operation. | 
|  |  | 
|  | sgiioc4 | 
|  | ======= | 
|  | This is the IDE driver for IOC4.  Its name isn't very descriptive | 
|  | simply for historical reasons (it used to be the only IOC4 driver | 
|  | component).  There's not much to say about it other than it hooks | 
|  | up to the ioc4 driver via the appropriate registration, probe, and | 
|  | remove functions. | 
|  |  | 
|  | ioc4_serial | 
|  | =========== | 
|  | This is the serial driver for IOC4.  There's not much to say about it | 
|  | other than it hooks up to the ioc4 driver via the appropriate registration, | 
|  | probe, and remove functions. |