Поделиться через


Устройство возвращается в рабочее состояние

Устройство, которое находится в состоянии низкого энергопотребления, возвращается в рабочее состояние, если происходит одно из следующих действий:

  • Устройство обнаруживает внешнее событие и запускает сигнал пробуждения на шине. Водитель автобуса, который обнаруживает сигнал пробуждения, вызывает WdfDeviceIndicateWakeStatus. В результате платформа вызывает функцию обратного вызова EvtDeviceDisableWakeAtBus водителя автобуса.

  • Устройство бездействует, и драйвер вызывает WdfDeviceStopIdle.

  • Состояние питания системы изменилось с состояния с низким энергопотреблением на рабочее состояние (S0).

В каждой из этих ситуаций платформа вызывает функцию обратного вызова EvtDeviceD0Entry водителя автобуса, которая затем восстанавливает устройство (дочернее устройство шины) в рабочее состояние (D0).

Для каждого драйвера функции и фильтра, поддерживающего устройство, платформа последовательно выполняет по одному драйверу, начиная с самого низкого уровня в стеке драйверов:

  1. Платформа вызывает функцию обратного вызова EvtDeviceD0Entry драйвера (если она существует).

  2. Платформа вызывает функцию обратного вызова EvtInterruptEnable драйвера (если она существует) для каждого прерывания, а затем вызывает функцию обратного вызова EvtDeviceD0EntryPostInterruptsEnabled драйвера (если она существует), чтобы драйвер мог включить прерывания устройства.

  3. Если оборудование и драйвер поддерживают DMA, платформа вызывает функции обратного вызова EvtDmaEnablerFill, EvtDmaEnablerEnable иEvtDmaEnablerSelfManagedIoStart (если они существуют) для каждого созданного канала DMA.

  4. Если драйвер является владельцем политики управления питанием устройства, платформа вызывает функцию обратного вызова EvtDeviceDisarmWakeFromS0 или EvtDeviceDisarmWakeFromSx .

  5. Платформа вызывает функцию обратного вызова EvtChildListScanForChildren драйвера (если она существует).

  6. Платформа перезапускает все управляемые энергопотреблением очереди ввода-вывода драйвера и вызывает их функции обратного вызова EvtIoResume (при необходимости).

  7. Если драйвер использует самоуправляемый ввод-вывод, платформа вызывает функцию обратного вызова EvtDeviceSelfManagedIoRestart драйвера.