Supporto di Power-Down in idle nei driver UMDF
Avviso
UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2.
Gli esempi di UMDF 1 archiviati sono disponibili nell'Windows 11, versione 22H2 - Aggiornamento degli esempi di driver di maggio 2022.
Per altre informazioni, vedere Introduzione con UMDF.
Alcuni dispositivi possono immettere uno stato di sospensione mentre il sistema rimane nello stato di lavoro. Per tali dispositivi, il framework avvia l'abbassamento della potenza del dispositivo dopo che il dispositivo è stato inattiva (non usato) per un periodo di tempo predeterminato (e impostato).
Alcuni di questi dispositivi possono anche attivare un segnale di riattivazione sul bus quando rilevano un evento esterno. Il driver del bus risponde a questo segnale e lo stack di driver ripristina il dispositivo allo stato di funzionamento. I dispositivi che non rilevano eventi esterni rimangono in uno stato di bassa potenza fino a quando il framework chiede al driver del bus di avviare il ripristino del dispositivo allo stato funzionante.
Se il dispositivo può essere spento quando è inattivo, il proprietario dei criteri di alimentazione deve eseguire i due passaggi seguenti:
Chiamare IWDFDevice2::AssignS0IdleSettings o IWDFDevice3::AssignS0IdleSettingsEx per specificare:
- Stato di bassa potenza immesso dal dispositivo
- Quantità di tempo in cui il dispositivo deve rimanere inattiva prima che lo stato di alimentazione venga ridotto
- Indica se il dispositivo può rilevare un evento esterno e attivare un segnale di riattivazione sul bus
- Indica se gli utenti possono controllare le impostazioni inattive del dispositivo
- Indica se il framework può inserire il dispositivo nello stato di alimentazione D3cold quando scade il periodo di timeout di inattività
Se il driver è stato compilato con la versione 1.11 o successiva del framework, è possibile chiamare IWDFDevice3::AssignS0IdleSettingsEx anziché IWDFDevice2::AssignS0IdleSettings. Oltre alla funzionalità precedente, IWDFDevice3::AssignS0IdleSettingsEx consente al driver di specificare:
- Se la funzionalità di alimentazione inattiva del dispositivo è abilitata o disabilitata
- Se il dispositivo restituirà lo stato di lavoro (D0) quando il sistema torna allo stato di lavoro (S0)
Implementare l'interfaccia IPowerPolicyCallbackWakeFromS0 e le seguenti funzioni di callback degli eventi, se necessarie per il dispositivo:
- IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0, che consente all'hardware del dispositivo (non al bus) di rispondere a un evento di riattivazione esterno.
- IPowerPolicyCallbackWakeFromS0::OnDisarmWakeFromS0, che disabilita la capacità del dispositivo (non la capacità del bus) di rispondere a un evento di riattivazione esterno.
- IPowerPolicyCallbackWakeFromS0::OnWakeFromS0Triggered, che informa il conducente che il bus ha rilevato un segnale di riattivazione.
Il framework considera il dispositivo inattiva e avvia il conteggio del tempo di inattività, quando vengono soddisfatte tutte le condizioni seguenti:
- Nessuna delle code gestite da energia creata per questa istanza del dispositivo ha richieste in attesa nella coda o inviate al driver. Se una richiesta è stata inviata al driver e il driver lo ha inviato a una destinazione di I/O, la richiesta è ancora correlata alla coda e il dispositivo non verrà considerato inattivo. Le richieste nelle code non gestite da power-managed non vengono conteggiate verso l'inattività del dispositivo.
- Se il driver precedentemente denominato IWDFDevice2::StopIdle, il driver ha successivamente chiamato IWDFDevice2::ResumeIdle.
- Se il proprietario dei criteri di alimentazione è un driver del bus, nessuno dei dispositivi figlio del driver del bus è in D0.
Se il driver (o un utente) abilita l'alimentazione inattiva per il dispositivo, potrebbe essere necessario usare il metodo IWDFDevice2::StopIdle . Se il dispositivo si trova nello stato di lavoro (D0), questo metodo impedisce al dispositivo di chiamare IWDFDevice2::ResumeIdle. Se il dispositivo si trova in uno stato di bassa potenza quando il driver chiama IWDFDevice2::StopIdle e se il sistema si trova nello stato di lavoro (S0), il framework richiede al driver del bus di ripristinare lo stato funzionante (D0) del dispositivo. Per altre informazioni su quando il driver potrebbe dover chiamare IWDFDevice2::StopIdle, vedere la pagina di riferimento del metodo.
Se il dispositivo può riattivarsi da uno stato a bassa potenza, il driver per il bus del dispositivo partecipa alla sveglia del dispositivo. Il driver del bus in modalità kernel esegue qualsiasi operazione necessaria nella scheda del bus per abilitare e disabilitare la possibilità di riattivare un dispositivo da uno stato a bassa potenza.
Per informazioni sulle voci del Registro di sistema che controllano le funzionalità inattive di un dispositivo, vedere Controllo utente dell'inattività del dispositivo e comportamento di riattivazione in UMDF.