Share via


PFLUSH_ADAPTER_BUFFERS funzione di callback (wdm.h)

La routine FlushAdapterBuffers scarica tutti i dati rimanenti nella cache interna del controller DMA di sistema o nella cache interna di un adattatore master bus alla fine di un'operazione di trasferimento DMA.

Sintassi

PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;

BOOLEAN PflushAdapterBuffers(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Parametri

[in] DmaAdapter

Puntatore alla struttura DMA_ADAPTER restituita da IoGetDmaAdapter che rappresenta l'adattatore bus-master o il controller DMA.

[in] Mdl

Puntatore al file MDL che descrive il buffer passato in precedenza nella chiamata del driver a MapTransfer.

[in] MapRegisterBase

Specifica i registri mappa allocati per l'operazione DMA. Il sistema passa questo valore alla routine AdapterControl del driver.

[in] CurrentVa

Puntatore all'indirizzo virtuale corrente nel buffer, descritto dal file Mdl, in cui si è verificata l'operazione di I/O. Questo valore deve essere uguale al valore CurrentVa iniziale passato a MapTransfer.

[in] Length

Specifica la lunghezza, in byte, del buffer.

[in] WriteToDevice

Specifica la direzione dell'operazione di trasferimento DMA: TRUE per un trasferimento da un buffer nella memoria di sistema al dispositivo del driver.

Valore restituito

FlushAdapterBuffers restituisce TRUE se i dati rimanenti nella cache interna del controller DMA o della scheda bus-master sono stati scaricati correttamente nella memoria di sistema o nel dispositivo.

Commenti

FlushAdapterBuffers non è una routine di sistema che può essere chiamata direttamente per nome. Questa routine è chiamabile solo dal puntatore dall'indirizzo restituito in una struttura di DMA_OPERATIONS . I driver ottengono l'indirizzo di questa routine chiamando IoGetDmaAdapter.

Per garantire il completamento di un trasferimento DMA, ogni driver che esegue operazioni DMA deve chiamare FlushAdapterBuffers prima di completare l'IRP che ha richiesto il trasferimento DMA e prima di liberare i registri della mappa.

Un driver può ottenere l'oggetto CurrentVa iniziale per l'avvio di un trasferimento DMA basato su pacchetti chiamando MmGetMdlVirtualAddress. Tuttavia, il valore restituito è un indice in 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.

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)

Vedi anche

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress