netdma.h) (NET_DMA_DESCRIPTOR 结构

注意Windows 8 及更高版本中不支持 NetDMA 接口。
 
NET_DMA_DESCRIPTOR 结构指定 DMA 描述符链接列表中每个条目的 DMA 传输信息。

语法

typedef struct _NET_DMA_DESCRIPTOR {
  union {
    ULONG TransferSize;
    struct {
      ULONG DCAContext : 32;
    } DCAContext32;
    struct {
      ULONG DCAContext : 16;
      ULONG Reserved : 16;
    } DCAContext16;
    struct {
      ULONG DCAContext : 8;
      ULONG Reserved : 24;
    } DCAContext8;
  };
  ULONG            ControlFlags;
  PHYSICAL_ADDRESS SourceAddress;
  PHYSICAL_ADDRESS DestinationAddress;
  PHYSICAL_ADDRESS NextDescriptor;
  union {
    ULONG64          Reserved1;
    PHYSICAL_ADDRESS NextSourceAddress;
  };
  union {
    ULONG64          Reserved2;
    PHYSICAL_ADDRESS NextDestinationAddress;
  };
  ULONG64          UserContext1;
  ULONG64          UserContext2;
} NET_DMA_DESCRIPTOR, *PNET_DMA_DESCRIPTOR;

成员

TransferSize

与此 DMA 描述符关联的内存块的大小(以字节为单位)。

NetDMA 2.0 及更高版本的提供程序驱动程序将联合的 DCAContext32DCAContext16DCAContext8 成员与 TransferSize 配合使用,以支持 直接缓存访问 (DCA)

DCAContext32

32 位 DCA 上下文。

DCAContext32.DCAContext

DCA 上下文。

DCAContext16

16 位 DCA 上下文。

DCAContext16.DCAContext

DCA 上下文。

DCAContext16.Reserved

保留位。

DCAContext8

8 位 DCA 上下文。

DCAContext8.DCAContext

DCA 上下文。

DCAContext8.Reserved

保留位。

ControlFlags

一组标志,指定 DMA 引擎应为此 DMA 描述符执行的操作。 此成员必须包含以下一个或多个值, (与按位 OR 运算组合) :

除非另有说明,否则设置位时,说明适用于 。 含义
NET_DMA_SOURCE_PAGE_BREAK
NetDMA 2.0 或更高版本的提供程序从 SourceAddress 成员中指定的源物理地址启动复制,当它到达第一页的末尾时,它会从 NextSourceAddress 成员中指定的物理地址继续复制。
NET_DMA_DESTINATION_PAGE_BREAK
NetDMA 版本 2.0 或更高版本提供程序开始复制到 DestinationAddress 成员中指定的目标物理地址,并在到达第一页的末尾时,继续复制到 NextDestinationAddress 成员中指定的物理地址。
NET_DMA_OP_TYPE_CONTEXT_CHANGE
DMA 引擎应将描述符标识为 上下文更改 描述符。

NetDMA 接口将上下文更改描述符提交到支持 DCA 的 NetDMA 提供程序,以便为 NetDMA 通道上的所有 DMA 传输设置目标数据的 DCA 目标处理器。 NetDMA 接口使用上下文更改描述符中的 DCAContext8 成员来指定通道目标处理器 (APIC) 标识符的 8 位高级可编程中断控制器。

支持 DCA 的 NetDMA 提供程序必须保留具有处理器的 DMA 通道的 DCA 相关性,只要它未收到新的上下文更改描述符。

NetDMA 接口在分配通道后提交上下文更改描述符一次,并在 NetDMA 检测到 DMA 提供程序可能丢失硬件上下文 ((例如,在暂停和恢复操作) 后)再次提交上下文更改描述符。

NET_DMA_DESTINATION_DCA_ENABLE
如果 DMA 操作类型是标准 DMA 传输,则 DMA 引擎应将目标数据的 DCA 提示发送到已分配给 DMA 通道的 DCA 目标处理器。

为了设置 DMA 通道的 DCA 目标处理器,NetDMA 接口之前向该通道提交了上下文更改描述符。

NET_DMA_INTERRUPT_ON_COMPLETION
DMA 引擎应在处理此 DMA 描述符后为关联的 DMA 通道生成中断。

清除此位后,DMA 引擎不会生成中断。

NET_DMA_SOURCE_NO_SNOOP
不应窥探源地址。

清除此位后,源地址位于一致的内存空间中,必须窥探每个 CPU 缓存行。 DMA 客户端必须验证是否不需要窥探 CPU 缓存,才能执行正确的 DMA 操作。

NET_DMA_DESTINATION_NO_SNOOP
不应窥探目标地址。

清除此位后,目标地址位于一致的内存空间中,并且必须窥探每个 CPU 缓存行。 DMA 客户端必须验证是否不需要窥探 CPU 缓存,才能执行正确的 DMA 操作。

NET_DMA_STATUS_UPDATE_ON_COMPLETION
中的 CompletionVirtualAddressCompletionPhysicalAddress 成员 NET_DMA_CHANNEL_PARAMETERS 结构引用完成状态值。 DMA 引擎在完成此描述符的处理时更新完成状态值。

完成状态值是 64 位范围的 DMA 引擎处理的最新 DMA 描述符的物理地址以及其他状态信息的组合。

清除此位后,DMA 引擎不使用 CompletionVirtualAddressCompletionPhysicalAddress

NET_DMA_SERIALIZE_TRANSFER
DMA 引擎保证此描述符的所有写入操作(包括数据和完成状态)在读取下一个描述符的数据之前都已完成。

清除此位后,DMA 引擎可以在完成此描述符的处理之前开始处理下一个描述符。

NET_DMA_NULL_TRANSFER
此描述符不需要 DMA 传输。 DMA 引擎不需要检查 TransferSizeSourceAddressDestinationAddress 成员。

清除此位时,可能需要 DMA 传输,也可能是零长度传输。 DMA 引擎必须检查 TransferSizeSourceAddressDestinationAddress 成员。

注意 如果设置或清除此位,NetDMA 客户端必须始终确保描述符定义有效的传输参数。
 
 

以下位掩码标识 ControlFlags 成员中的剩余位:

含义
NET_DMA_OP_TYPE_MASK
一个位掩码,指定为 DMA 操作类型保留的位。 NetDMA 接口将这些位设置为零。
NET_DMA_RESERVED_MASK
一个位掩码,指定为将来的应用程序保留的位。 NetDMA 接口将这些位设置为零。

SourceAddress

作为 DMA 传输源的内存块的物理地址。

DestinationAddress

作为 DMA 传输目标的内存块的物理地址。

NextDescriptor

描述符链接列表中的下一个NET_DMA_DESCRIPTOR结构的物理地址。 如果此描述符是列表中的最后一个描述符, 则 NextDescriptorNULL

Reserved1

保留给 DMA 引擎或 DMA 提供程序驱动程序使用的ULONG64值。 NetDMA 2.0 及更高版本的提供程序驱动程序使用 Union 的 NextSourceAddress 成员和 Reserved1 来支持 源和目标分页符

NextSourceAddress

源分页符中使用的源地址的第二页的物理地址。

Reserved2

一个ULONG64值,该值保留以供使用 DMA 引擎或 DMA 提供程序驱动程序使用。 NetDMA 2.0 及更高版本的提供程序驱动程序使用 Union 的 NextDestinationAddress 成员和 Reserved2 来支持 源和目标分页符

NextDestinationAddress

目标分页符中使用的目标地址的第二页的物理地址。

UserContext1

保留给 NetDMA 接口使用的ULONG64值。

UserContext2

保留给 NetDMA 接口使用的ULONG64值。

注解

NET_DMA_DESCRIPTOR结构在 DMA 描述符的链接列表中指定单个 DMA 传输的源、目标和控制信息。

为了启动 DMA 传输,NetDMA 接口在 DMA 提供程序驱动程序的 ProviderStartDma 函数的 DescriptorPhysicalAddress 参数处提供NET_DMA_DESCRIPTOR结构的物理地址。 DescriptorVirtualAddress 参数包含描述符的虚拟地址。

NET_DMA_DESCRIPTOR 结构的 NextDescriptor 成员包含描述符链接列表中的下一个NET_DMA_DESCRIPTOR结构的物理地址。

NetDMA 接口调用 DMA 提供程序驱动程序的 ProviderAppendDma 函数,以在 DMA 通道上的最后一个描述符后面追加 DMA 描述符的链接列表。

要求

要求
最低受支持的客户端 支持 Windows Server 2008 中的 NetDMA 2.0 驱动程序。 (添加了 NextSourceAddress、NextDestinationAddress、DCAContext32、DCAContext16 和 DCAContext8 members.) Windows Server 2008 中的 NetDMA 1.1 驱动程序支持。 支持 Windows Server 2008 和 Windows Vista 中的 NetDMA 1.0 驱动程序。
标头 netdma.h (包括 Netdma.h)

另请参阅

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma