NdisMRegisterIoPortRange sets up driver access to device I/O ports with the NdisRawReadPortXxx and NdisRawWritePortXxx functions and claims the range of I/O port addresses in the registry for that driver's NIC.
NDIS_STATUS NdisMRegisterIoPortRange( PVOID *PortOffset, NDIS_HANDLE MiniportAdapterHandle, UINT InitialPort, UINT NumberOfPorts );
Specifies a caller-supplied variable in which this function returns the mapped base virtual address for the given bus-relative I/O port range specified by InitialPort and NumberOfPorts .
Specifies the handle input to MiniportInitializeEx.
Specifies the bus-relative base port address for a range of ports to be mapped.
Specifies the number of ports in the range to be mapped.
NdisMRegisterIoPortRange can return one of the following:
||The given range of I/O ports was mapped successfully so the value at PortOffset is valid and the mapped range has been claimed in the registry for the NIC.|
||An attempt to claim the I/O port range in the registry has failed, possibly because another driver already claimed the range for its device. NdisMRegisterIoPortRange logs an error if this occurs.|
||The port range could not be mapped or NDIS could not allocate resources to check the registry for hardware-resource conflicts.|
||Either the bus type or bus number is out of range or the given InitialPort and NumberOfPorts were invalid (possibly not within the I/O port space of the current platform).|
A miniport driver calls NdisMRegisterIoPortRange from its MiniportInitializeEx function. MiniportInitializeEx must call NdisMSetMiniportAttributes before calling NdisMRegisterIoPortRange.
NdisMRegisterIoPortRange maps a bus-relative device address range that the miniport driver can use subsequently to access an I/O port range on a NIC by calling the NdisRawXxx functions. A successful call claims the specified range of I/O ports in the registry for the caller's NIC.
Because the parameters passed to the NdisRawXxx have been mapped, these functions run significantly faster than the corresponding NdisImmediate..PortXxx. After a successful call to NdisMRegisterIoPortRange, a miniport driver cannot call any of the NdisImmediate..PortXxx functions with either bus-relative addresses or mapped virtual addresses within such an I/O port range.
If its call to NdisMRegisterIoPortRange fails, MiniportInitializeEx should release all resources it already allocated for a NIC and, then, fail initialization for that NIC.
Drivers of NICs with device registers in the host memory space call NdisMMapIoSpace and, subsequently, the NdisRead/WriteRegisterXxx functions to access the NIC registers.
|Windows version||Supported for NDIS 6.0 and NDIS 5.1 drivers (see NdisMRegisterIoPortRange (NDIS 5.1)) in Windows Vista. Supported for NDIS 5.1 drivers (see NdisMRegisterIoPortRange (NDIS 5.1)) in Windows XP.|
|Header||ndis.h (include Ndis.h)|
|DDI compliance rules||Irql_Miniport_Driver_Function, NdisMRegisterIoPortRange|