Aktivieren von DMA-Transaktionen

[Gilt nur für KMDF]

Wenn Ihr frameworkbasierter Treiber E/A-Vorgänge für DMA-Geräte verarbeitet, muss Ihr Treiber die DMA-Funktionen des Frameworks für jedes DMA-Gerät aktivieren. Um diese Features zu aktivieren, muss die Rückruffunktion EvtDriverDeviceAdd oder EvtDevicePrepareHardware ihres Treibers:

  1. Rufen Sie WdfDeviceSetAlignmentRequirement auf, um die Anforderung des Geräts für die Pufferausrichtung anzugeben.

  2. Rufen Sie WdfDmaEnablerCreate auf , um den Typ der DMA-Vorgänge (einzelpaket oder scatter/gather) und die maximale Übertragungsgröße anzugeben, die das Gerät unterstützt. Ab KMDF Version 1.11 unterstützt das Framework DMA im Systemmodus unter System on a Chip (SoC)-basierten Systemen, die auf Windows 8 oder höheren Versionen des Betriebssystems ausgeführt werden.

  3. Rufen Sie WdfDmaEnablerSetMaximumScatterGatherElements auf, um die maximale Anzahl von Elementen anzugeben, die das Gerät in einer Scatter/Gather-Liste unterstützen kann, wenn das Gerät Scatter/Gather-Vorgänge unterstützt.

Im folgenden Codebeispiel aus dem PLX9x5x-Beispiel wird veranschaulicht, wie die DMA-Features des Frameworks aktiviert werden. Dieser Code wird in der Datei Init.c angezeigt.

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 );

Wenn Ihr Treiber allgemeine Puffer benötigt, richtet die EvtDriverDeviceAdd-Rückruffunktion des Treibers diese in der Regel ein. Weitere Informationen zu diesen Puffern finden Sie unter Verwenden allgemeiner Puffer.

Nachdem ein Treiber WdfDmaEnablerCreate aufgerufen hat, kann er WdfDmaEnablerWdmGetDmaAdapter aufrufen, um Zeiger auf WDM DMA_ADAPTER Strukturen abzurufen, die das Framework für die Eingabe- und Ausgaberichtungen des Geräts erstellt. Die meisten frameworkbasierten Treiber müssen jedoch nicht auf diese Strukturen zugreifen.