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)

Confira também

ADDRESS_AND_SIZE_TO_SPAN_PAGES

AllocateAdapterChannel

AllocateCommonBuffer

DMA_ADAPTER

FlushAdapterBuffers

FreeAdapterChannel

FreeMapRegisters

IoGetDmaAdapter

KeFlushIoBuffers

MmGetMdlVirtualAddress