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 數據緩衝區之散佈/收集清單所需的緩衝區大小。 此成員僅適用於第 2 版和更新版本的 DMA_OPERATIONS。 如需詳細資訊,請參閱 CalculateScatterGatherList。
BuildScatterGatherList
系統定義的例程指標,可配置對應緩存器,並在驅動程式提供的緩衝區中建立 DMA 的散佈/收集清單。 此成員僅適用於第 2 版和更新版本的 DMA_OPERATIONS。 如需詳細資訊,請參閱 BuildScatterGatherList。
BuildMdlFromScatterGatherList
系統定義的例程指標,可建置對應至散佈/收集清單的 MDL。 此成員僅適用於第 2 版和更新版本的 DMA_OPERATIONS。 如需詳細資訊,請參閱 BuildMdlFromScatterGatherList。
GetDmaAdapterInfo
系統定義的例程指標,描述總線主機 DMA 裝置或系統 DMA 控制器的功能。 GetDmaAdapterInfo 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 GetDmaAdapterInfo。
GetDmaTransferInfo
系統定義的例程指標,描述散佈/收集清單的配置需求。 此例程會取代 CalculateScatterGatherList。 GetDmaTransferInfo 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 GetDmaTransferInfo。
InitializeDmaTransferContext
系統定義的例程指標,初始化不透明 DMA 傳輸內容。 操作系統會在此內容中儲存 DMA 傳輸的內部狀態。 InitializeDmaTransferContext 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 InitializeDmaTransferContext。
AllocateCommonBufferEx
系統定義的例程指標,可配置通用緩衝區的記憶體,並對應此記憶體,以便處理器和 DMA 裝置同時存取。 AllocateCommonBufferEx 僅適用於第 3 版 的 DMA_OPERATIONS。 如需詳細資訊,請參閱 AllocateCommonBufferEx。
AllocateAdapterChannelEx
系統定義的例程指標,可配置 DMA 傳輸所需的資源,然後呼叫驅動程式提供的 AdapterControl 例程來起始 DMA 傳輸。 AllocateAdapterChannelEx 僅適用於第 3 版 的 DMA_OPERATIONS。 如需詳細資訊,請參閱 AllocateAdapterChannelEx。
ConfigureAdapterChannel
系統定義例程的指標可啟用 DMA 控制器所實作的自定義函式。 ConfigureAdapterChannel 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 ConfigureAdapterChannel。
CancelAdapterChannel
系統定義的例程指標,嘗試取消擱置要求以配置 DMA 通道。 CancelAdapterChannel 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 CancelAdapterChannel。
MapTransferEx
系統定義的例程指標,可設定對應緩存器,將散佈/收集清單中的實體位址對應至執行 DMA 傳輸所需的邏輯位址。 MapTransferEx 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 MapTransferEx。
GetScatterGatherListEx
系統定義的例程指標,可配置 DMA 傳輸所需的資源、建置散佈/收集清單,然後呼叫驅動程式提供的 AdapterListControl 例程來起始 DMA 傳輸。 GetScatterGatherListEx 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 GetScatterGatherListEx。 此例程是 AllocateAdapterChannelEx 和 MapTransferEx 的包裝函式。
BuildScatterGatherListEx
系統定義的例程指標,它會在呼叫端配置的緩衝區中建置散佈/收集清單,然後呼叫驅動程式提供的 AdapterListControl 例程來起始 DMA 傳輸。 BuildScatterGatherListEx 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 BuildScatterGatherListEx。
FlushAdapterBuffersEx
系統定義的例程指標,會排清系統 DMA 控制器內部快取或總線主機配接器內部快取中保留在 DMA 傳輸結束時的任何數據。 對於使用系統 DMA 控制器的裝置,如果傳輸未完成,此例程會取消控制器上的目前 DMA 傳輸。 FlushAdapterBuffersEx 僅適用於第 3 版 的 DMA_OPERATIONS。 如需詳細資訊,請參閱 FlushAdapterBuffersEx。
FreeAdapterObject
系統定義的例程指標,會在驅動程式完成所有 DMA 作業之後釋放指定的配接器物件。 FreeAdapterObject 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 FreeAdapterObject。
CancelMappedTransfer
系統定義的例程指標,可取消對應的傳輸。 CancelMappedTransfer 僅適用於第 3 版 DMA_OPERATIONS。 如需詳細資訊,請參閱 CancelMappedTransfer。
AllocateDomainCommonBuffer
用來配置網域通用緩衝區 之PALLOCATE_DOMAIN_COMMON_BUFFER 回呼例程的指標。 此選項適用於 Windows 10和更新版本。
FlushDmaBuffer
PFLUSH_DMA_BUFFER回呼函式的指標,會排清快取中剩餘的任何數據。 此選項適用於 Windows 10和更新版本。
JoinDmaDomain
加入指定 DMA 網域 之PJOIN_DMA_DOMAIN 回呼函式的指標。 此選項適用於 Windows 10和更新版本。
LeaveDmaDomain
PLEAVE_DMA_DOMAIN回呼函式的指標,會離開指定的 DMA 網域。 此選項適用於 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成員。 如果 Version 是DEVICE_DESCRIPTION_VERSION或DEVICE_DESCRIPTION_VERSION1,則會傳回此結構的第 1 版。 如果 Version 是DEVICE_DESCRIPTION_VERSION2,則會傳回此結構的第 2 版。 從 Windows XP 開始,可以使用第 2 版 的 DMA_OPERATIONS 。 如果 Version 是DEVICE_DESCRIPTION_VERSION3,則會傳回此結構的第 3 版。 DMA_OPERATIONS第 3 版從 Windows 8 開始可供使用。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始支援。 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |