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.
[Aplica-se apenas ao KMDF]
O modo de DMA do sistema, em contraste com o bus-master DMA, descreve uma configuração em que vários dispositivos compartilham um único controlador DMA, que é normalmente multicanal.
A partir do Kernel-Mode Driver Framework (KMDF) versão 1.11, a estrutura suporta DMA no modo de sistema em sistemas baseados no System on a Chip (SoC) executados no Windows 8 ou versões posteriores do sistema operacional Windows.
Este tópico descreve o código que um driver KMDF deve fornecer nas suas funções de retorno de chamada de evento, assim como as funções opcionais de retorno de chamada de evento que pode registar, para lidar com pedidos de I/O para um dispositivo DMA em modo de sistema.
Para obter informações sobre KMDF e DMA de masterização de barramento, consulte Manipulação de solicitações de E/S em um driver KMDF para um dispositivo DMA Bus-Master.
A figura a seguir mostra as funções de retorno de chamada de evento que seu driver usa para oferecer suporte ao DMA no modo de sistema:
Criando um Ativador DMA em Modo de Sistema
A criação de um perfil DMA no modo do sistema é um processo de duas etapas. As etapas a seguir representam um cenário típico:
Normalmente, em seu função de retorno de chamada EvtDriverDeviceAdd, o driver chama WDF_DMA_ENABLER_CONFIG_INIT, definindo o parâmetro Profile como SystemMode ou SystemModeDuplex. Em seguida, o driver chama WdfDmaEnablerCreate, passando a estrutura WDF_DMA_ENABLER_CONFIG que acabou de ser recebida.
O driver pode, alternativamente, criar o ativador durante EvtDevicePrepareHardware.
O do driver EvtDevicePrepareHardware função de retorno de chamada associa o ativador DMA com seus recursos DMA chamando o WdfDmaEnablerConfigureSystemProfile método. Para um ativador duplex, o driver chama WdfDmaEnablerConfigureSystemProfile duas vezes, uma para configurar cada direção de transferência.
O driver pode chamar WdfDmaEnablerConfigureSystemProfile após EvtDevicePrepareHardware ter sido concluído, mas o driver deve chamar este método antes de inicializar as transações DMA.
Fornecimento de funções de retorno de chamada opcionais
Normalmente, os drivers KMDF não configuram canais DMA. No entanto, em determinadas circunstâncias, os controladores podem precisar executar uma configuração de canal específica. Por exemplo, um driver pode chamar uma função personalizada que é implementada pelo controlador DMA usando as seguintes etapas:
- Em um dos manipuladores de solicitação do driver, o driver chama WdfDmaTransactionSetChannelConfigurationCallback para registrar uma função de retorno de chamada EvtDmaTransactionConfigureDmaChannel.
- A função de retorno de chamada do seu driver, EvtDmaTransactionConfigureDmaChannel, chama WdfDmaEnablerWdmGetDmaAdapter para recuperar um ponteiro para o WDM DMA_ADAPTER. Esta estrutura é o objeto do adaptador que representa o canal DMA em modo de sistema do driver.
- O driver pode então chamar ConfigureAdapterChannel para habilitar funções personalizadas implementadas pelo controlador DMA. Esta rotina só pode ser chamada pelo ponteiro a partir do endereço retornado numa estrutura DMA_OPERATIONS.
- A função de retorno de chamada EvtDmaTransactionConfigureDmaChannel do seu driver retorna TRUE se configurar com êxito o canal DMA.
- A estrutura chama a função de retorno de chamada EvtProgramDmado driver.
Recebimento de notificação de conclusão da transferência
Ao contrário dos dispositivos que usam controladores de masterização de barramento, o hardware de um dispositivo DMA no modo de sistema pode não sinalizar a conclusão da transferência DMA emitindo uma interrupção.
Se o seu dispositivo não gerar uma interrupção para sinalizar a conclusão da transferência DMA, o seu driver pode fornecer uma função de callback de evento EvtDmaTransactionDmaTransferComplete que é chamada pelo framework quando uma transferência DMA no modo do sistema for concluída.
Para registar esta função de retorno de chamada, um driver invoca WdfDmaTransactionSetTransferCompleteCallback a partir de um dos seus manipuladores de pedidos .