Управление питанием PCI и драйверы устройств
В этой статье объясняется, что поставщики столкнулись с тем, как оборудование, соответствующее управлению питанием PCI (PCI-PM), взаимодействует с драйверами устройств в операционной системе и о том, как PCI-PM интегрируется с ACPI. Дополнительные сведения см. в разделе https://www.uefi.org/specifications.
Драйверы устройств и управление питанием PCI
В этом обсуждении предполагается, что вы знакомы с тем, как драйверы модели драйверов Windows (WDM) обрабатывают события управления питанием, как описано в текущем DDK Windows. Как правило, обязанности драйверов устройств выполняются следующим образом:
Водители шины: водители автобуса отвечают за перечисление, настройку и управление устройствами. Для PCI-PM драйвер PCI отвечает за чтение регистров PCI-PM для определения возможностей оборудования. Когда power IRPs запрашивает состояние питания, драйвер PCI записывает в регистры управления питанием PCI, чтобы задать оборудование различным состояниям Dx.
Если устройство включено для пробуждения, драйвер PCI записывает в регистры PCI-PM, чтобы разрешить устройству запускать PME (ACPI также примет действие, см. следующий раздел). Наконец, когда ACPI определяет, что шина PCI просыпается в системе, драйвер PCI сканирует пространство конфигурации PCI, ищет, какое устройство утверждает PME, отключает PME на этом устройстве и уведомляет драйвер для этого устройства.
Драйвер устройства: конкретный драйвер устройства отвечает за сохранение и восстановление контекста устройства, а также запрашивает изменения состояния питания в качестве владельца политики для устройства. Когда драйвер устройства получает power IRP, запрашивающий изменение состояния питания устройства ниже, драйвер устройства отвечает за сохранение любого закрытого контекста устройства, необходимого для последующего включения устройства. В некоторых случаях не может быть ничего, чтобы сохранить.
Регистры PCI-PM строго являются доменом драйвера PCI- драйвер IHV устройства не требует доступа ни к одному из этих регистров. Это приведет к тому, что система не работает надежно. Ответственность драйвера устройства заключается в выполнении только собственных действий.
Интеграция ACPI и PCI PM
Для полного управления устройством может потребоваться как управление питанием PCI, так и средство сборки исходного языка ACPI (ASL). Регистры управления питанием PCI будут контролировать внутреннее состояние устройства, например внутренние часы и плоскости питания. ASL будет управлять внешним состоянием, таким как внешние часы и плоскости питания, или в случае контроллеров видео, ASL будет управлять видеозаключами. Обратите внимание, что ASL и PCI-PM могут объединяться только на устройствах материнской платы.
Архитектура OnNow — это многоуровневая архитектура, обрабатывая интеграцию драйвера устройства, драйвера PCI и драйвера ACPI (и ASL) естественно. В следующих сценариях показано порядок вызова драйверов для обработки этих устройств.
Примечание.
Чтобы описанные выше сценарии работали, драйвер WDM должен правильно пересылать ip-адреса POWER IRP, как описано в текущей версии Microsoft WDK.
Сценарий 1. Отключение устройства
Драйвер устройства: сохраняет состояние закрытого устройства.
Драйвер PCI: сохраняет конфигурацию самонастраивающийся, отключает устройство (прерывания и BAR) и помещает устройство в D3 с помощью регистров PCI-PM.
Драйвер ACPI: выполняет код ASL (_PS3 и _OFF для ресурсов питания, которые больше не используются) для управления состоянием вне микросхемы.
Сценарий 2. Управление питанием PCI и драйверы устройств
Драйвер ACPI: выполняет код ASL (_PS0 и _ON для любых необходимых ресурсов питания OnNow) для управления состоянием вне микросхемы.
Драйвер PCI: помещает устройство в D0 с помощью регистров PCI-PM и восстанавливает конфигурацию самонастраивающийся (прерывания и BAR-это может отличаться от того, на что ранее было установлено устройство).
Драйвер устройства: восстанавливает собственный контекст на устройстве.
Сценарий 3. Включение пробуждения
Драйвер устройства: задает собственные регистры в микросхеме, чтобы включить пробуждение. Например, в шаблоне пробуждения сети это происходит, когда шаблоны будут запрограммированы в адаптер.
Драйвер PCI: задает биты пробуждения в регистрах PCI PM, чтобы устройство утверждало PME.
Драйвер ACPI: включает GPE в наборе микросхем, связанном с PME (как описано объектом _PRW, перечисленным в корневой шине PCI).
Сценарий 4. Пробуждение
Драйвер ACPI: пробуждение и сканирование битов состояния GPE для событий пробуждения, отключение GPEs для задания битов состояния GPE и выполнение любых _Lxx или _Exx методов, связанных с набором битов GPE. В ответ на уведомление о пробуждении на шине PCI драйвер ACPI завершит WAIT_WAKE IRP драйвера PCI, чтобы уведомить драйвер PCI о том, что он просыпается в системе.
Драйвер PCI: сканирует пространство конфигурации, которое ищет все устройства с заданным битом состояния PME. Для каждого устройства он отключает PME и завершает WAIT_WAKE IRP для этого устройства, чтобы сообщить драйверу о том, что он утверждает пробуждение. Драйвер PCI останавливает сканирование для устройств пробуждения, когда он сделал полный проход через все устройства PCI, не нашли никаких утверждений PME и когда PME перестает утверждаться.
Драйвер устройства: запрашивает, чтобы устройство было помещено в D0 (см. сценарий 2) и задает все собственные регистры в микросхеме, необходимые для обработки события пробуждения.
Призыв к действию по управлению питанием PCI и драйверам устройств
Интеграция возможностей ACPI и PCI-PM на устройства, как описано в этой статье.
Спецификация PCI Power Management доступна на веб-сайте PCI-SIG.
Спецификация ACPI доступна по адресу https://www.uefi.org/specifications. Эта ссылка оставляет сайт Microsoft.com.
Компилятор компонента ACPI (ACPICA) можно найти по адресу https://acpica.org/downloads/binary-tools.