Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A versão 3 da interface de operações 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 DMA esteja disponível em todas as plataformas de hardware do Windows, essa interface tem muitos recursos para permitir que os drivers de modo kernel usem os recursos avançados dos controladores DMA do sistema em circuitos integrados System on a Chip (SoC). Esses recursos geralmente incluem a capacidade de fazer transferências DMA de dispersão/coleta. Em contraste, versões anteriores da interface de operações DMA restringem transferências DMA de dispersão/coleta para dispositivos bus-master. A interface da versão 3 simplifica o gerenciamento de listas de dispersão/coleta e reduz a necessidade de intervenção do motorista durante transferências DMA complexas.
Para usar a versão 3 da interface de operações DMA para executar uma transferência 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 DMA descrita pelo chamador.
AllocateAdapterChannelEx
Aloca os recursos necessários para a transferência 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 DMA e inicia a transferência.
FlushAdapterBuffersEx
Executa quaisquer operações de cache que possam ser necessárias no final da transferência DMA.
FreeAdapterChannel
Liberta o canal DMA e os registos de mapas.
PutDmaAdapter
Libera o objeto do adaptador.
Essas rotinas são usadas tanto para dispositivos bus-master 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 que um driver faz durante uma transferência DMA típica, consulte Basic Calling Pattern for Version-3 DMA Routines.
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 cobrem a necessidade de liberar caches de dados em plataformas que não impõem 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.