NdisMSetupDmaTransfer 宏 (ndis.h)

NdisMSetupDmaTransfer 函数为 DMA 传输设置主机 DMA 控制器。

语法

void NdisMSetupDmaTransfer(
   _S,
   _H,
   _B,
   _O,
   _L,
   _M_
);

参数

_S

指向调用方提供的变量的指针,在此变量中,此函数返回请求的状态,可以是下列值之一:

NDIS_STATUS_SUCCESS

DMA 控制器已设置为传输指定的数据,这些数据已刷新到设备或从设备刷新,以保持数据完整性。

NDIS_STATUS_RESOURCES

尝试为传输设置 DMA 控制器失败,原因是 MiniportDmaHandle 指定的通道当前正在使用传输数据,或者给定 的 Length 无效。

_H

初始化期间 由 NdisMRegisterDmaChannel 函数返回的 DMA 句柄。

_B

指向缓冲区描述符的指针,该缓冲区描述符映射从中传输数据的主机内存范围。

_O

应开始传输的映射缓冲区内的字节偏移量。 零表示传输应从 缓冲区 中指定的范围的初始字节开始。

_L

要传输的数据的字节数。 OffsetLength 指定的范围必须是缓冲区 中指定的正确子范围。

_M_

一个布尔值,对于从系统通过 NIC 进行出站传输,值为 TRUE 。 否则为 FALSE

返回值

备注

从属 DMA NIC 的驱动程序调用 NdisMSetupDmaTransfer 以响应传入的发送请求,驱动程序为此将 WriteToDevice 设置为 TRUE。 他们将接收的数据从 NIC 传输到主机内存时,将 WriteToDevice 设置为 FALSE

NdisMSetupDmaTransfer 的调用方提供一个缓冲区描述符,该描述符映射作为传输目标或包含从主机到 NIC 的下载操作的数据的主机内存范围。 若要指定传输大小以适应 NIC 的 DMA 约束,调用方可以根据需要设置要使用 OffsetLength 参数传输的子范围。

调用方必须提供缓冲区描述符,该描述符指定当 WriteToDeviceFALSE 时,接收的数据将从 NIC 传输到的主机范围。 否则, Buffer 中的缓冲区描述符已链接到微型端口驱动程序的 数据包描述符输入 MiniportSendNetBufferLists 函数。

若要提高小型传输请求(例如长度小于 256 字节的发送请求)的性能,微型端口驱动程序可以将数据包数据复制到内部暂存缓冲区,并将该缓冲区的驱动程序分配缓冲区描述符映射传递到 NdisMSetupDmaTransfer

NdisMSetupDmaTransfer 返回时,主机 DMA 控制器已针对传输进行了编程。 然后,微型端口驱动程序针对传输操作对 NIC 进行程序。

传输完成后,微型端口驱动程序必须调用 NdisMCompleteDmaTransfer 函数。

要求

要求
最低受支持的客户端 支持 NDIS 6.0 和 NDIS 5.1 驱动程序 (请参阅 Windows Vista 中的 NdisMSetupDmaTransfer (NDIS 5.1) ) 。 NDIS 5.1 驱动程序支持 (请参阅 Windows XP 中的 NdisMSetupDmaTransfer (NDIS 5.1) ) 。
目标平台 通用
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_Miniport_Driver_Function (ndis)

另请参阅

MiniportSendNetBufferLists

NdisMCompleteDmaTransfer

NdisMRegisterDmaChannel