Compartir a través de


Control de solicitudes de E/S en un controlador KMDF para un dispositivo DMA de Bus-Master

[Solo se aplica a KMDF]

En estos temas de esta sección se describe cómo un controlador KMDF para un dispositivo DMA maestro de bus procesa una solicitud de E/S. Si va a escribir un controlador KMDF que implemente DMA en modo sistema, consulte Compatibilidad con System-Mode DMA.

Controlar las solicitudes de E/S en un controlador KMDF para un dispositivo DMA maestro de bus requiere código en varias de las funciones de devolución de llamada de eventos del controlador, como se muestra en la ilustración siguiente:

Diagrama de flujo que ilustra el proceso de implementación de DMA en controladores KMDF.

Como se ha mostrado anteriormente, el procesamiento relacionado con DMA tiene lugar en cuatro fases:

  1. La función de devolución de llamada EvtDriverDeviceAdd o EvtDevicePrepareHardware del controlador debe habilitar las transacciones DMA para el dispositivo, de modo que el controlador pueda usar las funcionalidades de DMA del marco. La misma función de devolución de llamada también debe crear un búfer común si el dispositivo y el controlador requieren acceso a un búfer de memoria compartida.

  2. Cuando el controlador recibe una solicitud de E/S que requiere que el dispositivo realice una operación DMA, uno de los controladores de solicitudes del controlador debe crear e inicializar una nueva transacción DMA. (Tenga en cuenta que si el controlador reutiliza objetos de transacción DMA, la función de devolución de llamada EvtDriverDeviceAdd del controlador puede crear los objetos de transacción). A continuación, el controlador de solicitudes debe iniciar la transacción DMA para que el marco pueda empezar a dividir la transacción en transferencias DMA más pequeñas, si es necesario, y llamar a la función de devolución de llamada EvtProgramDma del controlador.

  3. La función de devolución de llamada EvtProgramDma del controlador programa el hardware DMA para una única transferencia DMA y habilita las interrupciones del dispositivo.

  4. Cuando se interrumpe el dispositivo, el marco llama a la función de devolución de llamada EvtInterruptIsr del controlador, que guarda información volátil del dispositivo y programa la ejecución de la función de devolución de llamada EvtInterruptDpc del controlador.

    La función de devolución de llamada EvtInterruptDpc del controlador completa cada transferencia DMA después de que el hardware termine de procesarlo. Una vez completada la transferencia final de una transacción DMA, la función de devolución de llamada EvtInterruptDpccompleta la transacción DMA.

El controlador puede reutilizar sus objetos de transacción DMA para asegurarse de que pueden funcionar cuando los recursos de memoria son bajos.

El controlador puede proporcionar un conjunto de funciones de devolución de llamada que controlan las operaciones de administración de energía específicas de DMA.

Algunos controladores usan búferes comunes a los que puede acceder un dispositivo y el controlador.