The following figure shows how the UDI NIC sample driver, shrkudi, interacts with the UDI environment on the target system.
shrkudi Driver Architecture
The shrkudi driver uses two regions: a primary region that communicates with the Management Agent (MA) and establishes an initial bind channel with the NSR that uses NIM functions to manage the transmission of data over the NIC; and, a secondary region that manages reception of data from the NIC as well as interrupts.
These two regions execute independently, and coordinate their activities over the GIO channel set up between them.
The primary region uses Physical I/O calls as defined in the Physical I/O Specification. to write data from its internal buffers to the NIC. To do this, it requests a ``PIO handle'' from the UDI environment. The PIO handle, while not a channel itself, provides the driver a convenient means of referring to control blocks that tell the environment about the NIC and how to communciate with it over the bus.
The secondary region handles the reception of data from the NIC, and so defines a channel between itself and the NSR. The channel between the bus bridge mapper and the secondary region, while initiated by the driver, is used by the bus bridge mapper when there is an interrupt from the NIC.