|SGI IOC4 PCI (multi function) device
|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.
|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
|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
|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.