PMAP_TRANSFER funzione di callback (wdm.h)
La routine MapTransfer configura i registri mappa per un oggetto adapter per eseguire il mapping di un trasferimento DMA da un buffer bloccato.
Sintassi
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
)
{...}
Parametri
[in] DmaAdapter
Puntatore all'oggetto adapter DMA restituito da IoGetDmaAdapter e passato in precedenza a AllocateAdapterChannel per la richiesta di trasferimento di IRP corrente.
[in] Mdl
Puntatore a uno dei seguenti: MDL che descrive il buffer in MdlAddress nell'IRP corrente o MDL che descrive il buffer comune configurato dal driver di un dispositivo subordinato (modalità di inizializzazione automatica).
[in] MapRegisterBase
Specifica i registri della mappa allocati per l'operazione DMA. Il sistema passa questo valore alla routine AdapterControl del driver.
[in] CurrentVa
Puntatore all'indirizzo virtuale corrente dei dati da trasferire per un'operazione di trasferimento DMA.
[in, out] Length
Specifica la lunghezza, in byte, da eseguire il mapping. Se il driver indica che il dispositivo era un master del bus con supporto a dispersione/raccolta quando si chiama IoGetDmaAdapter, il valore di Length on return from MapTransfer indica il numero di byte mappati. In caso contrario, i valori di input e output di Length sono identici.
[in] WriteToDevice
Indica la direzione dell'operazione di trasferimento: TRUE per un trasferimento dal buffer bloccato al dispositivo.
Valore restituito
MapTransfer restituisce l'indirizzo logico dell'area mappata, che può essere usato dal driver di una scheda master del bus. I driver dei dispositivi che usano un controller DMA di sistema non possono usare questo valore e devono ignorarlo.
Commenti
MapTransfer non è una routine di sistema che può essere chiamata direttamente in base al nome. Questa routine è chiamabile solo per puntatore dall'indirizzo restituito in una strutturadi DMA_OPERATIONS. I driver ottengono l'indirizzo di questa routine chiamando IoGetDmaAdapter.
DmaAdapter deve essere già stato allocato in seguito alla chiamata precedente del driver a AllocateAdapterChannel.
Il numero di registri mappa che possono essere configurati non può superare il valore massimo restituito quando il driver denominato IoGetDmaAdapter.
Un driver può ottenere l'oggetto CurrentVa iniziale per l'inizio di un trasferimento DMA basato su pacchetti chiamando MmGetMdlVirtualAddress. Tuttavia, il valore restituito è un indice nel Mdl, anziché un indirizzo virtuale valido. Se il driver deve suddividere una richiesta di trasferimento di grandi dimensioni in più di un'operazione DMA, deve aggiornare CurrentVa e Length per ogni operazione DMA.
Il driver di un dispositivo master del bus con supporto a dispersione/raccolta può usare l'indirizzo logico restituito e il valore lunghezza aggiornato per creare un elenco di dispersione/raccolta, chiamando MapTransfer ripetutamente fino a quando non ha usato tutti i registri di mappa disponibili per l'operazione di trasferimento. Tuttavia, tale driver potrebbe usare più semplicemente la routine GetScatterGatherList .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Desktop |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | IrqlDispatch(wdm) |