Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[Alleen van toepassing op KMDF]
DMA in de systeemmodus, in tegenstelling tot busmaster-DMA, beschrijft een configuratie waarin meerdere apparaten één meerderekanalen-DMA-controller delen.
Vanaf Kernel-Mode KMDF versie 1.11 (Driver Framework) ondersteunt het framework systeemmodus DMA op Systeem op een Chip (SoC)-systemen die worden uitgevoerd op Windows 8 of hoger van het Windows-besturingssysteem.
In dit onderwerp wordt de code beschreven die een KMDF-stuurprogramma moet opgeven in de callback-functies voor gebeurtenissen, evenals optionele callbackfuncties voor gebeurtenissen die kunnen worden geregistreerd, om I/O-aanvragen voor een DMA-apparaat in de systeemmodus te verwerken.
Zie Het afhandelen van I/O-verzoeken in een KMDF-stuurprogramma voor een Bus-Master DMA-apparaat voor informatie over KMDF en bus-master-DMA.
In de volgende afbeelding ziet u de callback-functies voor gebeurtenissen die door uw stuurprogramma worden gebruikt ter ondersteuning van DMA in de systeemmodus:
#B0 #A1 #A2 Stroomdiagram met callback-functies voor gebeurtenissen voor DMA-implementatie in systeemmodus in KMDF-stuurprogramma's. #A3 #A4 #C5
Een System-Mode DMA Enabler maken
Het maken van een DMA-profiel in de systeemmodus is een proces in twee stappen. De volgende stappen vertegenwoordigen een typisch scenario:
Meestal in zijn EvtDriverDeviceAdd callback-functie roept het stuurprogramma WDF_DMA_ENABLER_CONFIG_INIT aan, waarbij de parameter Profile wordt ingesteld op SystemMode of SystemModeDuplex. Het stuurprogramma roept vervolgens WdfDmaEnablerCreate aan, waarbij de WDF_DMA_ENABLER_CONFIG structuur wordt doorgegeven die het net heeft ontvangen.
Het stuurprogramma kan ook de enabler creëren tijdens het evenement EvtDevicePrepareHardware.
De EvtDevicePrepareHardware callback-functie van het stuurprogramma koppelt de DMA-enabler aan de DMA-resources door middel van het aanroepen van de WdfDmaEnablerConfigureSystemProfile methode. Voor een duplex-functie roept het stuurprogramma WdfDmaEnablerConfigureSystemProfile tweemaal aan, eenmaal voor elke overdrachtsrichting.
Het stuurprogramma kan WdfDmaEnablerConfigureSystemProfile aanroepen nadat EvtDevicePrepareHardware is voltooid, maar het moet deze methode aanroepen voordat DMA-transacties worden geïnitialiseerd.
Het aanbieden van optionele callbackfuncties
KmDF-stuurprogramma's configureren doorgaans geen DMA-kanalen. In bepaalde omstandigheden moeten stuurprogramma's echter mogelijk kanaalspecifieke configuratie uitvoeren. Een stuurprogramma kan bijvoorbeeld een aangepaste functie aanroepen die door de DMA-controller wordt geïmplementeerd met behulp van de volgende stappen:
- In een van de #B0 verzoekafhandelaars van het stuurprogramma #A1 roept het stuurprogramma #B2 #A3 WdfDmaTransactionSetChannelConfigurationCallback-#A4 #C5 aan om een #B6 #A7 EvtDmaTransactionConfigureDmaChannel #A8 #C9 callback-functie te registreren.
- De callback-functie EvtDmaTransactionConfigureDmaChannel van uw stuurprogramma roept WdfDmaEnablerWdmGetDmaAdapter aan om een aanwijzer op te halen naar de WDM-DMA_ADAPTER. Deze structuur is het adapterobject dat het DMA-kanaal in de systeemmodus van het stuurprogramma vertegenwoordigt.
- Het stuurprogramma kan vervolgens ConfigureAdapterChannel oproepen om aangepaste functies in te schakelen die zijn geïmplementeerd door de DMA-controller. Deze routine kan alleen worden aangeroepen via een pointer naar het adres dat wordt geretourneerd in een #B0 #A1 DMA_OPERATIONS #A2 #C3 structuur.
- De callbackfunctie EvtDmaTransactionConfigureDmaChannel van uw stuurprogramma retourneert TRUE als het DMA-kanaal succesvol is geconfigureerd.
- Het framework roept de EvtProgramDma callbackfunctie van het stuurprogramma aan.
Melding ontvangen van voltooiing van overdracht
In tegenstelling tot apparaten die gebruikmaken van controllers voor busmastering, kan de hardware voor een DMA-apparaat in de systeemmodus mogelijk niet aangeven dat DMA-overdracht is voltooid door een interrupt uit te geven.
Als uw apparaat geen interrupt genereert om aan te geven dat een DMA-overdracht is voltooid, kan uw stuurprogramma een EvtDmaTransactionDmaTransferComplete event callback-functie bieden die door het framework wordt aangeroepen nadat een DMA-overdracht in systeemmodus is voltooid.
Als een stuurprogramma deze callback-functie wil registreren, gebruikt het een van zijn verwerkingsprogramma's om WdfDmaTransactionSetTransferCompleteCallback aan te roepen.