NET_DMA_DESCRIPTOR结构 (netdma.h)

注意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 及更高版本的提供程序驱动程序使用 DCAContext32DCAContext16 和 DCAContext8 成员与 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 引擎应向已分配给 DMA 通道的 DCA 目标处理器发送目标数据的 DCA 提示。

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

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

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

NET_DMA_SOURCE_NO_SNOOP
不应窥探源地址。

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

NET_DMA_DESTINATION_NO_SNOOP
不应窥探目标地址。

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

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

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

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

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

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

NET_DMA_NULL_TRANSFER
此描述符不需要 DMA 传输。 不需要 DMA 引擎来检查 TransferSizeSourceAddress 或 DestinationAddress 成员

清除此位时,可能需要 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 及更高版本的提供程序驱动程序使用具有 Reserved1 的 Union 的 NextSourceAddress 成员来支持源和目标分页符

NextSourceAddress

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

Reserved2

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

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 驱动程序。 (添加了 Windows Server 2008 中 NetDMA 1.1 驱动程序支持的 NextSourceAddress、NextDestinationAddress、DCAContext32、DCAContext16 和 DCAContext8 成员.) 。 在 Windows Server 2008 和 Windows Vista 中支持 NetDMA 1.0 驱动程序。
Header netdma.h (包括 Netdma.h)

另请参阅

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma