DMA_APPEND_HANDLER回调函数 (netdma.h)

注意Windows 8 及更高版本中不支持 NetDMA 接口。

ProviderAppendDma 函数将 DMA 描述符的链接列表追加到 DMA 通道上的最后一个描述符。

语法

DMA_APPEND_HANDLER DmaAppendHandler;

NTSTATUS DmaAppendHandler(
  [in] PVOID ProviderChannelContext,
  [in] PNET_DMA_DESCRIPTOR DescriptorVirtualAddress,
  [in] PHYSICAL_ADDRESS DescriptorPhysicalAddress,
  [in] ULONG DescriptorCount
)
{...}

参数

[in] ProviderChannelContext

标识 DMA 通道的上下文区域的指针。 DMA 提供程序将此句柄返回到在 的 pProviderChannelContext 参数中指定的位置的 NetDMA ProviderAllocateDmaChannel 函数。

[in] DescriptorVirtualAddress

指向 DMA 描述符链接列表中的第一个 NET_DMA_DESCRIPTOR 结构的虚拟地址的指针。 相应的物理地址在 DescriptorPhysicalAddress 参数中指定。

[in] DescriptorPhysicalAddress

指向 DMA 描述符链接列表中第一个 DMA 描述符的物理地址的指针。 相应的虚拟地址在 DescriptorVirtualAddress 参数中指定。

[in] DescriptorCount

DescriptorVirtualAddress 处的 DMA 描述符数。

注意 NetDMA 版本 2.0 之前的 NetDMA 提供程序驱动程序可以忽略 DescriptorCount 参数。 对于 NetDMA 2.0 及更高版本,此参数是 DMA 操作中描述符的计数。
 

返回值

ProviderAppendDma 返回以下状态值之一:

返回代码 说明
STATUS_SUCCESS
操作已成功完成。
STATUS_UNSUCCESSFUL
操作因未指定的原因而失败。

注解

NetDMA 接口调用 DMA 提供程序驱动程序的 ProviderAppendDma 函数,以在 DMA 通道上的最后一个描述符后面追加 DMA 描述符的链接列表。 启动 DMA 传输后,NetDMA 接口可以调用 ProviderAppendDma 任意次数。 但是,NetDMA 接口必须在通道重置或中止后或在首次分配 DMA 通道后调用 ProviderStartDma 函数。

注意 在 NetDMA 2.0 及更高版本中,描述符的链接列表不是以 NULL 结尾的。 链接列表中最后一个描述符中的 NextDescriptor 成员指定将在对 ProviderAppendDma 函数的后续调用中使用的NET_DMA_DESCRIPTOR结构的物理地址。 NetDMA 2.0 提供程序驱动程序可以在 NextDescriptor 中缓存地址,并使用此地址作为下一个 Append 操作的链接列表的开头。
 
NetDMA 接口在调用 ProviderAppendDma 之前,将最后一个描述符的 NextDescriptor 成员设置为新描述符链的开头。

如果活动传输中的当前描述符是最后一个描述符,则 DMA 引擎必须重新读取最后一个描述符。 最后一个NET_DMA_DESCRIPTOR结构中的 NextDescriptor 成员应具有新地址,并且 DMA 引擎应继续使用下一个描述符。 如果当前描述符不是最后一个描述符,则 DMA 引擎可以继续处理没有其他任务的 DMA 描述符。

NetDMA 在 IRQL <= DISPATCH_LEVEL 调用 ProviderAppendDma

要求

要求
最低受支持的客户端 支持 Windows Server 2008 中的 NetDMA 2.0 驱动程序。 支持 Windows Server 2008 中的 NetDMA 1.1 驱动程序。 支持 Windows Server 2008 和 Windows Vista 中的 NetDMA 1.0 驱动程序。
目标平台 Windows
标头 netdma.h (包括 Netdma.h)
IRQL <= DISPATCH_LEVEL

另请参阅

NET_DMA_DESCRIPTOR

ProviderAllocateDmaChannel

ProviderStartDma