PMAP_TRANSFER función de devolución de llamada (wdm.h)
La rutina MapTransfer configura los registros de mapa de un objeto de adaptador para asignar una transferencia DMA desde un búfer bloqueado.
Sintaxis
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
)
{...}
Parámetros
[in] DmaAdapter
Puntero al objeto del adaptador DMA devuelto por IoGetDmaAdapter y pasados previamente a AllocateAdapterChannel para la solicitud de transferencia del IRP actual.
[in] Mdl
Puntero a uno de los siguientes: MDL que describe el búfer en MdlAddress en el IRP actual o mdL que describe el búfer común configurado por el controlador de un dispositivo subordinado (modo de inicialización automática).
[in] MapRegisterBase
Especifica los registros de asignación asignados para la operación DMA. El sistema pasa este valor a la rutina de AdapterControl del controlador.
[in] CurrentVa
Puntero a la dirección virtual actual de los datos que se van a transferir para una operación de transferencia de DMA.
[in, out] Length
Especifica la longitud, en bytes, que se va a asignar. Si el controlador indicó que su dispositivo era un patrón de bus con compatibilidad de dispersión/recopilación cuando llamó a IoGetDmaAdapter, el valor de Length a cambio de MapTransfer indica cuántos bytes se asignaron. De lo contrario, los valores de entrada y salida de longitud son idénticos.
[in] WriteToDevice
Indica la dirección de la operación de transferencia: TRUE para una transferencia desde el búfer bloqueado al dispositivo.
Valor devuelto
MapTransfer devuelve la dirección lógica de la región asignada, que puede usar el controlador de un adaptador de bus-master. Los controladores de dispositivos que usan un controlador DMA del sistema no pueden usar este valor y deben omitirlo.
Observaciones
mapTransfer no es una rutina del sistema a la que se puede llamar directamente por nombre. Esta rutina solo se puede llamar por puntero desde la dirección devuelta en una estructura de DMA_OPERATIONS. Los controladores obtienen la dirección de esta rutina llamando a IoGetDmaAdapter.
El DmaAdapter de debe haberse asignado como resultado de la llamada anterior del controlador a AllocateAdapterChannel.
El número de registros de mapa que se pueden configurar no puede superar el máximo devuelto cuando el controlador llamado IoGetDmaAdapter.
Un controlador puede obtener el inicial de CurrentVa para el inicio de una transferencia DMA basada en paquetes llamando a MmGetMdlVirtualAddress. Sin embargo, el valor devuelto es un índice en el 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.
El controlador de un dispositivo de bus-master con compatibilidad de dispersión/recopilación puede usar la dirección lógica devuelta y actualizar valor de longitud para crear una lista de dispersión y recopilación, llamando a MapTransfer repetidamente hasta que haya usado todos los registros de mapa disponibles para la operación de transferencia. Sin embargo, este controlador podría usar más simplemente la rutina getScatterGatherList.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows 2000. |
de la plataforma de destino de | Escritorio |
encabezado de | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
irQL | <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | irqlDispatch(wdm) |