Un dispositivo immette uno stato di Low-Power

Un dispositivo lascia lo stato di lavoro (D0) e entra in uno stato di bassa potenza se si verifica uno dei seguenti elementi:

  • Il dispositivo è inattiva (ovvero non accessibile) ed è in grado di immettere uno stato di inattività a bassa potenza mentre il sistema rimane nello stato di lavoro (S0).

  • Lo stato di alimentazione del sistema è cambiato dallo stato di lavoro (S0) a uno stato di bassa potenza. I driver possono chiamare WdfDeviceGetSystemPowerAction per determinare il motivo per cui lo stato di alimentazione di un sistema cambia.

Per ogni driver di funzione e filtro che supporta il dispositivo, il framework esegue le operazioni seguenti, in sequenza, un driver alla volta, a partire dal driver più alto nello stack di driver:

  1. Se il driver usa l'I/O self-managed, il framework chiama la funzione di callback evtDeviceSelfManagedIoSuspend .

  2. Il framework arresta tutte le code di I/O gestite dal driver e chiama le funzioni di callback EvtIoStop (se esistenti).

  3. Se il driver è il proprietario dei criteri di alimentazione del dispositivo, il framework chiama la funzione di callback EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSx o EvtDeviceArmWakeFromSxWithReason.

  4. Se l'hardware e il driver supportano DMA, il framework chiama le funzioni di callback evtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush e EvtDmaEnablerDisabler (se presenti) per ogni canale DMA creato.

  5. Il framework chiama la funzione di callback EvtDeviceD0ExitPreInterruptsDisabletsDisabled (se esistente) del driver e chiama la funzione di callback EvtInterruptDisable del driver (se esistente) per ogni interruzione, in modo che il driver possa disabilitare gli interruzioni del dispositivo.

  6. Il framework chiama la funzione di callback EvtDeviceD0Exit del driver (se esistente).

Il driver del bus è il driver nello stack chiamato ultimo. Quando il framework chiama la funzione di callback EvtDeviceD0Exit del driver del bus, la funzione di callback imposta lo stato di alimentazione del dispositivo (un dispositivo figlio del bus) in uno stato di bassa potenza. Il framework specifica lo stato di bassa potenza D3, a meno che il proprietario dei criteri di alimentazione non abbia specificato uno stato di bassa potenza diverso.

Nota

Il metodo usato dal driver del bus per impostare lo stato di alimentazione del dispositivo figlio è specifico del bus. Ad esempio, la specifica di risparmio energia del bus PCI definisce un controllo di risparmio energia a 16 bit / Registro di stato (PMCSR). I due bit più bassi ("PowerState") determinano lo stato corrente del dispositivo e vengono usati per impostare il dispositivo in un nuovo stato di alimentazione. Quando l'oggetto pci.sys PDO riceve IRP_MN_SET_POWER/D3, legge pmCSR, modifica i bit di PowerState su 11b (livello di alimentazione D3) e scrive di nuovo il PMCSR.