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


Управление питанием устройств

Спецификация ACPI 6.3 определяет набор объектов пространства имен для указания сведений о энергопотреблении устройства. Например, один набор объектов может указать ресурсы питания, необходимые устройству в каждом поддерживаемом состоянии питания устройства. Другой тип объекта может описать возможность устройства выходить из состояния с низким энергопотреблением в ответ на аппаратные события.

Управление питанием устройств в Windows

Пока система работает (то есть система находится в рабочем состоянии, определенном ACPI, S0), отдельные устройства могут выполнять переходы между состояниями питания устройства в зависимости от активности для экономии энергии. В традиционных системах ПК определенные ACPI спящие состояния (S1–S4) также используются для экономии электроэнергии, но эти отключенные состояния спящего режима с высокой задержкой не используются на платформах Windows SoC. Таким образом, время работы батареи в значительной степени зависит от того, как платформы реализуют управление питанием устройств во время выполнения.

Устройствами, интегрированными в SoC, можно управлять питанием с помощью Windows Power Framework (PoFx). Эти интегрированные с платформой устройства управляются PoFx с помощью подключаемого модуля двигателя soC (microPEP), который знает особенности элементов управления питанием и часами SoC. Дополнительные сведения о PoFx см. в статье Обзор платформы управления питанием.

Для периферийных устройств, которые не интегрированы в SoC, Windows использует управление питанием устройств ACPI. Для этих устройств, управляемых ACPI, владелец политики управления питанием в стеке драйверов устройств (обычно это функция или драйвер класса) принимает решения о переходе состояния питания устройства, а драйвер Windows ACPI, Acpi.sys, вызывает методы управления ASL для применения необходимых элементов управления питанием для конкретной платформы.

Можно и некоторые стеки устройств использовать управление питанием устройств ACPI отдельно или в сочетании с microPEP для управления питанием на устройстве SoC.

Как описано в разделе Управление питанием устройств в ACPI, Windows поддерживает возможности управления питанием D3cold, определенные в спецификации ACPI 5.0. Используя эту поддержку, устройства, платформы и драйверы могут согласиться на полное выключение питания устройства во время простоя во время выполнения. Эта возможность может значительно увеличить время работы батареи. Однако для успешного возврата в D0 необходимо обеспечить поддержку отключения питания всеми затронутыми компонентами. По этой причине водители (автобусные и функциональные), а также сама платформа должны указать, что они поддерживают ее. Дополнительные сведения о согласии на включение драйвера D3cold см. в разделе Поддержка D3cold в драйвере.

Управление питанием устройств в ACPI

Устройства с пространством имен поддерживают до четырех состояний питания устройства: от D0 (полная функция или "включено") до D3 (без функции или "выключено"). Каждое состояние может иметь разные требования к энергопотреблению, при этом состояния с более высоким числом потребляют меньше энергии, чем состояния с более низким числом. Кроме того, состояние D3 (выключено) имеет два подсостояние: D3hot и D3cold. Подсостояние D3hot требует, чтобы устройство оставалось доступным в родительской шине, чтобы оно давалось реагировать на команды программного обеспечения, относящиеся к шине. Это требование и мощность, используемая для его удовлетворения, удаляются в D3cold. Наконец, устройство может быть вооружено для выхода из состояния с низким энергопотреблением из-за аппаратного события, а также, при необходимости, чтобы вывести платформу из состояния простоя.

Платформа указывает на поддержку D3cold, предоставляя управление ОС функцией "поддержка _PR3" (бит 2) по запросу с помощью метода возможностей OSPM на уровне платформы. Дополнительные сведения см. в разделе 6.2.10.2 "Возможности OSPM на уровне платформы" в спецификации ACPI 5.0.

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

Ресурсы питания и состояния

Устройство объявляет о своей поддержке состояния питания, перечисляя набор ресурсов питания, необходимых ему для того, чтобы находиться в этом состоянии. AcPI Power Resources представляют направляющие напряжения, которые питают устройства, и сигналы часов, которые управляют ими. Эти ресурсы объявляются в корне пространства имен. Каждый ресурс питания имеет _ON и метод _OFF, с помощью которого он управляется, а также метод _STA для отчета о своем состоянии. Дополнительные сведения см. в разделе 7.1 , "Объявление объекта Power Resource" спецификации ACPI 5.0.

Драйвер Windows ACPI, Acpi.sys, отслеживает зависимости питания между устройствами, которые совместно используют ресурсы, и, по мере перехода этих устройств между состояниями питания, гарантирует, что только те ресурсы питания, которые действительно необходимы устройству, будут включены в определенный момент времени.

Требования к ресурсам питания (_PRx)

Существует объект Требования к power Resource Requirements (_PRx), где x = 0, 1, 2 или 3 для каждого поддерживаемого состояния питания устройства. Когда драйвер устройства решает перейти в новое состояние питания, Acpi.sys гарантирует, что все ресурсы питания, необходимые для нового состояния, включены и что все ресурсы, которые больше не используются, будут отключены.

Состояние устройства поддерживается Объект требований к ресурсам для использования Ресурсы для включения в объект requirements
D0 (обязательно) _PR0 Все питание и часы, необходимые для полной работы устройства.
D1 _PR1 Любая мощность или часы, необходимые для ограниченной функциональности этого состояния, определяемой классом.
D2 _PR2 Любая мощность или часы, необходимые для ограниченной функциональности этого состояния, определяемой классом.
D3hot (обязательно) _PR3 Только питание или часы, необходимые для того, чтобы устройство отображалось в шине и отвечало на определенную команду шины.

Если определенная платформа поддерживает функцию D3cold и драйвер устройства согласится на D3cold, _PR3 ресурсы питания устройства, если они не используются каким-либо другим устройством, будут отключены через некоторое время после перехода на D3Cold.

Дополнительные сведения о требованиях к ресурсам питания для устройства, поддерживающего D3cold, см. в разделе Требования к встроенному ПО для D3cold.

Состояние питания устройства (_PSx)

Существует метод Power State, _PSx, где x = 0, 1, 2 или 3 для каждого поддерживаемого состояния питания устройства Dx. Этот метод является необязательным, но если он присутствует, он вызывается перед отключением ресурсов питания для состояния и после включения ресурсов питания для состояния. _PSx предназначено для выполнения любых действий, зависящих от платформы, необходимых для цикла питания. _PSx не должны обращаться к регистрам устройств, назначенным драйверу функции, получать доступ к стандартным регистрам шины, назначенным водителю шины, а также включать или отключать ресурсы питания, что является операцией, зарезервированной для Acpi.sys.

Возможности пробуждения

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

Состояние пробуждения устройства Sx (_SxW)

На данной платформе существует определенное сопоставление между состояниями устройств, которые поддерживают возможность пробуждения, и состояниями системы, которые могут реагировать на события пробуждения. ACPI определяет объект _SxW для предоставления этой информации операционной системе. Для каждого поддерживаемого состояния питания системы имеется объект SxW. Так как платформы SoC всегда находятся в S0, единственным интересующим объектом здесь является _S0W. Этот объект указывает возможность платформы переходить из состояния простоя с низким энергопотреблением в ответ на сигнал пробуждения устройства. Объект используется Windows для определения целевого D-состояния устройства во время простоя системы с низким энергопотреблением. Дополнительные сведения о _S0W см. в разделе 7.2.20 "_S0W (состояние пробуждения устройства S0)" в спецификации ACPI 5.0.

Для большинства платформ SoC устройства активно управляются питанием в состоянии D3 при простое, и система может просыпаться из простоя с низким энергопотреблением, пока устройство находится в этом состоянии. Для такой системы объект _S0W возвращает 3 (или 4, если он также поддерживает D3cold).

_S0W(4) является обязательным требованием для D3Cold независимо от того, поддерживает ли устройство пробуждение.

Любое D-состояние можно назначить состоянием с наименьшим энергопотреблением с поддержкой пробуждения, а некоторые классы устройств или автобусы используют разные значения. Например, устройства, подключенные к SDIO и USB, используют состояние D2 для этого состояния.

Чтобы упростить миграцию драйверов устройств с Windows 7 на Windows 8 или Windows 8.1, может потребоваться предоставить _S4W. В настоящее время единственным классом устройств, который имеет это требование, является сеть (Ndis.sys).

Прерывания с поддержкой пробуждения (_CRS)

Описание ресурса для устройства указывает, что устройство может обнаруживать событие пробуждения и сигнализировать о ней, помечая прерывание как "с поддержкой пробуждения" (ExclusiveAndWake или SharedAndWake). Windows и драйверы устройств обеспечивают специальную обработку таких прерываний, чтобы обеспечить их включение при переходе устройства в состояние с низким энергопотреблением. Дополнительные сведения см. в описаниях дескрипторов ресурсов Прерывание и GpioInt в разделах 6.4.3.6, "Расширенный дескриптор прерываний" и раздела 6.4.3.8.1 , "Дескрипторы подключения GPIO" спецификации ACPI 5.0.

Включение пробуждения

В зависимости от пользовательского сценария или системной политики устройства с поддержкой пробуждения могут быть или не могут быть вооружены для пробуждения. Таким образом, прерывания с поддержкой пробуждения могут быть включены или не могут быть включены, когда устройство неактивно. Помимо включения прерываний, Windows использует следующие механизмы для включения пробуждения на устройстве.

Спящий режим устройства (_DSW)

ACPI определяет объект _DSW как способ информирования операционной системы встроенного ПО платформы ACPI о следующем спящем режиме или маломощном периоде простоя. Этот объект является необязательным и используется только в том случае, если платформе необходимо заранее настроить оборудование пробуждения для конкретной платформы. Предоставляется целевое D-состояние для устройства и целевое S-состояние для системы. Сочетание D-состояния и S-состояния всегда будет соответствовать сведениям, предоставленным объектами _SxW устройства.

Power Resources for Wake (_PRW)

В некоторых случаях для включения пробуждения устройства необходимо включить дополнительные ресурсы питания. В этом случае устройство может предоставить объект _PRW для перечисления этих дополнительных ресурсов питания. Драйвер Windows ACPI, Acpi.sys, будет управлять этими ресурсами питания, как обычно, убедившись, что они включены, когда они необходимы устройству (т. е. устройству с поддержкой пробуждения), и отключены в противном случае.

_PRW также используется для определения возможности пробуждения для традиционных платформ ПК с полным доступом к ACPI.