Compartir a través de


Escribir rutinas adapterControl

La mayoría de los controladores de los dispositivos DMA tienen una rutina AdapterControl , que es responsable de iniciar operaciones DMA. (Los controladores que no requieren rutinas AdapterControl incluyen las que usan DMA de dispersión y recopilación y las que usan common-buffer, bus-master DMA).

Cuando un controlador llama a AllocateAdapterChannel, su rutina AdapterControl se ejecuta inmediatamente si el controlador DMA del sistema o el adaptador bus-master está disponible para una operación DMA y si hay suficientes registros de mapa disponibles. De lo contrario, la rutina AdapterControl se pone en cola hasta que estos recursos están disponibles.

Si la rutina AdapterControl del controlador devuelve KeepObject o DeallocateObjectKeepRegisters (conservando así el canal del controlador DMA del sistema o el adaptador de bus-master para operaciones de transferencia adicionales), la rutina DpcForIsr o CustomDpc del controlador es responsable de liberar el objeto de adaptador o los registros de mapa llamando a FreeAdapterChannel o FreeMapRegisters antes de que la rutina DPC complete el IRP actual y devuelva el control.