PFLUSH_ADAPTER_BUFFERS función de devolución de llamada (wdm.h)

La rutina FlushAdapterBuffers vacía los datos restantes en la memoria caché interna del controlador DMA del sistema o en la caché interna del adaptador de bus-master al final de una operación de transferencia de DMA.

Sintaxis

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
)
{...}

Parámetros

[in] DmaAdapter

Puntero a la estructura DMA_ADAPTER devuelta por IoGetDmaAdapter que representa el adaptador de bus-master o el controlador DMA.

[in] Mdl

Puntero al MDL que describe el búfer pasado anteriormente en la llamada del controlador a MapTransfer.

[in] MapRegisterBase

Especifica los registros de asignación asignados para la operación DMA. El sistema pasa este valor a la rutina AdapterControl del controlador.

[in] CurrentVa

Puntero a la dirección virtual actual del búfer, descrita por Mdl, donde se produjo la operación de E/S. Este valor debe ser el mismo que el valor de CurrentVa inicial pasado a MapTransfer.

[in] Length

Especifica la longitud, en bytes, del búfer.

[in] WriteToDevice

Especifica la dirección de la operación de transferencia DMA: TRUE para una transferencia desde un búfer en la memoria del sistema al dispositivo del controlador.

Valor devuelto

FlushAdapterBuffers devuelve TRUE si los datos restantes en la caché interna del adaptador de controlador DMA o del adaptador de bus-master se han vaciado correctamente en la memoria del sistema o fuera del dispositivo.

Comentarios

FlushAdapterBuffers no es una rutina del sistema a la que se puede llamar directamente por su nombre. Esta rutina solo se puede llamar por puntero de la dirección devuelta en una estructura de DMA_OPERATIONS . Los controladores obtienen la dirección de esta rutina llamando a IoGetDmaAdapter.

Para asegurarse de que se complete una transferencia DMA, todos los controladores que realicen operaciones DMA deben llamar a FlushAdapterBuffers antes de completar el IRP que solicitó la transferencia DMA y antes de liberar los registros del mapa.

Un controlador puede obtener la currentVa inicial para el inicio de una transferencia DMA basada en paquetes llamando a MmGetMdlVirtualAddress. Sin embargo, el valor devuelto es un índice en mdl, en lugar de una dirección virtual válida. Si el controlador debe dividir una solicitud de transferencia grande en más de una operación DMA, debe actualizar CurrentVa y Length para cada operación DMA.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI IrqlDispatch(wdm)

Consulte también

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress