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

系統定義的例程指標,描述散佈/收集清單的配置需求。 此例程會取代 CalculateScatterGatherListGetDmaTransferInfo 僅適用於第 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。 此例程是 AllocateAdapterChannelExMapTransferEx 的包裝函式。

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)

另請參閱

AllocateAdapterChannel

AllocateAdapterChannelEx

AllocateCommonBuffer

AllocateCommonBufferEx

BuildMdlFromScatterGatherList

BuildScatterGatherList

BuildScatterGatherListEx

CalculateScatterGatherList

CancelAdapterChannel

CancelMappedTransfer

ConfigureAdapterChannel

DEVICE_DESCRIPTION

FlushAdapterBuffers

FlushAdapterBuffersEx

FreeAdapterChannel

FreeAdapterObject

FreeCommonBuffer

FreeMapRegisters

GetDmaAdapterInfo

GetDmaAlignment

GetDmaTransferInfo

GetScatterGatherList

GetScatterGatherListEx

InitializeDmaTransferContext

IoGetDmaAdapter

MapTransfer

MapTransferEx

PutDmaAdapter

PutScatterGatherList

ReadDmaCounter