Compartir a través de


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

La rutina FlushAdapterBuffersEx vacía los datos que permanecen en la memoria caché de datos al final de una operación de transferencia de DMA realizada por un controlador DMA del sistema o un dispositivo bus-master.

Sintaxis

PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;

NTSTATUS PflushAdapterBuffersEx(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] ULONGLONG Offset,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Parámetros

[in] DmaAdapter

Puntero a una estructura DMA_ADAPTER . Esta estructura es el objeto de adaptador que representa el canal DMA del sistema del controlador o el dispositivo bus-master. El autor de la llamada obtuvo este puntero de una llamada anterior a la rutina IoGetDmaAdapter .

[in] Mdl

Puntero a la cadena MDL que describe las páginas de memoria que se van a vaciar. Establezca este parámetro para que apunte a la cadena MDL que se usó para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Mdl en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.

[in] MapRegisterBase

Identificador de los registros de mapa asignados previamente para el objeto de adaptador.

[in] Offset

Desplazamiento inicial relativo al inicio de la cadena MDL que se va a usar para la operación de vaciado. Establezca este parámetro en el valor que se usó como desplazamiento inicial para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Offset en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.

[in] Length

Número de bytes de datos que se van a vaciar. Establezca este parámetro en el valor que se usó como longitud de transferencia para la transferencia DMA. Para obtener más información, vea la descripción del parámetro Length en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.

[in] WriteToDevice

Dirección de la transferencia DMA. Establezca este parámetro en el valor que se usó como dirección de transferencia para la transferencia de DMA. Para obtener más información, vea la descripción del parámetro WriteToDevice en GetScatterGatherListEx, BuildScatterGatherListEx o MapTransferEx.

Valor devuelto

FlushAdapterBuffersEx devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos de error se incluyen los siguientes códigos de estado.

Código devuelto Descripción
STATUS_INVALID_PARAMETERS
Error en la rutina debido a valores de parámetros no válidos pasados por el autor de la llamada.

Comentarios

FlushAdapterBuffersEx no es una rutina del sistema a la que se puede llamar directamente por su nombre. Solo el puntero de la dirección devuelta en una estructura de DMA_OPERATIONS puede llamar a esta rutina . Los controladores obtienen la dirección de esta rutina llamando a IoGetDmaAdapter con el miembro Version del parámetro DeviceDescription establecido en DEVICE_DESCRIPTION_VERSION3. Si IoGetDmaAdapter devuelve NULL, la rutina no está disponible en la plataforma.

FlushAdapterBuffersEx permite la coherencia de caché del procesador en plataformas de hardware que no implementan la coherencia de caché aplicada por hardware (snooping de bus). Además, para una transferencia DMA del sistema, FlushAdapterBuffersEx vacía los datos que permanecen en la caché interna del controlador DMA del sistema.

El controlador que inicia una transferencia de DMA de dispersión o recopilación debe asegurarse de que todos los datos transferidos se vacían de la memoria caché una vez completada la transferencia. El controlador debe llamar a FlushAdapterBuffersEx antes de que el controlador complete el IRP que solicitó la transferencia de DMA y antes de que el controlador libere los registros del mapa. Para obtener más información, consulte Vaciado de datos almacenados en caché durante las operaciones de DMA.

FlushAdapterBuffersEx es una versión extendida de la rutina FlushAdapterBuffers . FlushAdapterBuffersEx puede vaciar una lista de dispersión o recopilación completa en una llamada. Por el contrario, para usar FlushAdapterBuffers para vaciar una lista de dispersión y recopilación, se requiere una llamada independiente para cada MDL de la cadena MDL.

FlushAdapterBuffersEx se puede usar en lugar de FlushAdapterBuffers para vaciar el búfer para una transferencia DMA de un paquete. En este caso, la cadena MDL a la que apunta el parámetro Mdl contiene solo una MDL. Una ventaja de usar FlushAdapterBuffersEx de esta manera es que el autor de la llamada puede especificar un desplazamiento en mdl.

Si se llama a FlushAdapterBuffersEx antes de que finalice la operación de transferencia de DMA, esta llamada podría cancelar la transferencia antes de que pueda finalizar o podría provocar un comportamiento indefinido.

Requisitos

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

Consulte también

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

GetScatterGatherListEx

IoGetDmaAdapter

MapTransferEx