Partager via


Version 3 de l’interface des opérations DMA

La version 3 de l’interface des opérations DMA est disponible à partir de Windows 8. The DMA_OPERATIONS structure for this interface contains a number of new routines that are not defined in previous versions of this interface. For a list of the routines in version 3, see DMA_OPERATIONS.

Bien que la version 3 de l’interface des opérations DMA soit disponible sur toutes les plateformes matérielles Windows, cette interface dispose de nombreuses fonctionnalités permettant aux pilotes en mode noyau d’utiliser les fonctionnalités avancées des contrôleurs DMA système dans System on a Chip (SoC). Ces fonctionnalités incluent généralement la possibilité d’effectuer des transferts DMA de nuages/de points. En revanche, les versions précédentes de l’interface des opérations DMA restreignent les transferts DMA de nuages/collectes de points vers les appareils maître de bus. L’interface version 3 simplifie la gestion des listes de nuages de points/collectes et réduit la nécessité d’une intervention du pilote pendant les transferts DMA complexes.

Pour utiliser la version 3 de l’interface des opérations DMA pour effectuer un transfert DMA, un pilote appelle généralement les routines suivantes :

IoGetDmaAdapter
Allocates a DMA adapter object and returns a pointer to a DMA_ADAPTER structure that contains the DMA operations interface.

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 cartographiques et la mémoire tampon de nuages de points/de collecte pour le transfert DMA, puis démarre le transfert.

FlushAdapterBuffersEx
Effectue toutes les opérations de cache qui peuvent être requises à 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 maître de 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 pendant un transfert DMA classique, consultez Le modèle d’appel de base pour les routines DMA version-3.

Note In version 3 of the DMA operations interface, calls to the KeFlushIoBuffers routine are not required either before or after DMA transfers. C’est pourquoi les routines suivantes couvrent la nécessité de vider les caches de données sur les plateformes qui n’appliquent pas la cohérence du cache dans le matériel :

  • MapTransferEx ensures that processor data caches are flushed before write (memory-to-device) transfers.
  • FlushAdapterBuffersEx ensures that caches are invalidated after read (device-to-memory) transfers.

On an x86 or x64 processor, the KeFlushIoBuffers call performs no operations, and this call, while unnecessary, does not interfere with the operation of the hardware platform. On an Arm processor, calls to KeFlushIoBuffers during DMA transfers perform cache operations that are unnecessary and can degrade performance.