3.2.3.5 Memory-Mapped Device Initialization

Like a PIO device, a miniport for a NIC with on-board RAM must call NdisMRegisterIoPortRange to register its claimed port address(es). This call returns a mapped virtual port address(es) that a miniport can use to access the registers on the adapter. The port addresses mapped by this function are only used to manage the device with NdisRawWrite(Read)PortXxx calls (clear interrupts, set and clear requested functions) but not to move data as is done for a PIO device.

To move data to and from the board, a miniport for this type of device must map the NIC device memory onto a host address space. During initialization, the miniport reads the physical address and size of the on-device memory from the registry by calling NdisReadConfiguration or bus-type-specific NdisXxx call(s). Once the configuration is determined, the miniport must call:

Such a driver uses NdisRead(Write)RegisterXxx to read from or write to the NIC’s registers.

If the driver indicates using NdisMIndicateReceivePacket, it must allocate at least one packet with chained buffer(s) as described in Section 3.2.3.3.