Commit | Line | Data |
---|---|---|
53708b87 MCC |
1 | ==================================== |
2 | SGI IOC4 PCI (multi function) device | |
3 | ==================================== | |
4 | ||
22329b51 BC |
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. |