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