Habilitación de transiciones a D3cold

Todas las versiones de Windows permiten que un dispositivo esté en D3cold mientras el equipo está en suspensión (en uno de los estados de bajo consumo del sistema, S1 a S4). Antes de que el equipo salga de S0, los controladores de función, los controladores de autobús y los controladores de filtro funcionan juntos para mover el dispositivo a D3hot. Cuando el equipo entra en el estado Sx de bajo consumo, esta transición tiene el efecto secundario de mover el dispositivo de D3hot a D3cold.

A partir de Windows 8, un dispositivo puede entrar y salir de D3cold mientras el equipo permanece en S0. El controlador que es el propietario de la directiva de energía (PPO) para un dispositivo puede habilitar y deshabilitar estas transiciones a D3cold. Un controlador no debe permitir que su dispositivo escriba D3cold a menos que el dispositivo pueda, si es necesario, reactivar desde D3cold y, a continuación, reanudar la operación normal después de la transición a D0.

Cuando un dispositivo entra en D3, inicialmente entra en el subestado D3hot de D3. Desde D3hot, el dispositivo puede entrar en D0 o D3cold. En respuesta a un evento de reactivación o solicitud de E/S, el dispositivo entra en D0 desde D3hot. De lo contrario, el dispositivo puede permanecer en D3hot o puede pasar de D3hot a D3cold. Para obtener más información sobre estas transiciones, consulte el diagrama de estado de energía del dispositivo en Estados de energía del dispositivo.

El controlador no inicia la transición del dispositivo de D3hot a D3cold. En su lugar, esta transición se produce cuando todos los demás dispositivos que comparten una fuente de alimentación común con este dispositivo están en D3hot y están preparados para entrar en D3cold. Cuando el último de estos dispositivos entra en D3hot, los controladores de bus subyacentes y el firmware del sistema quitan la fuente de alimentación y los dispositivos entran D3cold en unison.

El controlador PPO para un dispositivo indica al sistema operativo si se debe habilitar la transición del dispositivo de D3hot a D3cold. El controlador puede proporcionar esta información en el archivo INF que instala el dispositivo o el controlador puede llamar a la rutina SetD3ColdSupport en tiempo de ejecución para habilitar o deshabilitar dinámicamente las transiciones del dispositivo a D3cold. Para obtener más información, vea Uso de la interfaz del controlador de GUID_D3COLD_SUPPORT_INTERFACE.

Al permitir que un dispositivo escriba D3cold, un controlador garantiza el siguiente comportamiento:

  • El dispositivo puede tolerar una transición de D3hot a D3cold cuando el equipo debe permanecer en S0.
  • El dispositivo funcionará correctamente cuando vuelva a D0 desde D3cold.

Un dispositivo que no cumple cualquiera de los requisitos podría, después de escribir D3cold, no estar disponible hasta que se reinicie el equipo o entre en estado de suspensión. Si el dispositivo debe poder indicar un evento de reactivación desde cualquier estado dx de bajo consumo que entre, la entrada a D3cold no debe estar habilitada a menos que el controlador esté seguro de que la señal de reactivación del dispositivo funcionará en D3cold.

Colocar un dispositivo en D3cold no significa necesariamente que se hayan quitado todas las fuentes de alimentación del dispositivo; solo significa que las fuentes de alimentación que permiten la comunicación con el dispositivo a través del bus han desaparecido. Es posible que el dispositivo todavía pueda dibujar suficiente energía para indicar un evento de reactivación al procesador. Por ejemplo, una tarjeta de interfaz de red Ethernet (NIC) cuya fuente de alimentación principal se quita podría extraer energía del cable Ethernet.

Dado que D3cold es un estado en el que el bus no se puede usar para comunicarse con el dispositivo, un controlador no puede colocar su dispositivo directamente en D3cold. En su lugar, el controlador llama primero a la rutina PoRequestPowerIrp para solicitar un IRP de alimentación D3 (una solicitud de IRP_MN_SET_POWER con estado de destino = PowerDeviceD3) para mover el dispositivo de D0 a D3hot. Después de entrar en D3hot, el dispositivo puede o no moverse de D3hot a D3cold. El dispositivo entra en D3cold solo cuando se quita la alimentación del bus, lo que se produce si el controlador de bus primario apaga el bus o si el firmware del sistema apaga la alimentación en una sección de la plataforma de hardware.