NdisAllocateDmaChannel

VOID
NdisAllocateDmaChannel(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE NdisDmaHandle,
IN NDIS_HANDLE NdisAdapterHandle,
IN PNDIS_DMA_DESCRIPTION DmaDescription,
IN ULONG MaximumLength
);

NdisAllocateDmaChannel is called by the NIC driver to set up a DMA channel for future DMA operations.

Parameters

Status

Points to the caller-supplied variable in which this function returns the status of the channel allocation. Possible values are:

NDIS_STATUS_FAILURE
NDIS_STATUS_RESOURCE_CONFLICT
NDIS_STATUS_RESOURCES
NDIS_STATUS_SUCCESS

NdisDmaHandle

Points to a caller-supplied variable in which this function returns the handle that the NDIS interface library associates with the DMA channel.

NdisAdapterHandle

Specifies the handle that the NDIS interface library associates with the network interface card.

DmaDescription

Points to the description of the DMA transfer, defined as follows:

The NDIS_DMA_DESCRIPTION structure is defined as follows:

typedef struct _NDIS_DMA_DESCRIPTION {
BOOLEAN DemandMode;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG DmaPort;
} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;

Member Value
DemandMode TRUE if an ISA device operates in demand mode rather than single-byte mode.
DmaWidth The transfer width of the DMA operation, one of: Width8Bits, Width16Bits, or Width32Bits.
DmaSpeed The transfer speed of the DMA operation, one of: Compatible, TypeA, TypeB, or TypeC.
DmaPort For a NIC on an I/O bus with the interface type MicroChannel, the I/O port used. Otherwise, this member must be zero.

MaximumLength

Specifies the maximum length, in bytes, of the DMA transfer using the channel.

Comments

The NIC driver specifies the DMA channel in an NDIS_ADAPTER_INFORMATION structure that it passes to NdisRegisterAdapter.

The NIC driver should call NdisAllocateDmaChannel only during NIC driver initialization from its DriverEntry or MacAddAdapter function.

Slave DMA network interface cards that initiate their own DMA operations use this function. The driver of a busmaster card does not need to allocate a DMA channel.

Callers of NdisAllocateDmaChannel run at IRQL PASSIVE_LEVEL.

See Also

MacAddAdapter, NdisFreeDmaChannel, NdisReadDmaCounter, NdisRegisterAdapter