Behandeln von E/A-Anforderungen in einem KMDF-Treiber für ein Bus-Master DMA-Gerät
[Gilt nur für KMDF]
In diesem Abschnitt wird beschrieben, wie ein KMDF-Treiber für ein Bus-master DMA-Gerät eine E/A-Anforderung verarbeitet. Wenn Sie einen KMDF-Treiber schreiben, der DMA im Systemmodus implementiert, finden Sie weitere Informationen unter Unterstützen System-Mode DMA.
Die Verarbeitung von E/A-Anforderungen in einem KMDF-Treiber für ein Bus-master DMA-Gerät erfordert Code in mehreren Ereignisrückruffunktionen des Treibers, wie in der folgenden Abbildung dargestellt:
Wie oben gezeigt, erfolgt die DMA-bezogene Verarbeitung in vier Phasen:
Die Rückruffunktion EvtDriverDeviceAdd oder EvtDevicePrepareHardware ihres Treibers muss DMA-Transaktionen für das Gerät aktivieren, damit Ihr Treiber die DMA-Funktionen des Frameworks verwenden kann. Die gleiche Rückruffunktion muss auch einen gemeinsamen Puffer erstellen , wenn Ihr Gerät und Ihr Treiber Zugriff auf einen gemeinsam genutzten Speicherpuffer benötigen.
Wenn Ihr Treiber eine E/A-Anforderung empfängt, die das Gerät zum Ausführen eines DMA-Vorgangs erfordert, muss einer der Anforderungshandler des Treiberseine neue DMA-Transaktion erstellen und initialisieren. (Wenn Ihr Treiber DMA-Transaktionsobjekte wiederverwendet, kann die EvtDriverDeviceAdd-Rückruffunktion Des Treibers die Transaktionsobjekte erstellen.) Anschließend muss der Anforderungshandler die DMA-Transaktion initiieren , damit das Framework ggf. mit dem Aufteilen der Transaktion in kleinere DMA-Übertragungen beginnen und die EvtProgramDma-Rückruffunktion des Treibers aufrufen kann.
Die EvtProgramDma-Rückruffunktion Ihres Treibers programmiert die DMA-Hardware für eine einzelne DMA-Übertragung und ermöglicht Geräteunterbrechungen.
Wenn das Gerät unterbrochen wird, ruft das Framework die EvtInterruptIsr-Rückruffunktion Ihres Treibers auf, die flüchtige Geräteinformationen speichert und die Ausführung der EvtInterruptDpc-Rückruffunktion des Treibers plant.
Die EvtInterruptDpc-Rückruffunktion Ihres Treibers schließt jede DMA-Übertragung ab , nachdem die Hardware die Verarbeitung abgeschlossen hat. Nachdem die endgültige Übertragung einer DMA-Transaktion abgeschlossen ist, schließt die EvtInterruptDpc-Rückruffunktiondie DMA-Transaktion ab.
Ihr Treiber kann seine DMA-Transaktionsobjekte wiederverwenden , um sicherzustellen, dass sie bei geringen Arbeitsspeicherressourcen ausgeführt werden können.
Ihr Treiber kann eine Reihe von Rückruffunktionen bereitstellen, die DMA-spezifische Energieverwaltungsvorgänge verarbeiten.
Einige Treiber verwenden allgemeine Puffer , auf die sowohl ein Gerät als auch der Treiber zugreifen können.