Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
[Gäller endast KMDF]
DMA i systemläge, till skillnad från DMA för busshanterare , beskriver en konfiguration där flera enheter delar en enda, vanligtvis multichannel DMA-styrenhet.
Från och med Kernel-Mode Driver Framework (KMDF) version 1.11 stöder ramverket systemläges-DMA på System on a Chip (SoC)-baserade system som körs på Windows 8 eller senare versioner av Windows-operativsystemet.
I det här avsnittet beskrivs den kod som en KMDF-drivrutin måste ange i sina funktioner för återanrop av händelser, samt valfria funktioner för återanrop av händelser som den kan registrera, för att hantera I/O-begäranden för en DMA-enhet i systemläge.
Information om KMDF och DMA för busshanterare finns i Hantera I/O-begäranden i en KMDF-drivrutin för en Bus-Master DMA-enhet.
Följande bild visar de funktioner för återanrop av händelser som din drivrutin använder för att stödja DMA i systemläge:
Skapa en System-Mode DMA-aktiverare
Att skapa en DMA-profil i systemläge är en tvåstegsprocess. Följande steg representerar ett typiskt scenario:
I sin EvtDriverDeviceAdd-återanropsfunktion anropar drivrutinen vanligtvis WDF_DMA_ENABLER_CONFIG_INIT och anger parametern Profil till SystemMode eller SystemModeDuplex. Drivrutinen anropar sedan WdfDmaEnablerCreate och skickar den WDF_DMA_ENABLER_CONFIG struktur som den just tog emot.
Drivrutinen kan också skapa aktiveraren under EvtDevicePrepareHardware.
Drivrutinens EvtDevicePrepareHardware-återanropsfunktion associerar DMA-aktiveraren med dess DMA-resurser genom att anropa metoden WdfDmaEnablerConfigureSystemProfile . För en duplex-aktiverare anropar drivrutinen WdfDmaEnablerConfigureSystemProfile två gånger, en gång för att konfigurera varje överföringsriktning.
Drivrutinen kan anropa WdfDmaEnablerConfigureSystemProfile när EvtDevicePrepareHardware har slutförts, men drivrutinen måste anropa den här metoden innan den initierar DMA-transaktioner.
Tillhandahålla valfria återanropsfunktioner
Kmdf-drivrutiner konfigurerar vanligtvis inte DMA-kanaler. Under vissa omständigheter kan drivrutiner dock behöva utföra kanalspecifik konfiguration. En drivrutin kan till exempel anropa en anpassad funktion som implementeras av DMA-styrenheten med hjälp av följande steg:
- I en av drivrutinens begärandehanterare anropar drivrutinen WdfDmaTransactionSetChannelConfigurationCallback för att registrera en EvtDmaTransactionConfigureDmaChannel-återanropsfunktion.
- Drivrutinens EvtDmaTransactionConfigureDmaChannel-återanropsfunktionanropar WdfDmaEnablerWdmGetDmaAdapter för att hämta en pekare till WDM DMA_ADAPTER. Den här strukturen är adapterobjektet som representerar drivrutinens DMA-kanal i systemläge.
- Drivrutinen kan sedan anropa ConfigureAdapterChannel för att aktivera anpassade funktioner som implementeras av DMA-styrenheten. Den här rutinen kan bara anropas med pekare från adressen som returneras i en DMA_OPERATIONS struktur.
- Drivrutinens EvtDmaTransactionConfigureDmaChannel-callbackfunktion returnerar TRUE om den lyckas konfigurera DMA-kanalen.
- Ramverket anropar drivrutinens EvtProgramDma-återanropsfunktion .
Ta emot meddelande om slutförande av överföring
Till skillnad från enheter som använder styrenheter för busshantering kanske maskinvaran för en DMA-enhet i systemläge inte signalerar att DMA-överföringen slutförs genom att ett avbrott utfärdas.
Om enheten inte genererar ett avbrott för att signalera att DMA-överföringen har slutförts kan drivrutinen tillhandahålla en EvtDmaTransactionDmaTransferComplete-händelseåteranropsfunktion som ramverket anropar när en DMA-överföring i systemläge har slutförts.
För att registrera den här återanropsfunktionen anropar en drivrutin WdfDmaTransactionSetTransferCompleteCallback från en av dess begärandehanterare.