Gestion des demandes d’E/S dans un pilote KMDF pour un appareil DMA Bus-Master
[S’applique à KMDF uniquement]
Ces rubriques de cette section décrivent comment un pilote KMDF pour un appareil DMA master bus traite une demande d’E/S. Si vous écrivez un pilote KMDF qui implémente l’assistant DMA en mode système, consultez Prise en charge System-Mode DMA.
La gestion des demandes d’E/S dans un pilote KMDF pour un périphérique DMA master bus nécessite du code dans plusieurs fonctions de rappel d’événements du pilote, comme illustré dans la figure suivante :
Comme indiqué ci-dessus, le traitement DMA se déroule en quatre phases :
La fonction de rappel EvtDriverDeviceAdd ou EvtDevicePrepareHardware de votre pilote doit activer les transactions DMA pour l’appareil, afin que votre pilote puisse utiliser les fonctionnalités DMA de l’infrastructure. La même fonction de rappel doit également créer une mémoire tampon commune si votre périphérique et votre pilote ont besoin d’accéder à une mémoire tampon partagée.
Lorsque votre pilote reçoit une demande d’E/S qui nécessite que l’appareil effectue une opération DMA, l’un des gestionnaires de requêtes du pilote doit créer et initialiser une nouvelle transaction DMA. (Notez que si votre pilote réutilise des objets de transaction DMA, la fonction de rappel EvtDriverDeviceAdd de votre pilote peut créer les objets de transaction.) Ensuite, le gestionnaire de requêtes doit lancer la transaction DMA afin que l’infrastructure puisse commencer à diviser la transaction en transferts DMA plus petits, si nécessaire, et appeler la fonction de rappel EvtProgramDma du pilote.
La fonction de rappel EvtProgramDma de votre pilote programme le matériel DMA pour un transfert DMA unique et active les interruptions de périphérique.
Lorsque l’appareil s’interrompt, le framework appelle la fonction de rappel EvtInterruptIsr de votre pilote, qui enregistre des informations volatiles sur l’appareil et planifie l’exécution de la fonction de rappel EvtInterruptDpc du pilote.
La fonction de rappel EvtInterruptDpc de votre pilote termine chaque transfert DMA une fois que le matériel a terminé de le traiter. Une fois le transfert final d’une transaction DMA terminé, la fonction de rappel EvtInterruptDpctermine la transaction DMA.
Votre pilote peut réutiliser ses objets de transaction DMA pour s’assurer qu’ils peuvent fonctionner lorsque les ressources mémoire sont faibles.
Votre pilote peut fournir un ensemble de fonctions de rappel qui gèrent les opérations de gestion de l’alimentation spécifiques à DMA.
Certains pilotes utilisent des mémoires tampons communes auxquelles un périphérique et le pilote peuvent accéder.