Supporto dell'Power-Down di inattività

Alcuni dispositivi possono immettere uno stato di bassa potenza (Dx) mentre il sistema rimane nello stato funzionante (S0). A partire da Windows 8, i dispositivi possono passare a uno stato di potenza funzionale a bassa potenza (Fx) prima di entrare in uno stato Dx. Per tali dispositivi, il framework avvia l'abbassamento della potenza del dispositivo o del componente dopo che il dispositivo è stato inattiva (non usato) per un periodo di tempo predeterminato (e impostabile).

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 o il componente possono essere spenti quando è inattivo, la funzione EvtDriverDeviceAdd callback nel proprietario dei criteri di alimentazione deve eseguire i due passaggi seguenti:

  1. Chiamare WdfDeviceAssignS0IdleSettings 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
    • 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)
    • Indica se il valore di timeout inattiva per il dispositivo è determinato dal framework di gestione energia (PoFx)
    • Indica se il framework può inserire il dispositivo nello stato di alimentazione D3cold quando scade il periodo di timeout di inattività

    Per altre informazioni su queste impostazioni, vedere la struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , nonché il supporto degli stati di alimentazione funzionale.

  2. Chiamare WdfDeviceInitSetPowerPolicyEventCallbacks per registrare le seguenti funzioni di callback degli eventi, se necessario per il dispositivo:

    • EvtDeviceArmWakeFromS0, che consente all'hardware del dispositivo (non al bus) di rispondere a un evento di riattivazione esterno
    • EvtDeviceDisarmWakeFromS0, che disabilita la capacità del dispositivo (non la capacità del bus) di rispondere a un evento di riattivazione esterno
    • EvtDeviceWakeFromS0Triggered, che informa il conducente che il bus ha rilevato un segnale di riattivazione.

Condizioni di inattività

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. Il dispositivo non verrà considerato inattiva, a meno che il driver non usa l'opzione invia e dimentica per inviare la richiesta. Le richieste nelle code non gestite dall'alimentazione non vengono conteggiate verso l'inattività del dispositivo.
  • Se il driver precedentemente denominato WdfDeviceStopIdle, il driver ha successivamente chiamato WdfDeviceResumeIdle.
  • 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 WdfDeviceStopIdle . Se il dispositivo si trova nello stato di lavoro (D0), questo metodo impedisce al dispositivo di chiamare WdfDeviceResumeIdle. Se il dispositivo si trova in uno stato di bassa potenza quando il driver chiama WdfDeviceStopIdle e se il sistema si trova nello stato funzionante (S0), il framework richiede al driver del bus di ripristinare lo stato funzionante (D0) del dispositivo. Ogni chiamata riuscita a WdfDeviceStopIdle deve essere corrispondente a una chiamata a WdfDeviceResumeIdle. Per informazioni sulla visualizzazione del conteggio dei riferimenti di alimentazione nel debugger, vedere Debug delle perdite di riferimento di Power Reference in WDF.

Per altre informazioni su quando il driver potrebbe dover chiamare WdfDeviceStopIdle, 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 fornisce in genere funzioni di callback EvtDeviceEnableWakeAtBus e EvtDeviceDisableWakeAtBus . Queste funzioni fanno qualsiasi cosa sia necessaria nella scheda del bus per abilitare e disabilitare la possibilità di riattivare un dispositivo da uno stato di 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.