Поддержка Power-Down бездействия
Некоторые устройства могут переходить в состояние с низким энергопотреблением (Dx), пока система остается в рабочем (S0). Начиная с Windows 8, устройства могут переходить в режим функционального питания с низким энергопотреблением (Fx) перед переходом в состояние Dx. Для таких устройств платформа инициирует снижение мощности устройства или компонента после того, как устройство простаивает (не используется) в течение предопределенного (и настраиваемого) периода времени.
Некоторые из этих устройств также могут активировать сигнал пробуждения в шине при обнаружении внешнего события. Водитель автобуса реагирует на этот сигнал, и стек драйверов восстанавливает устройство в рабочее состояние. (Устройства, которые не обнаруживают внешние события, остаются в состоянии низкого энергопотребления до тех пор, пока платформа не попросит водителя шины начать восстановление устройства до его рабочего состояния.)
Если устройство или компонент могут быть выключены в режиме простоя, функция обратного вызова EvtDriverDeviceAddу владельца политики питания должна выполнить следующие два действия:
Вызовите WdfDeviceAssignS0IdleSettings , чтобы указать:
- Состояние низкого энергопотребления, в которое будет входить устройство
- Время, в течение которого устройство должно оставаться в режиме простоя , прежде чем его состояние питания будет понижено.
- Может ли устройство обнаружить внешнее событие и активировать сигнал пробуждения в шине
- Могут ли пользователи управлять параметрами простоя устройства
- Включена или отключена возможность выключения бездействия устройства
- Возвращается ли устройство в рабочее (D0) состояние при возврате системы в рабочее состояние (S0)
- Определяется ли значение времени ожидания простоя для устройства платформой управления питанием (PoFx)
- Может ли платформа переводить устройство в состояние питания D3cold по истечении времени ожидания простоя
Дополнительные сведения об этих параметрах см. в разделе структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , а также в разделе Поддержка функциональных состояний питания.
Вызовите WdfDeviceInitSetPowerPolicyEventCallbacks , чтобы зарегистрировать следующие функции обратного вызова событий, если они необходимы для устройства:
- EvtDeviceArmWakeFromS0, который позволяет оборудованию устройства (не шине) реагировать на внешнее событие пробуждения.
- EvtDeviceDisarmWakeFromS0, который отключает возможность устройства (а не возможности автобуса) реагировать на внешнее событие пробуждения.
- EvtDeviceWakeFromS0Triggered, который сообщает водителю, что автобус обнаружил сигнал пробуждения.
Условия простоя
Платформа считает устройство бездействующим и начинает подсчитывать время простоя при выполнении всех следующих условий:
- Ни одна из очередей, управляемых питанием, созданных для этого экземпляра устройства, не содержит запросов, ожидающих в очереди или отправленных драйверу. Если запрос был отправлен драйверу, а драйвер отправил его в целевой объект ввода-вывода, запрос по-прежнему связан с очередью. Устройство не будет считаться бездействующее, если драйвер не использовал параметр отправить и забыл отправить запрос. Запросы в неисправных управляемых очередях не учитываются при простое устройства.
- Если драйвер ранее назывался WdfDeviceStopIdle, он впоследствии вызывал WdfDeviceResumeIdle.
- Если владелец политики питания является водителем автобуса, ни одно из дочерних устройств водителя автобуса не находится в D0.
Если драйвер (или пользователь) включает выключение бездействия для устройства, возможно, потребуется использовать метод WdfDeviceStopIdle . Если устройство находится в рабочем (D0) состоянии, этот метод предотвращает простаивание устройства до тех пор, пока драйвер не вызовет WdfDeviceResumeIdle. Если устройство находится в состоянии низкого энергопотребления, когда драйвер вызывает WdfDeviceStopIdle, и если система находится в рабочем (S0) состоянии, платформа запрашивает у драйвера шины восстановление устройства до рабочего (D0) состояния. Каждый успешный вызов WdfDeviceStopIdle должен соответствовать вызову WdfDeviceResumeIdle. Сведения о просмотре количества ссылок на питание в отладчике см. в разделе Отладка утечек ссылок на power в WDF.
Дополнительные сведения о том, когда драйверу может потребоваться вызывать WdfDeviceStopIdle, см. на справочной странице метода.
Если устройство может выйти из состояния с низким энергопотреблением, драйвер шины устройства участвует в пробуждении устройства. Драйвер автобуса обычно предоставляет функции обратного вызова EvtDeviceEnableWakeAtBus и EvtDeviceDisableWakeAtBus . Эти функции выполняют все необходимое для адаптера шины, чтобы включить и отключить возможность выхода устройства из состояния с низким энергопотреблением.
Сведения о записях реестра, которые управляют бездействующими возможностями устройства, см. в разделах Управление пользователем бездействия устройства и поведением пробуждения.