Partager via


WdfDmaEnablerGetFragmentLength, fonction (wdfdmaenabler.h)

[S’applique uniquement à KMDF]

La méthode WdfDmaEnablerGetFragmentLength retourne la longueur maximale de transfert prise en charge par le système d’exploitation pour un transfert DMA unique .

Syntaxe

size_t WdfDmaEnablerGetFragmentLength(
  [in] WDFDMAENABLER     DmaEnabler,
  [in] WDF_DMA_DIRECTION DmaDirection
);

Paramètres

[in] DmaEnabler

Handle vers un objet d’activation DMA que le pilote a obtenu à partir d’un appel précédent à WdfDmaEnablerCreate.

[in] DmaDirection

Valeur WDF_DMA_DIRECTION-typée qui spécifie la direction de l’opération de transfert DMA. Pour plus d’informations, consultez la section Remarques suivante.

Valeur de retour

WdfDmaEnablerGetFragmentLength retourne la longueur maximale d’un transfert DMA, en octets, que le système d’exploitation peut prendre en charge ou zéro si la valeur de DmaDirection paramètre n’est pas valide.

Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.

Remarques

La longueur maximale de transfert DMA que le système d’exploitation peut prendre en charge dépend du nombre de registres de carte disponibles. Si suffisamment de registres cartographiques sont disponibles, WdfDmaEnablerGetFragmentLength retourne la même valeur que celle retournée par WdfDmaEnablerGetMaximumLength. Sinon, la valeur qui WdfDmaEnablerGetFragmentLength retourne sera inférieure à la valeur que WdfDmaEnablerGetMaximumLeng th retourne.

Votre pilote peut déterminer le nombre de registres cartographiques disponibles à l’aide de la macro BYTE_TO_PAGES, comme suit :

BYTE_TO_PAGES(WdfDmaEnablerGetFragmentLength()) + 1

Si votre pilote a spécifié un profil duplex lorsqu’il a appelé WdfDmaEnablerCreate, la valeur du paramètre DmaDirection doit être WdfDmaDirectionReadFromDevice pour obtenir la longueur de transfert maximale pour les opérations de lecture et WdfDmaDirectionWriteToDev ice pour obtenir la longueur de transfert maximale pour les opérations d’écriture. Si votre pilote n’a pas spécifié de profil duplex, le pilote peut spécifier WdfDmaDirectionReadFromDevice ou WdfDmaDirectionWriteToDevice pour DmaDirection.

Notez que si l’appareil de votre pilote prend en charge l’opération duplex, WdfDmaEnablerGetFragmentLength peut retourner des valeurs différentes pour les instructions de lecture et d’écriture spécifiées par le paramètre DmaDirection. Cette différence est due au fait que l’infrastructure crée un objet adaptateur distinct pour chaque direction, et que le système d’exploitation peut fournir un nombre différent de registres de carte à chaque objet adaptateur.

Exemples

L’exemple de code suivant détermine le nombre minimal de registres cartographiques nécessaires pour gérer les opérations de lecture d’un appareil de carte réseau, calcule le nombre de registres cartographiques disponibles et signale une erreur si le nombre de registres de carte alloués est insuffisant.

ULONG  minimumMapRegisters;
ULONG  maxLengthSupported;
ULONG  mapRegistersAllocated;

miniMapRegisters = BYTES_TO_PAGES(NIC_MAX_PACKET_SIZE) + 1;

maxLengthSupported = 
    (ULONG) WdfDmaEnablerGetFragmentLength(
                                           FdoData->WdfDmaEnabler,
                                           WdfDmaDirectionReadFromDevice
                                           );

mapRegistersAllocated = BYTES_TO_PAGES(maxLengthSupported) + 1;

if (mapRegistersAllocated < minimumMapRegisters) {
    status = STATUS_INSUFFICIENT_RESOURCES;
    return status;
}

Spécifications

Besoin Valeur
plateforme cible Universel
version minimale de KMDF 1.1
En-tête wdfdmaenabler.h (include Wdf.h)
Bibliothèque Wdf01000.sys (voir Versioning de la bibliothèque Framework.)
IRQL <=DISPATCH_LEVEL
règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

WDF_DMA_DIRECTION

WdfDmaEnablerCreate

WdfDmaEnablerGetMaximumLength