啟用 DMA 交易

[僅適用于 KMDF]

如果您的架構驅動程式會處理 DMA 裝置的 I/O 作業,您的驅動程式必須為每個 DMA 裝置啟用架構的 DMA 功能。 若要啟用這些功能,驅動程式的 EvtDriverDeviceAddEvtDevicePrepareHardware 回呼函式必須:

  1. 呼叫 WdfDeviceSetAlignmentRequirement 以指定裝置的緩衝區對齊需求。

  2. 呼叫 WdfDmaEnablerCreate 以指定單一封包或散佈/收集 () 的 DMA 作業類型,以及裝置支援的傳輸大小上限。 從 KMDF 1.11 版開始,架構支援在晶片 (SoC) 系統上的系統模式 DMA,以Windows 8或更新版本的作業系統執行。

  3. 如果裝置支援散佈/收集作業,請呼叫 WdfDmaEnablerSetMaximumScatterGatherElements 來指定裝置可在散佈/收集清單中支援的最大元素數目。

PLX9x5x範例中的下列程式碼範例說明如何啟用架構的 DMA 功能。 此程式碼會出現在 Init.c 檔案中。

WDF_DMA_ENABLER_CONFIG   dmaConfig;

WdfDeviceSetAlignmentRequirement( DevExt->Device, PCI9656_DTE_ALIGNMENT_16 );
WDF_DMA_ENABLER_CONFIG_INIT( &dmaConfig,
                             WdfDmaProfileScatterGather64Duplex,
                             DevExt->MaximumTransferLength );
status = WdfDmaEnablerCreate( DevExt->Device,
                              &dmaConfig, 
                              WDF_NO_OBJECT_ATTRIBUTES,
                              &DevExt->DmaEnabler );

如果您的驅動程式需要常見的緩衝區,驅動程式的 EvtDriverDeviceAdd 回呼函式通常會設定它們。 如需這些緩衝區的詳細資訊,請參閱 使用通用緩衝區

在驅動程式呼叫 WdfDmaEnablerCreate之後,它可以呼叫 WdfDmaEnablerWdmGetDmaAdapter ,以取得架構針對裝置輸入和輸出方向所建立之 WDM DMA_ADAPTER 結構的指標。 不過,大部分以架構為基礎的驅動程式不需要存取這些結構。