Compartir a través de


Inicio rápido desde un estado de Low-Power

Para lograr un inicio rápido a partir de un estado de bajo consumo, un controlador para un dispositivo de nodo hoja debe controlar un IRP de alimentación S0 (es decir, un IRP IRP_MN_SET_POWER para el estado de alimentación del sistema S0). Los dispositivos que son nodos hoja de la jerarquía de dispositivos no tienen dispositivos secundarios. Dado que un dispositivo de nodo hoja no tiene dependencias en los dispositivos secundarios, el controlador funcional del dispositivo puede reinicializar el dispositivo como una tarea en segundo plano para evitar provocar retrasos innecesarios en el sistema operativo o en otros controladores. Por el contrario, los controladores de bus tienen dependencias que requieren lógica de sincronización adicional para coordinar secuencias de encendido con sus dispositivos secundarios.

Siga estos pasos para lograr un inicio rápido de un dispositivo de nodo hoja desde un estado de bajo consumo:

  1. Establezca una rutina de finalización para el IRP de energía S0.

  2. Envíe el IRP de alimentación S0 a la pila del dispositivo.

  3. Complete el IRP de alimentación S0 inmediatamente en lugar de esperar hasta que se complete el IRP de alimentación D0. Cuando se ejecute la rutina de finalización del IRP de energía S0, haga lo siguiente:

    1. Solicite un IRP de alimentación D0 (es decir, un IRP de IRP_MN_SET_POWER para el estado de alimentación del dispositivo D0).

    2. Devuelve STATUS_SUCCESS a la rutina de finalización del IRP de energía S0.

  4. El controlador debe poner en cola las solicitudes de E/S que reciba, pero aplazar el control de cualquiera de estas solicitudes hasta que termine de procesar el IRP de energía D0.

  5. Cuando se ejecute la rutina de finalización del IRP de alimentación D0, inicialice el dispositivo, pero limite esta rutina a lo necesario para que el dispositivo esté listo para usarse.

  6. Una vez completados los pasos anteriores, el controlador puede empezar a controlar las solicitudes de E/S, incluidas las solicitudes de E/S que podrían estar en cola.

Nota Los pasos anteriores no se aplican al control de IRP de energía para cualquier estado de energía que no sea PowerSystemWorking (S0). Estos pasos se aplican específicamente al control de los IRP de energía para las transiciones de un estado de baja potencia al estado de encendido (S0).

Un inicio del sistema se completa después de que todos los dispositivos hayan completado sus IRP de energía S0. Estos dispositivos no son necesarios, al finalizar el inicio del sistema, para haber completado sus IRP de alimentación D0 o para que funcionen completamente. El administrador de energía del kernel tiene un conjunto limitado de colas de distribución irP y debe usar estas colas para notificar a todos los dispositivos del sistema del retorno al estado S0. Los controladores que no completan rápidamente sus IRP de energía S0 impiden que los controladores de otros dispositivos reciban sus IRP de alimentación S0. Por lo tanto, los controladores mal diseñados afectan al rendimiento general del inicio del sistema al provocar que las operaciones del controlador que se deben realizar simultáneamente se realicen en serie.

Una vez que un controlador complete su IRP de alimentación S0, es posible que reciba solicitudes de E/S de las aplicaciones que han abierto identificadores en el dispositivo. Los controladores nunca deben producir errores en estas solicitudes de E/S, ya que hacerlo podría hacer que las aplicaciones dejaran de responder y generar mensajes de error de tiempo de espera. En su lugar, los controladores deben poner en cola las solicitudes de E/S hasta que el dispositivo esté listo para procesarlas.

Un controlador de bus puede lograr un inicio rápido a partir de un estado de bajo consumo mediante una técnica similar a la descrita para el controlador de un dispositivo de nodo hoja. Un controlador de bus debe cumplir un requisito adicional, que es asegurarse de que las solicitudes de dispositivos secundarios para entrar en el estado D0 están marcadas como pendientes y no las completa el controlador de bus hasta que el dispositivo de bus haya entrado en el estado D0.

Por ejemplo, cuando el controlador de bus para un concentrador USB recibe un IRP de alimentación S0, el controlador solicita un IRP de alimentación D0 y completa el IRP de alimentación S0 después de recibir el IRP de alimentación D0 solicitado. Sin embargo, una vez completado el IRP de energía S0, es probable que los dispositivos secundarios del concentrador empiecen a recibir sus IRP de alimentación S0 y solicite IRP de alimentación D0. El controlador de bus debe impedir que los dispositivos secundarios entren en D0 hasta que el dispositivo concentrador entre en D0. Por lo tanto, el controlador de bus debe marcar todos los IRP de alimentación D0 de los dispositivos secundarios como pendientes y esperar a completar estos IRP hasta que el controlador de bus termine de controlar el IRP de alimentación D0 para el concentrador y el dispositivo del concentrador se inicialice completamente.

Para obtener más información sobre los IRP de energía, consulte los temas siguientes:

Control de IRP_MN_SET_POWER para estados de energía del sistema

Control de IRP_MN_SET_POWER para estados de energía del dispositivo