PMAP_TRANSFER função de retorno de chamada (wdm.h)
A rotina MapTransfer configura registros de mapa para um objeto de adaptador mapear uma transferência de DMA de um buffer bloqueado.
Sintaxe
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
Ponteiro para o objeto do adaptador DMA retornado por IoGetDmaAdapter e passado anteriormente para AllocateAdapterChannel para a solicitação de transferência do IRP atual.
[in] Mdl
Ponteiro para um dos seguintes: o MDL que descreve o buffer em MdlAddress no IRP atual ou o MDL que descreve o buffer comum configurado pelo driver de um dispositivo subordinado (modo de inicialização automática).
[in] MapRegisterBase
Especifica os registros de mapa alocados para a operação de AMD. O sistema passa esse valor para a rotina AdapterControl do driver.
[in] CurrentVa
Ponteiro para o endereço virtual atual dos dados a serem transferidos para uma operação de transferência de DMA.
[in, out] Length
Especifica o comprimento, em bytes, a ser mapeado. Se o driver indicou que seu dispositivo era um barramento master com suporte de dispersão/coleta quando ele chamou IoGetDmaAdapter, o valor de Length no retorno de MapTransfer indica quantos bytes foram mapeados. Caso contrário, os valores de entrada e saída de Length são idênticos.
[in] WriteToDevice
Indica a direção da operação de transferência: TRUE para uma transferência do buffer bloqueado para o dispositivo.
Retornar valor
MapTransfer retorna o endereço lógico da região mapeada, que o driver de um adaptador master de barramento pode usar. Drivers de dispositivos que usam um controlador de DMA do sistema não podem usar esse valor e devem ignorá-lo.
Comentários
MapTransfer não é uma rotina do sistema que pode ser chamada diretamente pelo nome. Essa rotina só pode ser chamada pelo ponteiro do endereço retornado em uma estruturaDMA_OPERATIONS. Os drivers obtêm o endereço dessa rotina chamando IoGetDmaAdapter.
O DmaAdapter já deve ter sido alocado como resultado da chamada anterior do driver para AllocateAdapterChannel.
O número de registros de mapa que podem ser configurados não pode exceder o máximo retornado quando o driver chamado IoGetDmaAdapter.
Um driver pode obter o CurrentVa inicial para o início de uma transferência de DMA baseada em pacote chamando MmGetMdlVirtualAddress. No entanto, o valor retornado é um índice no Mdl, em vez de um endereço virtual válido. Se o driver precisar dividir uma solicitação de transferência grande em mais de uma operação de DMA, ele deverá atualizar CurrentVa e Length para cada operação de DMA.
O driver de um dispositivo master de ônibus com suporte de dispersão/coleta pode usar o endereço lógico retornado e o valor length atualizado para criar uma lista de dispersão/coleta, chamando MapTransfer repetidamente até que ele tenha usado todos os registros de mapa disponíveis para a operação de transferência. No entanto, esse driver poderia simplesmente usar a rotina GetScatterGatherList .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
Regras de conformidade da DDI | IrqlDispatch(wdm) |