netdma.h) (NET_DMA_DESCRIPTOR 结构
语法
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 和 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 运算组合) :
除非另有说明,否则设置位时,说明适用于 。 | 含义 |
---|---|
|
NetDMA 2.0 或更高版本的提供程序从 SourceAddress 成员中指定的源物理地址启动复制,当它到达第一页的末尾时,它会从 NextSourceAddress 成员中指定的物理地址继续复制。 |
|
NetDMA 版本 2.0 或更高版本提供程序开始复制到 DestinationAddress 成员中指定的目标物理地址,并在到达第一页的末尾时,继续复制到 NextDestinationAddress 成员中指定的物理地址。 |
|
DMA 引擎应将描述符标识为 上下文更改 描述符。
NetDMA 接口将上下文更改描述符提交到支持 DCA 的 NetDMA 提供程序,以便为 NetDMA 通道上的所有 DMA 传输设置目标数据的 DCA 目标处理器。 NetDMA 接口使用上下文更改描述符中的 DCAContext8 成员来指定通道目标处理器 (APIC) 标识符的 8 位高级可编程中断控制器。 支持 DCA 的 NetDMA 提供程序必须保留具有处理器的 DMA 通道的 DCA 相关性,只要它未收到新的上下文更改描述符。 NetDMA 接口在分配通道后提交上下文更改描述符一次,并在 NetDMA 检测到 DMA 提供程序可能丢失硬件上下文 ((例如,在暂停和恢复操作) 后)再次提交上下文更改描述符。 |
|
如果 DMA 操作类型是标准 DMA 传输,则 DMA 引擎应将目标数据的 DCA 提示发送到已分配给 DMA 通道的 DCA 目标处理器。
为了设置 DMA 通道的 DCA 目标处理器,NetDMA 接口之前向该通道提交了上下文更改描述符。 |
|
DMA 引擎应在处理此 DMA 描述符后为关联的 DMA 通道生成中断。
清除此位后,DMA 引擎不会生成中断。 |
|
不应窥探源地址。
清除此位后,源地址位于一致的内存空间中,必须窥探每个 CPU 缓存行。 DMA 客户端必须验证是否不需要窥探 CPU 缓存,才能执行正确的 DMA 操作。 |
|
不应窥探目标地址。
清除此位后,目标地址位于一致的内存空间中,并且必须窥探每个 CPU 缓存行。 DMA 客户端必须验证是否不需要窥探 CPU 缓存,才能执行正确的 DMA 操作。 |
|
中的 CompletionVirtualAddress 和 CompletionPhysicalAddress 成员 NET_DMA_CHANNEL_PARAMETERS 结构引用完成状态值。 DMA 引擎在完成此描述符的处理时更新完成状态值。
完成状态值是 64 位范围的 DMA 引擎处理的最新 DMA 描述符的物理地址以及其他状态信息的组合。 清除此位后,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结构的物理地址。 如果此描述符是列表中的最后一个描述符, 则 NextDescriptor 为 NULL。
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) |