Habilitando transições para D3cold

Todas as versões do Windows permitem que um dispositivo esteja em D3cold enquanto o computador está em suspensão (em um dos estados de baixa potência do sistema, S1 a S4). Antes que o computador saia do S0, os drivers de função, os motoristas de ônibus e os drivers de filtro trabalham juntos para mover o dispositivo para o D3hot. Quando o computador entra no estado Sx de baixa potência, essa transição tem o efeito colateral de mover o dispositivo de D3hot para D3cold.

Começando com Windows 8, um dispositivo pode entrar e sair do D3cold enquanto o computador permanece em S0. O driver que é o PPO (proprietário da política de energia) de um dispositivo pode habilitar e desabilitar essas transições para D3cold. Um driver não deve permitir que seu dispositivo insira D3cold, a menos que o dispositivo possa, se necessário, acordar de D3cold e, em seguida, retomar a operação normal após a transição para D0.

Quando um dispositivo entra em D3, ele inicialmente insere o subestado D3hot de D3. No D3hot, o dispositivo pode inserir D0 ou D3cold. Em resposta a um evento de ativação ou solicitação de E/S, o dispositivo insere D0 de D3hot. Caso contrário, o dispositivo pode permanecer em D3hot ou pode passar de D3hot para D3cold. Para obter mais informações sobre essas transições, consulte o diagrama de estado de energia do dispositivo em Estados de energia do dispositivo.

O driver não inicia a transição do dispositivo de D3hot para D3cold. Em vez disso, essa transição ocorre quando todos os outros dispositivos que compartilham uma fonte de energia comum com esse dispositivo estão em D3hot e estão preparados para inserir D3cold. Quando o último desses dispositivos entra em D3hot, os drivers de barramento subjacentes e o firmware do sistema removem a fonte de energia e os dispositivos entram em D3cold em uníssono.

O driver PPO de um dispositivo informa ao sistema operacional se deseja habilitar a transição do dispositivo de D3hot para D3cold. O driver pode fornecer essas informações no arquivo INF que instala o dispositivo ou o driver pode chamar a rotina SetD3ColdSupport em tempo de execução para habilitar ou desabilitar dinamicamente as transições do dispositivo para D3cold. Para obter mais informações, consulte Usando a interface do driver GUID_D3COLD_SUPPORT_INTERFACE.

Ao habilitar um dispositivo para inserir D3cold, um driver garante o seguinte comportamento:

  • O dispositivo pode tolerar uma transição de D3hot para D3cold quando o computador deve permanecer em S0.
  • O dispositivo funcionará corretamente quando retornar a D0 de D3cold.

Um dispositivo que não atende a nenhum dos requisitos pode, depois de inserir D3cold, ficar indisponível até que o computador seja reiniciado ou entre em um estado de suspensão. Se o dispositivo precisar ser capaz de sinalizar um evento de ativação de qualquer estado Dx de baixa potência que ele insere, a entrada em D3cold não deverá ser habilitada, a menos que o driver tenha certeza de que o sinal de ativação do dispositivo funcionará em D3cold.

Colocar um dispositivo em D3cold não significa necessariamente que todas as fontes de energia para o dispositivo foram removidas; isso significa apenas que as fontes de energia que permitem a comunicação com o dispositivo por meio do barramento se foram. O dispositivo ainda pode ser capaz de extrair energia suficiente para sinalizar um evento de ativação para o processador. Por exemplo, uma NIC (cartão interface de rede) Ethernet cuja fonte de alimentação main é removida pode extrair energia do cabo Ethernet.

Como d3cold é um estado em que o barramento não pode ser usado para se comunicar com o dispositivo, um driver não pode colocar seu dispositivo em D3cold diretamente. Em vez disso, o driver primeiro chama a rotina PoRequestPowerIrp para solicitar um IRP de energia D3 (uma solicitação de IRP_MN_SET_POWER com estado de destino = PowerDeviceD3) para mover o dispositivo de D0 para D3hot. Depois de inserir d3hot, o dispositivo pode ou não se mover de D3hot para D3cold. O dispositivo entra em D3cold somente quando a energia do barramento é removida, o que ocorre se o motorista do ônibus pai desativa o ônibus ou se o firmware do sistema desativa a energia para uma seção da plataforma de hardware.