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


Поддержка Power-Down бездействия

Некоторые устройства могут переходить в состояние с низким энергопотреблением (Dx), пока система остается в рабочем (S0). Начиная с Windows 8, устройства могут переходить в режим функционального питания с низким энергопотреблением (Fx) перед переходом в состояние Dx. Для таких устройств платформа инициирует снижение мощности устройства или компонента после того, как устройство простаивает (не используется) в течение предопределенного (и настраиваемого) периода времени.

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

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

  1. Вызовите WdfDeviceAssignS0IdleSettings , чтобы указать:

    • Состояние низкого энергопотребления, в которое будет входить устройство
    • Время, в течение которого устройство должно оставаться в режиме простоя , прежде чем его состояние питания будет понижено.
    • Может ли устройство обнаружить внешнее событие и активировать сигнал пробуждения в шине
    • Могут ли пользователи управлять параметрами простоя устройства
    • Включена или отключена возможность выключения бездействия устройства
    • Возвращается ли устройство в рабочее (D0) состояние при возврате системы в рабочее состояние (S0)
    • Определяется ли значение времени ожидания простоя для устройства платформой управления питанием (PoFx)
    • Может ли платформа переводить устройство в состояние питания D3cold по истечении времени ожидания простоя

    Дополнительные сведения об этих параметрах см. в разделе структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , а также в разделе Поддержка функциональных состояний питания.

  2. Вызовите WdfDeviceInitSetPowerPolicyEventCallbacks , чтобы зарегистрировать следующие функции обратного вызова событий, если они необходимы для устройства:

    • EvtDeviceArmWakeFromS0, который позволяет оборудованию устройства (не шине) реагировать на внешнее событие пробуждения.
    • EvtDeviceDisarmWakeFromS0, который отключает возможность устройства (а не возможности автобуса) реагировать на внешнее событие пробуждения.
    • EvtDeviceWakeFromS0Triggered, который сообщает водителю, что автобус обнаружил сигнал пробуждения.

Условия простоя

Платформа считает устройство бездействующим и начинает подсчитывать время простоя при выполнении всех следующих условий:

  • Ни одна из очередей, управляемых питанием, созданных для этого экземпляра устройства, не содержит запросов, ожидающих в очереди или отправленных драйверу. Если запрос был отправлен драйверу, а драйвер отправил его в целевой объект ввода-вывода, запрос по-прежнему связан с очередью. Устройство не будет считаться бездействующее, если драйвер не использовал параметр отправить и забыл отправить запрос. Запросы в неисправных управляемых очередях не учитываются при простое устройства.
  • Если драйвер ранее назывался WdfDeviceStopIdle, он впоследствии вызывал WdfDeviceResumeIdle.
  • Если владелец политики питания является водителем автобуса, ни одно из дочерних устройств водителя автобуса не находится в D0.

Если драйвер (или пользователь) включает выключение бездействия для устройства, возможно, потребуется использовать метод WdfDeviceStopIdle . Если устройство находится в рабочем (D0) состоянии, этот метод предотвращает простаивание устройства до тех пор, пока драйвер не вызовет WdfDeviceResumeIdle. Если устройство находится в состоянии низкого энергопотребления, когда драйвер вызывает WdfDeviceStopIdle, и если система находится в рабочем (S0) состоянии, платформа запрашивает у драйвера шины восстановление устройства до рабочего (D0) состояния. Каждый успешный вызов WdfDeviceStopIdle должен соответствовать вызову WdfDeviceResumeIdle. Сведения о просмотре количества ссылок на питание в отладчике см. в разделе Отладка утечек ссылок на power в WDF.

Дополнительные сведения о том, когда драйверу может потребоваться вызывать WdfDeviceStopIdle, см. на справочной странице метода.

Если устройство может выйти из состояния с низким энергопотреблением, драйвер шины устройства участвует в пробуждении устройства. Драйвер автобуса обычно предоставляет функции обратного вызова EvtDeviceEnableWakeAtBus и EvtDeviceDisableWakeAtBus . Эти функции выполняют все необходимое для адаптера шины, чтобы включить и отключить возможность выхода устройства из состояния с низким энергопотреблением.

Сведения о записях реестра, которые управляют бездействующими возможностями устройства, см. в разделах Управление пользователем бездействия устройства и поведением пробуждения.