Управление питанием Component-Level

Начиная с Windows 8, платформа управления питанием (PoFx) позволяет драйверу управлять состояниями питания отдельных компонентов на устройстве. Управление питанием на уровне компонентов существует параллельно с управлением питанием на уровне устройства. Общие сведения см. в статье Обзор платформы управления питанием.

На этой странице описывается API PoFx для управления питанием Component-Level.

Чтобы зарегистрировать устройство под управлением PoFx, драйвер вызывает подпрограмму PoFxRegisterDevice . Драйвер передает эту подпрограмму PO_FX_DEVICE структуру, которая, помимо прочих данных, содержит массив PO_FX_COMPONENT структур. Каждый элемент в этом массиве описывает состояния мощности Fx компонента на устройстве и атрибуты каждого состояния Fx. (Как минимум, компонент, который не поддерживает управление питанием на уровне компонентов, реализует только состояние F0.) Атрибуты определенного состояния мощности Fx в определенном компоненте описываются структурой PO_FX_COMPONENT_IDLE_STATE , которая содержит следующие значения:

  • Задержка перехода— время, необходимое для перехода из этого состояния Fx в состояние F0 (полностью включен).
  • Требование к месту проживания, то есть время, которое компонент должен потратить в этом состоянии Fx, чтобы сделать переход в состояние стоящим.
  • Номинальная мощность, которая является мощностью, потребляемой компонентом в этом состоянии Fx.

PoFx использует эти сведения (в дополнение к другим системным входным данным и зависимостям) для принятия интеллектуальных решений о том, в каком состоянии питания Fx должен находиться компонент в любое время. PoFx должен уравновесить две конкурирующие цели. Во-первых, компонент, который находится в режиме простоя, должен быть настроен для потребления как можно меньше энергии. Во-вторых, компонент должен быть готов к переходу из состояния Fx с низким энергопотреблением на F0 достаточно быстро, чтобы поддерживать внешний вид устройства, которое всегда включено и всегда подключено.

Управление питанием на уровне компонентов можно выполнять только в том случае, если устройство находится в состоянии питания D0 (полностью включено). Когда устройство находится в состоянии питания D1 (почти включен), D2 (почти выключен) или D3, устройство становится недоступным. Когда устройство находится в состоянии D0, только компоненты, активно используемые драйвером, должны оставаться в состоянии F0. Неактивные компоненты могут переключиться в низкое энергопотребление Fx для снижения энергопотребления.

Пока устройство находится в состоянии питания D0, драйвер следует простому протоколу для включения управления питанием на уровне компонентов. Когда драйверу требуется доступ к компоненту, драйвер вызывает подпрограмму PoFxActivateComponent , чтобы запросить доступ к компоненту. Если компонент находится в маломощном состоянии Fx при этом вызове, PoFx инициирует переход в состояние F0 и уведомляет драйвер о завершении этого перехода. Затем драйвер может получить доступ к компоненту. Если драйверу больше не требуется доступ к компоненту, драйвер вызывает подпрограмму PoFxIdleComponent для уведомления PoFx. В ответ на этот вызов PoFx может переключить компонент в маломощное состояние Fx.

Доступный компонент находится в активном состоянии. Недоступный компонент находится в состоянии простоя. Чтобы отслеживать доступность компонентов на устройстве, PoFx поддерживает количество ссылок активации для каждого компонента. Вызов PoFxActivateComponent увеличивает количество указанного компонента на единицу, а вызов PoFxIdleComponent уменьшает число на единицу.

Если при вызове PoFxActivateComponent счетчик увеличивается с нуля до единицы, PoFx инициирует переход от условия простоя к активному условию и уведомляет драйвер о завершении этого перехода. Если poFxActivateComponent возникает, когда компонент уже находится в активном состоянии, компонент остается в активном состоянии, а драйвер не получает уведомления.

Если при вызове PoFxIdleComponent число уменьшается с единицы до нуля, PoFx инициирует переход от активного условия к условию простоя и уведомляет драйвер о завершении этого перехода. Если при вызове PoFxIdleComponent количество уменьшается, но количество остается ненулевым, компонент остается в активном состоянии, а драйвер не получает никаких уведомлений.

Число ссылок активации удобно обрабатывает ситуации, в которых двум или более путям кода в одном драйвере может потребоваться одновременный доступ к одному компоненту на устройстве. Сохраняя это количество, PoFx позволяет различным частям драйвера независимо поддерживать доступ к компоненту, не требуя от драйвера централизованного управления доступом к компоненту.

Состояние "активный/ простой" компонента является единственным надежным средством для драйвера, чтобы определить, доступен ли компонент. Компонент, который находится в состоянии питания F0, но находится в состоянии простоя, может перейти в маломощное состояние Fx.

Компонент, который находится в активном состоянии, всегда находится в состоянии F0. Компонент не может покинуть F0, пока не перейдет в состояние простоя. Компонент, который находится в состоянии простоя, может находиться в состоянии F0 или в маломощном состоянии Fx. Если компонент находится в маломощном состоянии Fx, когда вызов PoFxActivateComponent инициирует переход от условия простоя к активному условию, PoFx должен сначала переключить компонент на F0, прежде чем компонент сможет войти в активное условие.

Справочник по управлению питанием устройств