PMAP_TRANSFER fonction de rappel (wdm.h)
La routine MapTransfer configure des registres de carte pour un objet d’adaptateur afin de 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 précédemment passé à AllocateAdapterChannel pour la demande de transfert de l’IRP actuelle.
[in] Mdl
Pointeur vers l’un des éléments suivants : le MDL qui décrit la mémoire tampon sur MdlAddress dans l’IRP actuel ou le MDL qui décrit la mémoire tampon commune configurée par le pilote d’un appareil subordonné (mode d’initialisation automatique).
[in] MapRegisterBase
Spécifie les registres de carte 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 bus master avec la prise en charge des points/regroupements lorsqu’il a appelé IoGetDmaAdapter, la valeur Length au retour 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 retournée
MapTransfer retourne l’adresse logique de la région mappée, que le pilote d’un adaptateur master 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 peut être appelée uniquement par le pointeur à partir de l’adresse retournée dans une structurede DMA_OPERATIONS. Les pilotes obtiennent l’adresse de cette routine en appelant IoGetDmaAdapter.
Le DmaAdapter doit avoir déjà été alloué à la suite de l’appel précédent du pilote à AllocateAdapterChannel.
Le nombre de registres de carte qui peuvent être configurés ne peut pas dépasser le maximum 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 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 Length pour chaque opération DMA.
Le pilote d’un appareil master de bus avec prise en charge des points/regroupements peut utiliser l’adresse logique retournée et la valeur Length mise à jour pour créer une liste de points/regroupements, 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 .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
Règles de conformité DDI | IrqlDispatch(wdm) |