Manipulando solicitações de E/S em um driver KMDF para um dispositivo DMA Bus-Master
[Aplica-se somente ao KMDF]
Estes tópicos nesta seção descrevem como um driver KMDF para um dispositivo DMA master de barramento processa uma solicitação de E/S. Se você estiver escrevendo um driver KMDF que implementa o DMA no modo de sistema, consulte Suporte System-Mode DMA.
Lidar com solicitações de E/S em um driver KMDF para um dispositivo DMA master de ônibus requer código em várias das funções de retorno de chamada de evento do driver, conforme mostrado na figura a seguir:
Conforme mostrado acima, o processamento relacionado ao DMA ocorre em quatro fases:
A função de retorno de chamada EvtDriverDeviceAdd ou EvtDevicePrepareHardware do driver deve habilitar transações de DMA para o dispositivo, para que o driver possa usar os recursos de DMA da estrutura. A mesma função de retorno de chamada também deve criar um buffer comum se o dispositivo e o driver exigirem acesso a um buffer de memória compartilhado.
Quando o driver recebe uma solicitação de E/S que exige que o dispositivo execute uma operação de DMA, um dos manipuladores de solicitação do driver deve criar e inicializar uma nova transação de DMA. (Observe que, se o driver reutilizar objetos de transação DMA, a função de retorno de chamada EvtDriverDeviceAdd do driver poderá criar os objetos de transação.) Em seguida, o manipulador de solicitação deve iniciar a transação DMA para que a estrutura possa começar a dividir a transação em transferências de DMA menores, se necessário, e chamar a função de retorno de chamada EvtProgramDma do driver.
A função de retorno de chamada EvtProgramDma do driver programa o hardware de DMA para uma única transferência de DMA e habilita interrupções de dispositivo.
Quando o dispositivo interrompe, a estrutura chama a função de retorno de chamada EvtInterruptIsr do driver, que salva informações voláteis do dispositivo e agenda a execução da função de retorno de chamada EvtInterruptDpc do driver.
A função de retorno de chamada EvtInterruptDpc do driver conclui cada transferência de DMA após o hardware terminar de processá-la. Depois que a transferência final de uma transação de DMA for concluída, a função de retorno de chamada EvtInterruptDpcconcluirá a transação de DMA.
O driver pode reutilizar seus objetos de transação de DMA para garantir que eles possam operar quando os recursos de memória estiverem baixos.
O driver pode fornecer um conjunto de funções de retorno de chamada que lidam com operações de gerenciamento de energia específicas do DMA.
Alguns drivers usam buffers comuns que um dispositivo e o driver podem acessar.