Version 3 de l’interface DMA Operations
La version 3 de l’interface d’opérations DMA est disponible à partir de Windows 8. La structure DMA_OPERATIONS de cette interface contient un certain nombre de nouvelles routines qui ne sont pas définies dans les versions précédentes de cette interface. Pour obtenir la liste des routines de la version 3, consultez DMA_OPERATIONS.
Bien que la version 3 de l’interface d’exploitation DMA soit disponible sur toutes les plateformes matérielles Windows, cette interface offre de nombreuses fonctionnalités pour permettre aux pilotes en mode noyau d’utiliser les fonctionnalités avancées des contrôleurs DMA système dans les circuits intégrés Système sur puce (SoC). Ces fonctionnalités incluent généralement la possibilité d’effectuer des transferts DMA de nuages de points/de collecte. En revanche, les versions précédentes de l’interface d’opérations DMA restreignent les transferts DMA de nuages de points/de collecte aux appareils master de bus. L’interface version 3 simplifie la gestion des listes de points/regroupements et réduit le besoin d’intervention du pilote lors des transferts DMA complexes.
Pour utiliser la version 3 de l’interface d’opérations DMA pour effectuer un transfert DMA, un pilote appelle généralement les routines suivantes :
IoGetDmaAdapter
Alloue un objet d’adaptateur DMA et retourne un pointeur vers une structure DMA_ADAPTER qui contient l’interface d’opérations DMA.
GetDmaTransferInfo
Fournit une description des ressources requises pour effectuer le transfert DMA décrit par l’appelant.
AllocateAdapterChannelEx
Alloue les ressources requises pour le transfert DMA et affecte ces ressources à l’objet adaptateur DMA.
MapTransferEx
Initialise les registres de carte et la mémoire tampon de nuages de points/regroupements pour le transfert DMA, puis démarre le transfert.
FlushAdapterBuffersEx
Effectue toutes les opérations de cache qui peuvent être nécessaires à la fin du transfert DMA.
FreeAdapterChannel
Libère le canal DMA et les registres cartographiques.
PutDmaAdapter
Libère l’objet adaptateur.
Ces routines sont utilisées à la fois pour les appareils master bus qui utilisent des contrôleurs DMA dédiés et pour les appareils subordonnés qui partagent un contrôleur DMA système. Pour obtenir une description pas à pas des appels effectués par un pilote lors d’un transfert DMA classique, consultez Modèle d’appel de base pour les routines DMA version 3.
Note Dans la version 3 de l’interface d’opérations DMA, les appels à la routine KeFlushIoBuffers ne sont pas nécessaires avant ou après les transferts DMA. En effet, les routines suivantes couvrent la nécessité de vider les caches de données sur des plateformes qui n’appliquent pas la cohérence du cache dans le matériel :
- MapTransferEx garantit que les caches de données du processeur sont vidés avant les transferts d’écriture (mémoire à appareil).
- FlushAdapterBuffersEx garantit que les caches sont invalidés après les transferts en lecture (appareil-mémoire).
Sur un processeur x86 ou x64, l’appel KeFlushIoBuffers n’effectue aucune opération, et cet appel, bien qu’inutile, n’interfère pas avec le fonctionnement de la plateforme matérielle. Sur un processeur Arm, les appels à KeFlushIoBuffers pendant les transferts DMA effectuent des opérations de cache qui sont inutiles et peuvent dégrader les performances.