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
要传输的数据的字节数。 Offset 和 Length 指定的范围必须是缓冲区 中指定的正确子范围。
_M_
一个布尔值,对于从系统通过 NIC 进行出站传输,值为 TRUE 。 否则为 FALSE。
返回值
无
备注
从属 DMA NIC 的驱动程序调用 NdisMSetupDmaTransfer 以响应传入的发送请求,驱动程序为此将 WriteToDevice 设置为 TRUE。 他们将接收的数据从 NIC 传输到主机内存时,将 WriteToDevice 设置为 FALSE 。
NdisMSetupDmaTransfer 的调用方提供一个缓冲区描述符,该描述符映射作为传输目标或包含从主机到 NIC 的下载操作的数据的主机内存范围。 若要指定传输大小以适应 NIC 的 DMA 约束,调用方可以根据需要设置要使用 Offset 和 Length 参数传输的子范围。
调用方必须提供缓冲区描述符,该描述符指定当 WriteToDevice 为 FALSE 时,接收的数据将从 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) |