Compartilhar via


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:

Fluxograma ilustrando o processo de implementação de DMA em drivers KMDF.

Conforme mostrado acima, o processamento relacionado ao DMA ocorre em quatro fases:

  1. 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.

  2. 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.

  3. 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.

  4. 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.