Activation des transactions DMA

[S’applique à KMDF uniquement]

Si votre pilote basé sur l’infrastructure gère les opérations d’E/S pour les appareils DMA, votre pilote doit activer les fonctionnalités DMA de l’infrastructure pour chaque appareil DMA. Pour activer ces fonctionnalités, la fonction de rappel EvtDriverDeviceAdd ou EvtDevicePrepareHardware de votre pilote doit :

  1. Appelez WdfDeviceSetAlignmentRequirement pour spécifier l’exigence de l’appareil pour l’alignement de la mémoire tampon.

  2. Appelez WdfDmaEnablerCreate pour spécifier le type d’opérations DMA (paquet unique ou nuage de points/regroupements) et la taille de transfert maximale prise en charge par l’appareil. À compter de KMDF version 1.11, l’infrastructure prend en charge le mode système DMA sur les systèmes Basés sur un système sur puce (SoC) s’exécutant sur Windows 8 ou versions ultérieures du système d’exploitation.

  3. Appelez WdfDmaEnablerSetMaximumScatterGatherElements pour spécifier le nombre maximal d’éléments que l’appareil peut prendre en charge dans une liste de points/regroupements, si l’appareil prend en charge les opérations de diffusion/collecte.

L’exemple de code suivant de l’exemple PLX9x5x illustre comment activer les fonctionnalités DMA de l’infrastructure. Ce code apparaît dans le fichier Init.c.

WDF_DMA_ENABLER_CONFIG   dmaConfig;

WdfDeviceSetAlignmentRequirement( DevExt->Device, PCI9656_DTE_ALIGNMENT_16 );
WDF_DMA_ENABLER_CONFIG_INIT( &dmaConfig,
                             WdfDmaProfileScatterGather64Duplex,
                             DevExt->MaximumTransferLength );
status = WdfDmaEnablerCreate( DevExt->Device,
                              &dmaConfig, 
                              WDF_NO_OBJECT_ATTRIBUTES,
                              &DevExt->DmaEnabler );

Si votre pilote nécessite des mémoires tampons communes, la fonction de rappel EvtDriverDeviceAdd du pilote les configure généralement. Pour plus d’informations sur ces mémoires tampons, consultez Utilisation de mémoires tampons communes.

Une fois qu’un pilote a appelé WdfDmaEnablerCreate, il peut appeler WdfDmaEnablerWdmGetDmaAdapter pour obtenir des pointeurs vers WDM DMA_ADAPTER structures créées par l’infrastructure pour les directions d’entrée et de sortie de l’appareil. Toutefois, la plupart des pilotes basés sur l’infrastructure n’ont pas besoin d’accéder à ces structures.