Suporte a Power-Down ociosos em drivers UMDF
Aviso
O UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2.
Os exemplos de UMDF 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.
Para obter mais informações, consulte Introdução com UMDF.
Alguns dispositivos podem entrar em um estado de suspensão enquanto o sistema permanece em seu estado de trabalho. Para esses dispositivos, a estrutura inicia a redução da energia do dispositivo depois que o dispositivo estiver ocioso (não usado) por um período predeterminado (e configurável).
Alguns desses dispositivos também podem disparar um sinal de ativação no barramento quando detectam um evento externo. O motorista do ônibus responde a esse sinal e a pilha do driver restaura o dispositivo para seu estado de trabalho. (Os dispositivos que não detectam eventos externos permanecem em um estado de baixa potência até que a estrutura peça ao motorista do ônibus que inicie a restauração do dispositivo para seu estado de trabalho.)
Se o dispositivo puder ser desligado quando estiver ocioso, o proprietário da política de energia deverá executar as duas etapas a seguir:
Chame IWDFDevice2::AssignS0IdleSettings ou IWDFDevice3::AssignS0IdleSettingsEx para especificar:
- O estado de baixa potência que o dispositivo inserirá
- A quantidade de tempo que o dispositivo deve permanecer ocioso antes que seu estado de energia seja reduzido
- Se o dispositivo pode detectar um evento externo e disparar um sinal de ativação no barramento
- Se os usuários podem controlar as configurações ociosas do dispositivo
- Se a estrutura pode colocar o dispositivo no estado de energia D3cold quando o período de tempo limite ocioso expirar
Se o driver tiver sido criado com a versão 1.11 ou posterior da estrutura, você poderá chamar IWDFDevice3::AssignS0IdleSettingsEx em vez de IWDFDevice2::AssignS0IdleSettings. Além da funcionalidade acima, IWDFDevice3::AssignS0IdleSettingsEx permite que o driver especifique:
- Se o recurso de desligar ocioso do dispositivo está habilitado ou desabilitado
- Se o dispositivo retornará ao estado de trabalho (D0) quando o sistema retornar ao estado de trabalho (S0)
Implemente a interface IPowerPolicyCallbackWakeFromS0 e as seguintes funções de retorno de chamada de evento, se precisar delas para seu dispositivo:
- IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0, que permite que o hardware do dispositivo (não o barramento) responda a um evento de ativação externo.
- IPowerPolicyCallbackWakeFromS0::OnDisarmWakeFromS0, que desabilita a capacidade do dispositivo (não a capacidade do barramento) de responder a um evento de ativação externo.
- IPowerPolicyCallbackWakeFromS0::OnWakeFromS0Triggered, que informa ao motorista que o ônibus detectou um sinal de ativação.
A estrutura considera o dispositivo ocioso e começa a contar o tempo ocioso, quando todas as seguintes condições são atendidas:
- Nenhuma das filas gerenciadas por energia criadas para essa instância de dispositivo tem solicitações aguardando na fila ou enviadas para o driver. Se uma solicitação foi enviada para o driver e o driver a enviou para um destino de E/S, a solicitação ainda está relacionada à fila e o dispositivo não será considerado ocioso. As solicitações em filas não gerenciadas por energia não são contadas para o dispositivo ocioso.
- Se o driver anteriormente chamado IWDFDevice2::StopIdle, o driver posteriormente chamou IWDFDevice2::ResumeIdle.
- Se o proprietário da política de energia for um motorista de ônibus, nenhum dos dispositivos filho do motorista do ônibus estará em D0.
Se o driver (ou um usuário) habilitar a energia ociosa para o dispositivo, talvez seja necessário usar o método IWDFDevice2::StopIdle . Se o dispositivo estiver em seu estado de trabalho (D0), esse método impedirá que o dispositivo seja idling até que o driver chame IWDFDevice2::ResumeIdle. Se o dispositivo estiver em um estado de baixa potência quando o driver chamar IWDFDevice2::StopIdle e se o sistema estiver em seu estado de trabalho (S0), a estrutura solicitará que o motorista do barramento restaure o dispositivo para seu estado de trabalho (D0). Para obter mais informações sobre quando o driver pode ter que chamar IWDFDevice2::StopIdle, consulte a página de referência do método.
Se o dispositivo puder se ativar de um estado de baixa potência, o driver do barramento do dispositivo participará da ativação do dispositivo. O driver de barramento no modo kernel faz o que for necessário no adaptador de barramento para habilitar e desabilitar a capacidade de um dispositivo de acordar de um estado de baixa potência.
Para obter informações sobre entradas do Registro que controlam os recursos ociosos de um dispositivo, consulte Controle de usuário do comportamento ocioso e de ativação do dispositivo no UMDF.