NET_DMA_DESCRIPTOR结构(netdma.h)
语法
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 及更高版本的提供程序驱动程序使用 DCAContext32、DCAContext16,并使用 TransferSize联合 DCAContext8 成员来支持 直接缓存访问(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作):
除非另有说明,否则说明适用于设置位时的说明。 | 意义 |
---|---|
|
NetDMA 版本 2.0 或更高版本提供程序从源物理地址(SourceAddress 成员中指定的源物理地址)开始复制,当它到达第一页的末尾时,它将继续从 NextSourceAddress 成员中指定的物理地址复制。 |
|
NetDMA 版本 2.0 或更高版本提供程序将开始复制到 DestinationAddress 成员中指定的目标物理地址,并在到达第一页末尾时,它会继续复制到 NextDestinationAddress 成员中指定的物理地址。 |
|
DMA 引擎应将描述符标识为 上下文更改 描述符。
NetDMA 接口将上下文更改描述符提交到支持 DCA 的 NetDMA 提供程序,以设置 NetDMA 通道上所有 DMA 传输的目标数据的 DCA 目标处理器。 NetDMA 接口在上下文更改描述符中使用 DCAContext8 成员来指定通道的目标处理器的 8 位高级可编程中断控制器(APIC)标识符。 支持 DCA 的 NetDMA 提供程序必须保留具有处理器的 DMA 通道的 DCA 关联,只要它未收到新的上下文更改描述符。 NetDMA 接口在分配通道后一次提交上下文更改描述符,当 NetDMA 检测到 DMA 提供程序可能已丢失硬件上下文(例如暂停和恢复作之后)。 |
|
如果 DMA作类型是标准 DMA 传输,DMA 引擎应向已分配给 DMA 通道的 DCA 目标处理器发送目标数据的 DCA 提示。
若要设置 DMA 通道的 DCA 目标处理器,NetDMA 接口以前向该通道提交了上下文更改描述符。 |
|
处理此 DMA 描述符后,DMA 引擎应为关联的 DMA 通道生成中断。
清除此位后,DMA 引擎不会生成中断。 |
|
不应窥探源地址。
清除此位后,源地址位于一致的内存空间中,并且必须窥探每个 CPU 缓存行。 DMA 客户端必须验证正确 DMA作不需要窥探 CPU 缓存。 |
|
不应窥探目标地址。
清除此位后,目标地址位于一致的内存空间中,并且必须窥探每个 CPU 缓存行。 DMA 客户端必须验证正确 DMA作不需要窥探 CPU 缓存。 |
|
CompletionVirtualAddress 和 CompletionPhysicalAddress 成员
NET_DMA_CHANNEL_PARAMETERS 结构引用完成状态值。 DMA 引擎在完成此描述符的处理时更新完成状态值。
完成状态值是 DMA 引擎处理的最新 DMA 描述符的物理地址的 64 位宽组合,以及其他状态信息。 清除此位后,DMA 引擎不使用 CompletionVirtualAddress 或 CompletionPhysicalAddress。 |
|
DMA 引擎保证,在读取下一描述符的数据之前,此描述符的所有写入(包括数据和完成状态)都已完成。
清除此位后,DMA 引擎可以开始处理下一个描述符,然后再完成此描述符的处理。 |
|
此描述符不需要 DMA 传输。 不需要 DMA 引擎来检查 TransferSize、SourceAddress或 DestinationAddress 成员。
清除此位时,可能需要 DMA 传输,或者可能是长度为零的传输。 DMA 引擎必须检查 TransferSize、SourceAddress或 DestinationAddress 成员。
注意 如果设置或清除此位,NetDMA 客户端必须始终确保描述符定义有效的传输参数。
|
以下位掩码标识 ControlFlags 成员中的剩余位:
价值 | 意义 |
---|---|
|
一个位掩码,指定为 DMA作类型保留的位。 NetDMA 接口将这些位设置为零。 |
|
一个位掩码,指定为将来的应用程序保留的位。 NetDMA 接口将这些位设置为零。 |
SourceAddress
作为 DMA 传输源的内存块的物理地址。
DestinationAddress
作为 DMA 传输目标的内存块的物理地址。
NextDescriptor
描述符链接列表中的下一个NET_DMA_DESCRIPTOR结构的物理地址。 如果此描述符是列表中的最后一个描述符,NextDescriptorNULL。
Reserved1
为要使用的 DMA 引擎或 DMA 提供程序驱动程序保留的ULONG64值。 NetDMA 2.0 及更高版本的提供程序驱动程序使用联盟的 NextSourceAddress 成员,Reserved1 来支持 源和目标分页符。
NextSourceAddress
源分页符中使用的第二页源地址的物理地址。
Reserved2
保留用于使用 DMA 引擎或 DMA 提供程序驱动程序的ULONG64值。 NetDMA 2.0 及更高版本的提供程序驱动程序使用 NextDestinationAddress 成员与 Reserved2 来支持 源和目标分页符。
NextDestinationAddress
目标分页符中使用的第二页目标地址的物理地址。
UserContext1
为要使用的 NetDMA 接口保留ULONG64值。
UserContext2
为要使用的 NetDMA 接口保留ULONG64值。
言论
NET_DMA_DESCRIPTOR结构指定 DMA 描述符链接列表中单个 DMA 传输的源、目标和控制信息。
若要启动 DMA 传输,NetDMA 接口在 DMA 提供程序驱动程序的 ProviderStartDma 函数的 DescriptorPhysicalAddress 参数中提供NET_DMA_DESCRIPTOR结构的物理地址。 描述符VirtualAddress 参数包含描述符的虚拟地址。
NET_DMA_DESCRIPTOR结构的 NextDescriptor 成员包含描述符链接列表中下一个NET_DMA_DESCRIPTOR结构的物理地址。
NetDMA 接口调用 DMA 提供程序驱动程序的 ProviderAppendDma 函数,以在 DMA 通道上最后一个描述符后面追加 DMA 描述符的链接列表。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Server 2008 中支持 NetDMA 2.0 驱动程序。 (添加了 NextSourceAddress、NextDestinationAddress、DCAContext32、DCAContext16 和 DCAContext8 成员。在 Windows Server 2008 中支持 NetDMA 1.1 驱动程序。 在 Windows Server 2008 和 Windows Vista 中支持 NetDMA 1.0 驱动程序。 |
标头 | netdma.h (包括 Netdma.h) |