共用方式為


使用單一傳輸 DMA

根據預設,WDF 有時會將單一 DMA 交易分割成多個 DMA 傳輸。 不過,某些裝置無法處理分散的交易,而且必須改為在單一 DMA 作業中接收所有資料。 例如,某些 PCI 網路控制器一次需要一個網路封包,因為它們沒有硬體可快取和重新組合部分資料。

從 KMDF 1.19 版開始,使用 DMA v3 的 KMDF 驅動程式可以指定它需要單一傳輸 DMA 交易。 驅動程式只能為單一 DMA 交易指定單一傳輸,也可以針對使用指定的 DMA 啟用器所建立的所有 DMA 交易指定單一傳輸。

設定特定 DMA 交易的單一傳輸

若要設定單一交易的單一傳輸,請使用下列順序:

  1. 呼叫 WdfDmaTransactionCreateWdfDmaTransactionRelease
  2. 呼叫 WdfDmaTransactionSetSingleTransferRequirement
  3. 呼叫 WdfDmaTransactionInitialize
    如果初始化因交易片段而失敗,驅動程式可能會失敗 I/O 要求,也可以重新排列交易的記憶體緩衝區並重新初始化交易。
  4. 呼叫 WdfDmaTransactionExecute

偵錯驅動程式時,您可以使用 !wdfkd.wdfdmatransaction 延伸模組來判斷是否為指定的交易對象設定單一傳輸。

針對以特定 DMA 啟用者建立的所有 DMA 交易設定單一傳輸需求

若要為使用指定啟用者建立的所有交易設定單一傳輸,請在呼叫WdfDmaEnablerCreate時,在WDF_DMA_ENABLER_CONFIG_FLAGS中指定WDF_DMA_ENABLER_CONFIG_REQUIRE_SINGLE_TRANSFER旗標。

使用此旗標的驅動程式不需要每次建立或重複使用交易對象時呼叫 WdfDmaTransactionSetSingleTransferRequirement

如果驅動程式 重複使用交易對象,此設定也會保存。

偵錯時,請使用 !wdfkd.wdfdmaenabler 延伸模組來判斷是否為指定的 DMA 啟用器物件設定單一傳輸。

如需 WDF 呼叫您驅動程式 DMA 事件回呼函式的順序相關資訊,請參閱 處理 Bus-Master DMA 裝置之 KMDF 驅動程式中的 I/O 要求