[僅適用於 KMDF]
如果您的架構驅動程式會處理 DMA 裝置的 I/O 作業,您的驅動程式必須為每個 DMA 裝置啟用架構的 DMA 功能。 若要啟用這些功能,驅動程式的 EvtDriverDeviceAdd 或 EvtDevicePrepareHardware 回呼函式必須:
呼叫 WdfDeviceSetAlignmentRequirement 以指定裝置對緩衝區對齊的需求。
呼叫 WdfDmaEnablerCreate 以指定 DMA 作業的類型(單一封包或散佈/收集),以及裝置所支援的傳輸大小上限。 從 KMDF 1.11 版開始,該架構支持運行於 Windows 8 或更新版本操作系統的系統單晶片(SoC)系統上的系統模式 DMA。
如果裝置支援散佈/收集作業,請呼叫 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 結構的指標。 不過,大部分架構型驅動程式不需要存取這些結構。