DMA_OPERATIONS 结构 (wdm.h)
DMA_OPERATIONS 结构提供指向控制 DMA 控制器操作的函数的指针表。
语法
typedef struct _DMA_OPERATIONS {
ULONG Size;
PPUT_DMA_ADAPTER PutDmaAdapter;
PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
PFREE_COMMON_BUFFER FreeCommonBuffer;
PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
PFREE_MAP_REGISTERS FreeMapRegisters;
PMAP_TRANSFER MapTransfer;
PGET_DMA_ALIGNMENT GetDmaAlignment;
PREAD_DMA_COUNTER ReadDmaCounter;
PGET_SCATTER_GATHER_LIST GetScatterGatherList;
PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
PGET_DMA_ADAPTER_INFO GetDmaAdapterInfo;
PGET_DMA_TRANSFER_INFO GetDmaTransferInfo;
PINITIALIZE_DMA_TRANSFER_CONTEXT InitializeDmaTransferContext;
PALLOCATE_COMMON_BUFFER_EX AllocateCommonBufferEx;
PALLOCATE_ADAPTER_CHANNEL_EX AllocateAdapterChannelEx;
PCONFIGURE_ADAPTER_CHANNEL ConfigureAdapterChannel;
PCANCEL_ADAPTER_CHANNEL CancelAdapterChannel;
PMAP_TRANSFER_EX MapTransferEx;
PGET_SCATTER_GATHER_LIST_EX GetScatterGatherListEx;
PBUILD_SCATTER_GATHER_LIST_EX BuildScatterGatherListEx;
PFLUSH_ADAPTER_BUFFERS_EX FlushAdapterBuffersEx;
PFREE_ADAPTER_OBJECT FreeAdapterObject;
PCANCEL_MAPPED_TRANSFER CancelMappedTransfer;
PALLOCATE_DOMAIN_COMMON_BUFFER AllocateDomainCommonBuffer;
PFLUSH_DMA_BUFFER FlushDmaBuffer;
PJOIN_DMA_DOMAIN JoinDmaDomain;
PLEAVE_DMA_DOMAIN LeaveDmaDomain;
PGET_DMA_DOMAIN GetDmaDomain;
PALLOCATE_COMMON_BUFFER_WITH_BOUNDS AllocateCommonBufferWithBounds;
PALLOCATE_COMMON_BUFFER_VECTOR AllocateCommonBufferVector;
PGET_COMMON_BUFFER_FROM_VECTOR_BY_INDEX GetCommonBufferFromVectorByIndex;
PFREE_COMMON_BUFFER_FROM_VECTOR FreeCommonBufferFromVector;
PFREE_COMMON_BUFFER_VECTOR FreeCommonBufferVector;
PCREATE_COMMON_BUFFER_FROM_MDL CreateCommonBufferFromMdl;
} *PDMA_OPERATIONS, DMA_OPERATIONS;
成员
Size
此 DMA_OPERATIONS 结构的大小(以字节为单位)。
PutDmaAdapter
指向系统定义的例程的指针,用于释放 DMA_ADAPTER 结构。 有关详细信息,请参阅 PutDmaAdapter。
AllocateCommonBuffer
指向系统定义的例程的指针,用于分配物理连续的 DMA 缓冲区。 有关详细信息,请参阅 AllocateCommonBuffer。
FreeCommonBuffer
指向系统定义的例程的指针,用于释放以前由 AllocateCommonBuffer 分配的物理连续 DMA 缓冲区。 有关详细信息,请参阅 FreeCommonBuffer。
AllocateAdapterChannel
指向系统定义的例程的指针,用于为 DMA 操作分配通道。 有关详细信息,请参阅 AllocateAdapterChannel。
FlushAdapterBuffers
指向系统定义的例程的指针,用于在 DMA 操作后从系统或总线主适配器的内部缓存刷新数据。 有关详细信息,请参阅 FlushAdapterBuffers。
FreeAdapterChannel
指向系统定义的例程的指针,用于释放以前由 AllocateAdapterChannel 为 DMA 操作分配的通道。 有关详细信息,请参阅 FreeAdapterChannel。
FreeMapRegisters
指向系统定义的例程的指针,用于释放为 DMA 操作分配的映射寄存器。 有关详细信息,请参阅 FreeMapRegisters。
MapTransfer
指向用于开始 DMA 操作的系统定义例程的指针。 有关详细信息,请参阅 MapTransfer。
GetDmaAlignment
指向系统定义的例程的指针,用于获取控制器的 DMA 对齐要求。 有关详细信息,请参阅 GetDmaAlignment。
ReadDmaCounter
指向系统定义的例程的指针,用于获取 DMA 操作的当前传输计数。 有关详细信息,请参阅 ReadDmaCounter。
GetScatterGatherList
指向系统定义的例程的指针,该例程分配映射寄存器并为 DMA 创建散点/收集列表。 有关详细信息,请参阅 GetScatterGatherList。
PutScatterGatherList
指向系统定义的例程的指针,该例程在 DMA 操作完成后释放映射寄存器和散点/收集列表。 有关详细信息,请参阅 PutScatterGatherList。
CalculateScatterGatherList
指向系统定义的例程的指针,该例程确定保存描述 I/O 数据缓冲区的散点/收集列表所需的缓冲区大小。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 CalculateScatterGatherList。
BuildScatterGatherList
指向系统定义的例程的指针,该例程分配映射寄存器并在驱动程序提供的缓冲区中为 DMA 创建散点/收集列表。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 BuildScatterGatherList。
BuildMdlFromScatterGatherList
指向系统定义的例程的指针,该例程生成对应于散点/收集列表的 MDL。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 BuildMdlFromScatterGatherList。
GetDmaAdapterInfo
指向系统定义的例程的指针,该例程描述总线主 DMA 设备或系统 DMA 控制器的功能。 GetDmaAdapterInfo 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetDmaAdapterInfo。
GetDmaTransferInfo
指向系统定义的例程的指针,该例程描述散点/收集列表的分配要求。 此例程替换 CalculateScatterGatherList。 GetDmaTransferInfo 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetDmaTransferInfo。
InitializeDmaTransferContext
指向初始化不透明 DMA 传输上下文的系统定义例程的指针。 操作系统在此上下文中存储 DMA 传输的内部状态。 InitializeDmaTransferContext 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 InitializeDmaTransferContext。
AllocateCommonBufferEx
指向系统定义的例程的指针,该例程为公共缓冲区分配内存并映射此内存,以便处理器和 DMA 设备都可以访问该内存。 AllocateCommonBufferEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 AllocateCommonBufferEx。
AllocateAdapterChannelEx
指向系统定义的例程的指针,该例程分配 DMA 传输所需的资源,然后调用驱动程序提供的 AdapterControl 例程来启动 DMA 传输。 AllocateAdapterChannelEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 AllocateAdapterChannelEx。
ConfigureAdapterChannel
指向系统定义的例程的指针启用由 DMA 控制器实现的自定义函数。 ConfigureAdapterChannel 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 ConfigureAdapterChannel。
CancelAdapterChannel
指向系统定义的例程的指针,该例程尝试取消用于分配 DMA 通道的挂起请求。 CancelAdapterChannel 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 CancelAdapterChannel。
MapTransferEx
指向系统定义的例程的指针,该例程设置映射寄存器以将散点/收集列表中的物理地址映射到执行 DMA 传输所需的逻辑地址。 MapTransferEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 MapTransferEx。
GetScatterGatherListEx
指向系统定义的例程的指针,该例程分配 DMA 传输所需的资源、生成散点/收集列表,然后调用驱动程序提供的 AdapterListControl 例程来启动 DMA 传输。 GetScatterGatherListEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetScatterGatherListEx。 此例程是 AllocateAdapterChannelEx 和 MapTransferEx 的包装器。
BuildScatterGatherListEx
指向系统定义的例程的指针,该例程在调用方分配的缓冲区中生成散点/收集列表,然后调用驱动程序提供的 AdapterListControl 例程来启动 DMA 传输。 BuildScatterGatherListEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 BuildScatterGatherListEx。
FlushAdapterBuffersEx
指向系统定义的例程的指针,该例程在 DMA 传输结束时刷新保留在系统 DMA 控制器的内部缓存或总线-主适配器的内部缓存中的任何数据。 对于使用系统 DMA 控制器的设备,如果传输未完成,此例程将取消控制器上的当前 DMA 传输。 FlushAdapterBuffersEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 FlushAdapterBuffersEx。
FreeAdapterObject
指向系统定义的例程的指针,该例程在驱动程序完成所有 DMA 操作后释放指定的适配器对象。 FreeAdapterObject 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 FreeAdapterObject。
CancelMappedTransfer
指向取消映射传输的系统定义例程的指针。 CancelMappedTransfer 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 CancelMappedTransfer。
AllocateDomainCommonBuffer
指向 PALLOCATE_DOMAIN_COMMON_BUFFER 回调例程的指针,用于分配域公共缓冲区。 此选项在 Windows 10 及更高版本中可用。
FlushDmaBuffer
指向 PFLUSH_DMA_BUFFER 回调函数的指针,用于刷新缓存中剩余的任何数据。 此选项在 Windows 10 及更高版本中可用。
JoinDmaDomain
指向联接指定 DMA 域 的PJOIN_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。
LeaveDmaDomain
指向离开指定 DMA 域 的PLEAVE_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。
GetDmaDomain
指向获取 DMA 域句柄 的 PGET_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。
AllocateCommonBufferWithBounds
指向 PALLOCATE_COMMON_BUFFER_WITH_BOUNDS 回调函数的指针,该函数为公共缓冲区分配内存并将其映射,以便主设备和 CPU 可以访问该内存。 公共缓冲区可由可选的最小和最大逻辑地址绑定。 此选项从 Windows 10 版本 1803 开始可用。
AllocateCommonBufferVector
GetCommonBufferFromVectorByIndex
FreeCommonBufferFromVector
FreeCommonBufferVector
CreateCommonBufferFromMdl
指向 PCREATE_COMMON_BUFFER_FROM_MDL 回调函数的指针,该函数将从 MDL 创建 DMA 公共缓冲区并映射后备内存,以便总线主设备和 CPU 可以访问该内存。 此可选回调从 Windows Server 2022 开始可用。
注解
此结构的所有成员( Size 除外)都是指向驱动程序用于为其设备执行 DMA 操作的函数的指针。 驱动程序通过调用 IoGetDmaAdapter 例程获取这些指针。 此例程返回的 DMA_OPERATIONS 结构版本取决于作为输入参数传递给 IoGetDmaAdapter的 DEVICE_DESCRIPTION 结构的 Version 成员。 如果 版本 DEVICE_DESCRIPTION_VERSION或DEVICE_DESCRIPTION_VERSION1,则返回此结构的版本 1。 如果 版本 DEVICE_DESCRIPTION_VERSION2,则返回此结构的版本 2。 DMA_OPERATIONS版本 2 从 Windows XP 开始可用。 如果 版本 DEVICE_DESCRIPTION_VERSION3,则返回此结构的版本 3。 DMA_OPERATIONS版本 3 从Windows 8开始可用。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 2000 开始受支持。 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |