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


управление питанием 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, прежде чем компонент может ввести активное условие.

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