NDIS_STATUS
NdisMRegisterDmaChannel(
OUT PNDIS_HANDLE MiniportDmaHandle,
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT DmaChannel,
IN BOOLEAN Dma32BitAddresses,
IN PNDIS_DMA_DESCRIPTION DmaDescription,
IN ULONG MaximumLength
);
NdisMRegisterDmaChannel claims a system DMA controller channel during initialization for DMA operations on a slave NIC or on an ISA busmaster NIC.
Parameters
MiniportDmaHandle
Points to a caller-supplied variable in which this function returns a handle the miniport uses in subsequent calls to the NdisMXxx system DMA functions.
MiniportAdapterHandle
Specifies the handle input to MiniportInitialize.
DmaChannel
Ignored. Set the DMA channel, if any, at DmaDescription.
Dma32BitAddresses
Specifies TRUE if the NIC has 32 address lines.
DmaDescription
Points to an NDIS_DMA_DESCRIPTION structure filled in by the caller. This structure is defined as follows:
typedef struct _NDIS_DMA_DESCRIPTION {
BOOLEAN DemandMode;
BOOLEAN AutoInitialize;
BOOLEAN DmaChannelSpecified;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG DmaPort;
ULONG DmaChannel;
} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
The driver should initialize this structure with zeros before filling in the following members:
DemandMode
Specifies TRUE if the slave NIC uses the system DMA controller's demand mode.
AutoInitialize
Specifies TRUE if the slave NIC uses the system DMA controller's autoinitialize mode.
DmaChannelSpecified
Specifies TRUE if DmaChannel is set to the bus-relative value of the system DMA controller channel used by the NIC.
DmaWidth
Specifies the transfer width for DMA operations, one of Width8Bits, Width16Bits, or Width32Bits.
DmaSpeed
Specifies one of Compatible, TypeA, TypeB, or TypeC.
DmaPort
Specifies the bus-relative port number if the NIC is on an MCA bus; otherwise, specifies zero.
DmaChannel
Specifies the bus-relative number of the system DMA controller channel used by the NIC.
MaximumLength
Specifies the maximum number of bytes the NIC can transfer in a single DMA operation. If the NIC has unlimited transfer capacity,set this parameter to -1.
Return Value
NdisMRegisterDmaChannel can return one of the following status values:
NDIS_STATUS_SUCCESS
NDIS claimed the specified DMA channel in the registry for the caller's NIC and set up necessary resources for subsequentl DMA operations by the miniport.
NDIS_STATUS_RESOURCE_CONFLICT
An attempt to claim the DMA channel in the registry has failed, possibly because another driver has already claimed that channel for its device. NdisMRegisterDmaChannel logs an error if this occurs.
NDIS_STATUS_RESOURCES
NDIS could not allocate the system resources it needs to support DMA operations by this NIC driver.
NDIS_STATUS_FAILURE
Either the bus type or bus number is out of range or the driver declared its NIC a busmaster on an I/O bus other than ISA.
Comments
A driver of a slave-DMA NIC must call NdisMRegisterDmaChannel from its MiniportInitialize function to reserve system resources for subsequent DMA operations and to claim them in the registry.
The driver of an ISA busmaster NIC also must call NdisMRegisterDmaChannel from MiniportInitialize to claim a system DMA controller channel for its NIC in the registry.
MiniportInitialize must call NdisMSetAttributes or NdisMSetAttributesEx before calling NdisMRegisterDmaChannel.
MiniportInitialize obtained the bus-relative values passed to NdisMRegisterDmaChannel either from the registry or by calling a bus-type-specific NdisXxx configuration function.
If such a driver cannot allocate the system DMA resources that its device needs, MiniportInitialize should release all resources it already allocated for its NIC and, then, fail initialization for that NIC.
Callers of NdisMRegisterDmaChannel run at IRQL PASSIVE_LEVEL.
See Also
MiniportInitialize, NdisMCompleteDmaTransfer, NdisMDeregisterDmaChannel, NdisMPciAssignResources, NdisMSetAttributes, NdisMSetAttributesEx, NdisMSetupDmaTransfer, NdisOpenConfiguration, NdisReadEisaSlotInformation, NdisReadMcaPosInformation, NdisReadPciSlotInformation