NdisMRegisterIoPortRange (NDIS 5.1) function

Note   NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.

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.

Syntax

NDIS_STATUS NdisMRegisterIoPortRange(
  _Out_ PVOID       *PortOffset,
  _In_  NDIS_HANDLE MiniportAdapterHandle,
  _In_  UINT        InitialPort,
  _In_  UINT        NumberOfPorts
);

Parameters

  • PortOffset [out]
    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.

  • MiniportAdapterHandle [in]
    Specifies the handle input to MiniportInitialize.

  • InitialPort [in]
    Specifies the bus-relative base port address for a range of ports to be mapped.

  • NumberOfPorts [in]
    Specifies the number of ports in the range to be mapped.

Return value

NdisMRegisterIoPortRange can return one of the following:

Return code Description
NDIS_STATUS_SUCCESS

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.

NDIS_STATUS_RESOURCE_CONFLICT

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.

NDIS_STATUS_RESOURCES

The port range could not be mapped or NDIS could not allocate resources to check the registry for hardware-resource conflicts.

NDIS_STATUS_FAILURE

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).

 

Remarks

A NIC driver calls NdisMRegisterIoPortRange from its MiniportInitialize function. MiniportInitialize must call NdisMSetAttributes or NdisMSetAttributesEx 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 its 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, MiniportInitialize should release all resources it already allocated for its 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.

Requirements

Target platform

Universal

Version

See NdisMRegisterIoPortRange.

Header

Ndis.h (include Ndis.h)

Library

Ndis.lib

IRQL

PASSIVE_LEVEL

See also

MiniportInitialize

NdisMDeregisterIoPortRange

NdisMMapIoSpace

NdisRawReadPortBufferUchar

NdisRawReadPortBufferUlong

NdisRawReadPortBufferUshort

NdisRawReadPortUchar

NdisRawReadPortUlong

NdisRawReadPortUshort

NdisRawWritePortBufferUchar

NdisRawWritePortBufferUlong

NdisRawWritePortBufferUshort

NdisRawWritePortUchar

NdisRawWritePortUlong

NdisRawWritePortUshort

NdisReadRegisterUchar

NdisReadRegisterUlong

NdisReadRegisterUshort

NdisWriteRegisterUchar

NdisWriteRegisterUlong

NdisWriteRegisterUshort

 

 

Send comments about this topic to Microsoft