Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A versão 3 da interface de operações de DMA está disponível a partir do Windows 8. The DMA_OPERATIONS structure for this interface contains a number of new routines that are not defined in previous versions of this interface. For a list of the routines in version 3, see DMA_OPERATIONS.
Embora a versão 3 da interface de operações de DMA esteja disponível em todas as plataformas de hardware do Windows, essa interface tem muitos recursos para permitir que drivers de modo kernel usem os recursos avançados dos controladores DMA do sistema em circuitos integrados do System on a Chip (SoC). Essas funcionalidades normalmente incluem a capacidade de fazer transferências de DMA de dispersão/recolhimento. Por outro lado, versões anteriores da interface de operações de DMA restringem transferências de DMA de dispersão/coleta para dispositivos mestre de barramento. A interface versão 3 simplifica o gerenciamento de listas de dispersão/coleta e reduz a necessidade de intervenção do driver durante transferências complexas de DMA.
Para usar a versão 3 da interface de operações de DMA para executar uma transferência de DMA, um driver normalmente chama as seguintes rotinas:
IoGetDmaAdapter
Allocates a DMA adapter object and returns a pointer to a DMA_ADAPTER structure that contains the DMA operations interface.
GetDmaTransferInfo
Fornece uma descrição dos recursos necessários para executar a transferência de DMA descrita pelo chamador.
AllocateAdapterChannelEx
Aloca os recursos necessários para a transferência de DMA e atribui esses recursos ao objeto do adaptador DMA.
MapTransferEx
Inicializa os registros de mapa e o buffer de dispersão/coleta para a transferência de DMA e inicia a transferência.
FlushAdapterBuffersEx
Executa todas as operações de cache que podem ser necessárias no final da transferência de DMA.
FreeAdapterChannel
Libera o canal DMA e os registros de mapa.
PutDmaAdapter
Libera o objeto do adaptador.
Essas rotinas são usadas tanto para dispositivos mestres de barramento que usam controladores DMA dedicados quanto para dispositivos subordinados que compartilham um controlador DMA do sistema. Para obter uma descrição passo a passo das chamadas feitas por um driver durante uma transferência de DMA típica, consulte Padrão básico de chamada para rotinas de DMA versão 3.
Note In version 3 of the DMA operations interface, calls to the KeFlushIoBuffers routine are not required either before or after DMA transfers. O motivo é que as seguintes rotinas abrangem a necessidade de liberar caches de dados em plataformas que não impõem a coerência de cache no hardware:
- MapTransferEx ensures that processor data caches are flushed before write (memory-to-device) transfers.
- FlushAdapterBuffersEx ensures that caches are invalidated after read (device-to-memory) transfers.
On an x86 or x64 processor, the KeFlushIoBuffers call performs no operations, and this call, while unnecessary, does not interfere with the operation of the hardware platform. On an Arm processor, calls to KeFlushIoBuffers during DMA transfers perform cache operations that are unnecessary and can degrade performance.