50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
====================================
 | 
						|
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.
 | 
						|
 | 
						|
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.
 |