NdisMSetupDmaTransfer 宏 (ndis.h)

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

语法

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

参数

_S

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

NDIS_STATUS_SUCCESS

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

NDIS_STATUS_RESOURCES

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

_H

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

_B

指向缓冲区描述符的指针,用于映射要从中传输数据或将数据传输到的主机内存范围。

_O

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

_L

要传输的数据字节数。 由 OffsetLength 指定的范围必须是在 Buffer 中指定的适当子范围。

_M_

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

返回值

没有

言论

从属 DMA NIC 的驱动程序调用 NdisMSetupDmaTransfer 来响应传入的发送请求,驱动程序将 WriteToDevice 设置为 TRUE。 当从 NIC 传输到主机内存时,它们将 WriteToDevice 设置为 FALSE

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

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

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

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

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

要求

要求 价值
最低支持的客户端 Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 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