Partager via


PMAP_TRANSFER fonction de rappel (wdm.h)

La routine MapTransfer configure les registres de carte d’un objet adaptateur pour mapper un transfert DMA à partir d’une mémoire tampon verrouillée.

Syntaxe

PMAP_TRANSFER PmapTransfer;

PHYSICAL_ADDRESS PmapTransfer(
  [in]      PDMA_ADAPTER DmaAdapter,
  [in]      PMDL Mdl,
  [in]      PVOID MapRegisterBase,
  [in]      PVOID CurrentVa,
  [in, out] PULONG Length,
  [in]      BOOLEAN WriteToDevice
)
{...}

Paramètres

[in] DmaAdapter

Pointeur vers l’objet d’adaptateur DMA retourné par IoGetDmaAdapter et passé précédemment à AllocateAdapterChannel pour la demande de transfert d’IRP actuelle.

[in] Mdl

Pointeur vers l’un des éléments suivants : mdL qui décrit la mémoire tampon à MdlAddress dans le protocole IRP actuel ou mdL qui décrit la mémoire tampon commune configurée par le pilote d’un périphérique subordonné (mode d’initialisation automatique).

[in] MapRegisterBase

Spécifie les registres cartographiques alloués pour l’opération DMA. Le système transmet cette valeur à la routine AdapterControl du pilote.

[in] CurrentVa

Pointeur vers l’adresse virtuelle actuelle des données à transférer pour une opération de transfert DMA.

[in, out] Length

Spécifie la longueur, en octets, à mapper. Si le pilote a indiqué que son appareil était un maître de bus avec une prise en charge de nuages de points/collecte lorsqu’il a appelé IoGetDmaAdapter, la valeur de Length à retourner à partir de MapTransfer indique le nombre d’octets mappés. Sinon, les valeurs d’entrée et de sortie de Length sont identiques.

[in] WriteToDevice

Indique la direction de l’opération de transfert : TRUE pour un transfert de la mémoire tampon verrouillée vers l’appareil.

Valeur de retour

MapTransfer retourne l’adresse logique de la région mappée, que le pilote d’un adaptateur maître de bus peut utiliser. Les pilotes d’appareils qui utilisent un contrôleur DMA système ne peuvent pas utiliser cette valeur et doivent l’ignorer.

Remarques

MapTransfer n’est pas une routine système qui peut être appelée directement par nom. Cette routine est appelante uniquement par le pointeur de l’adresse retournée dans une structure DMA_OPERATIONS. Les pilotes obtiennent l’adresse de cette routine en appelant IoGetDmaAdapter.

Le DmaAdapter doit déjà avoir été alloué suite à l’appel précédent du pilote pour AllocateAdapterChannel.

Le nombre de registres cartographiques pouvant être configurés ne peut pas dépasser le nombre maximal retourné lorsque le pilote appelé IoGetDmaAdapter.

Un pilote peut obtenir le CurrentVa initial pour le début d’un transfert DMA basé sur des paquets en appelant MmGetMdlVirtualAddress. Toutefois, la valeur retournée est un index dans le Mdl, plutôt qu’une adresse virtuelle valide. Si le pilote doit fractionner une demande de transfert volumineuse en plusieurs opérations DMA, il doit mettre à jour currentVa et Longueur pour chaque opération DMA.

Le pilote d’un périphérique maître de bus avec prise en charge de nuages de points/collectes peut utiliser l’adresse logique retournée et mettre à jour valeur Longueur pour générer une liste de nuages de points/regroupements, en appelant MapTransfer à plusieurs reprises jusqu’à ce qu’il ait utilisé tous les registres de carte disponibles pour l’opération de transfert. Toutefois, un tel pilote peut utiliser plus simplement la routine GetScatterGatherList.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 2000.
plateforme cible Bureau
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL
règles de conformité DDI irqlDispatch(wdm)

Voir aussi

ADDRESS_AND_SIZE_TO_SPAN_PAGES

AllocateAdapterChannel

AllocateCommonBuffer

DMA_ADAPTER

FlushAdapterBuffers

FreeAdapterChannel

FreeMapRegisters

IoGetDmaAdapter

KeFlushIoBuffers

MmGetMdlVirtualAddress