| Brent Casavant | 22329b5 | 2005-06-21 17:15:59 -0700 | [diff] [blame] | 1 | The SGI IOC4 PCI device is a bit of a strange beast, so some notes on | 
|  | 2 | it are in order. | 
|  | 3 |  | 
|  | 4 | First, even though the IOC4 performs multiple functions, such as an | 
|  | 5 | IDE controller, a serial controller, a PS/2 keyboard/mouse controller, | 
|  | 6 | and an external interrupt mechanism, it's not implemented as a | 
|  | 7 | multifunction device.  The consequence of this from a software | 
|  | 8 | standpoint is that all these functions share a single IRQ, and | 
|  | 9 | they can't all register to own the same PCI device ID.  To make | 
|  | 10 | matters a bit worse, some of the register blocks (and even registers | 
|  | 11 | themselves) present in IOC4 are mixed-purpose between these several | 
|  | 12 | functions, meaning that there's no clear "owning" device driver. | 
|  | 13 |  | 
|  | 14 | The solution is to organize the IOC4 driver into several independent | 
|  | 15 | drivers, "ioc4", "sgiioc4", and "ioc4_serial".  Note that there is no | 
|  | 16 | PS/2 controller driver as this functionality has never been wired up | 
|  | 17 | on a shipping IO card. | 
|  | 18 |  | 
|  | 19 | ioc4 | 
|  | 20 | ==== | 
|  | 21 | This is the core (or shim) driver for IOC4.  It is responsible for | 
|  | 22 | initializing the basic functionality of the chip, and allocating | 
|  | 23 | the PCI resources that are shared between the IOC4 functions. | 
|  | 24 |  | 
|  | 25 | This driver also provides registration functions that the other | 
|  | 26 | IOC4 drivers can call to make their presence known.  Each driver | 
|  | 27 | needs to provide a probe and remove function, which are invoked | 
|  | 28 | by the core driver at appropriate times.  The interface of these | 
|  | 29 | IOC4 function probe and remove operations isn't precisely the same | 
|  | 30 | as PCI device probe and remove operations, but is logically the | 
|  | 31 | same operation. | 
|  | 32 |  | 
|  | 33 | sgiioc4 | 
|  | 34 | ======= | 
|  | 35 | This is the IDE driver for IOC4.  Its name isn't very descriptive | 
|  | 36 | simply for historical reasons (it used to be the only IOC4 driver | 
|  | 37 | component).  There's not much to say about it other than it hooks | 
|  | 38 | up to the ioc4 driver via the appropriate registration, probe, and | 
|  | 39 | remove functions. | 
|  | 40 |  | 
|  | 41 | ioc4_serial | 
|  | 42 | =========== | 
|  | 43 | This is the serial driver for IOC4.  There's not much to say about it | 
|  | 44 | other than it hooks up to the ioc4 driver via the appropriate registration, | 
|  | 45 | probe, and remove functions. |