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


Уведомления ACPI

Каждое уведомление ACPI, которое получает подпрограмма обратного вызова AcceptAcpiNotification модуля PEP, сопровождается параметром Notification, указывающим тип уведомления, и параметром Data, указывающим на структуру данных, содержащую информацию для указанного типа уведомления.

В этом вызове параметр Notification установлен на значение константы PEP_NOTIFY_ACPI_XXX, указывающее тип уведомления. Параметр Data указывает на тип структуры PEP_ACPI_XXX, связанный с этим типом уведомления.

Следующие идентификаторы уведомлений ACPI используются подпрограммой обратного вызова AcceptAcpiNotification.

Идентификатор уведомления Ценность Связанная структура
PEP_NOTIFY_ACPI_PREPARE_DEVICE 0x01 PEP_ACPI_PREPARE_DEVICE
PEP_NOTIFY_ACPI_ABANDON_DEVICE 0x02 PEP_ACPI_ABANDON_DEVICE
PEP_NOTIFY_ACPI_REGISTER_УСТРОЙСТВО 0x03 PEP_ACPI_REGISTER_DEVICE
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE 0x04 PEP_ACPI_UNREGISTER_DEVICE
PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 0x05 PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE
PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION 0x06 PEP_ACPI_QUERY_OBJECT_INFORMATION
PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD 0x07 PEP_ACPI_EVALUATE_CONTROL_METHOD
PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES 0x08 PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES
PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES 0x09 PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

PEP_NOTIFY_ACPI_PREPARE_DEVICE

Уведомление: значение PEP_NOTIFY_ACPI_PREPARE_DEVICE. Данные: указатель на структуру PEP_ACPI_PREPARE_DEVICE, которая определяет устройство по имени.

Позволяет PEP выбрать, следует ли предоставлять службы ACPI для устройства.

Платформа управления питанием Windows (PoFx) отправляет это уведомление, когда драйвер Windows ACPI обнаруживает новое устройство в пространстве имен ACPI во время перечисления устройств. Это уведомление отправляется в PEP, которые реализуют процедуры обратного вызова AcceptAcpiNotification.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_PREPARE_DEVICE, PoFx вызывает подпрограмму AcceptAcpiNotification PEP. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_PREPARE_DEVICE, а параметр Data указывает на структуру PEP_ACPI_PREPARE_DEVICE, содержащую имя устройства. Если PEP готов предоставить службы ACPI для этого устройства, PEP устанавливает для элемента DeviceAccepted этой структуры значение TRUE. Чтобы отказаться от предоставления таких служб, PEP задает этому члену значение FALSE.

Если PEP указывает (установив для DeviceAccepted значение TRUE), что он готов предоставить службы ACPI для устройства, PoFx ответит, отправив уведомление PEP_NOTIFY_ACPI_REGISTER_DEVICE, чтобы зарегистрировать PEP в качестве единственного поставщика служб ACPI для устройства. PoFx ожидает, что только один PEP претендует на роль предоставляющего услуги ACPI для устройства.

Рекомендуется не выполнять инициализацию устройств в ответ на уведомление PEP_NOTIFY_ACPI_PREPARE_DEVICE. Вместо этого отложите инициализацию до тех пор, пока не будет получено уведомление PEP_NOTIFY_ACPI_REGISTER_DEVICE для устройства или вызван метод управления ACPI (например, _INI) для устройства.

Для уведомления PEP_NOTIFY_ACPI_PREPARE_DEVICE процедура AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ABANDON_DEVICE

Уведомление: значение для параметра PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Данные: указатель на структуру PEP_ACPI_ABANDON_DEVICE, которая идентифицирует заброшенное устройство.

Уведомляет PEP о том, что указанное устройство было заброшено и больше не нуждается в услугах ACPI, предоставляемых PEP.

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

Чтобы отправить уведомление PEP_NOTIFY_ACPI_ABANDON_DEVICE, PoFx вызывает подпрограмму обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_ABANDON_DEVICE, а параметр Data указывает на структуру PEP_ACPI_ABANDON_DEVICE.

PoFx отправляет это уведомление только в PEP, который вызвался предоставлять службы ACPI для устройства в предыдущем уведомлении PEP_NOTIFY_ACPI_PREPARE_DEVICE. Если PEP зарегистрировался для предоставления этих услуг в предыдущем уведомлении PEP_NOTIFY_ACPI_REGISTER_DEVICE, PoFx отправит уведомление PEP_NOTIFY_ACPI_UNREGISTER_DEVICE для устройства перед отправкой уведомления PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Для уведомления PEP_NOTIFY_ACPI_ABANDON_DEVICE подпрограмма AcceptAcpiNotification всегда вызывается на IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_REGISTER_DEVICE

Уведомление: значение PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Данные: указатель на структуру PEP_ACPI_REGISTER_DEVICE, которая идентифицирует устройство. В ответ на это уведомление ожидается, что PEP создаст корректное значение PEPHANDLE для идентификации устройства и запишет это значение дескриптора в структуру.

Регистрирует PEP в качестве единственного поставщика служб ACPI для указанного устройства.

Фреймворк управления питанием Windows (PoFx) отправляет это уведомление PEP, который в предыдущем уведомлении PEP_NOTIFY_ACPI_PREPARE_DEVICE указал, что он готов предоставить ACPI службы для указанного устройства.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_REGISTER_DEVICE, PoFx вызывает процедуру AcceptAcpiNotification PEP. В этом вызове значение параметра уведомления — PEP_NOTIFY_ACPI_REGISTER_DEVICE, а параметр Data указывает на структуру PEP_ACPI_REGISTER_DEVICE, определяющую устройство, для которого PEP должен предоставить услуги ACPI.

Для уведомления PEP_NOTIFY_ACPI_REGISTER_DEVICE функция AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE

Уведомление: значение PEP_NOTIFY_ACPI_UNREGISTER_DEVICE.

Данные: указатель на структуру PEP_ACPI_UNREGISTER_DEVICE, содержащую PEPHANDLE для устройства.

Отменяет регистрацию указанного устройства для служб ACPI из PEP.

В ответ на это уведомление PEP может уничтожить PEPHANDLE, созданный для этого устройства в предыдущем уведомлении PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, PoFx вызывает процедуру обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, а параметр Data указывает на структуру PEP_ACPI_UNREGISTER_DEVICE.

Для уведомления PEP_NOTIFY_ACPI_UNREGISTER_DEVICE процедура AcceptAcpiNotification всегда вызывается на IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE

Уведомление: значение PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Данные: указатель на структуру PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE, содержащую перечисление объектов в пространстве имен ACPI устройства.

Запрашивает у PEP список объектов ACPI (нативных методов), поддерживаемых PEP для указанного устройства в пространстве имен ACPI.

Драйвер Windows ACPI использует объекты, перечисленные этим уведомлением, для создания пространства имен для указанного устройства. После этого при обращении к этому устройству драйвер ACPI запрашивает PEP только для этих объектов.

Платформа управления питанием Windows (PoFx) отправляет уведомление PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE вскоре после того, как устройство обнаружено и PEP завершает регистрацию для предоставления ACPI-сервисов для этого устройства. Более подробную информацию об этой регистрации см. в PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, PoFx вызывает функцию обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра notification равно PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, а параметр Data указывает на структуру PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Ожидается, что подпрограмма AcceptAcpiNotification обрабатывает уведомление PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE и возвращает значение TRUE. Отсутствие выполнения этого приводит к проверке ошибок.

Для уведомления PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE функция AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION

Уведомление: параметр PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION.

Данные: указатель на структуру PEP_ACPI_QUERY_OBJECT_INFORMATION, указывающую атрибуты объекта ACPI.

Делает запрос PEP для получения сведений о ранее перечисленном объекте ACPI.

Платформа управления питанием Windows (PoFx) отправляет это уведомление, чтобы запросить у PEP информацию об атрибутах объекта, который был перечислен во время обработки предыдущего уведомления PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE. В настоящее время перечисляются только методы управления.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, PoFx вызывает процедуру обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, а параметр Data указывает на структуру PEP_ACPI_QUERY_OBJECT_INFORMATION.

Для уведомления PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION подпрограмма AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD

Уведомление: значение PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD.

Данные: указатель на структуру PEP_ACPI_EVALUATE_CONTROL_METHOD, указывающую метод управления ACPI для вычисления, входной аргумент для предоставления этому методу и выходной буфер для результата.

Используется для оценки метода управления ACPI, для которого PEP является зарегистрированным обработчиком.

Платформа управления питанием Windows (PoFx) отправляет это уведомление в PEP, когда драйвер WINDOWS ACPI должен оценить метод управления ACPI, реализованный PEP.

Чтобы отправить уведомление PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, PoFx вызывает подпрограмму обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, а параметр Data указывает на структуру PEP_ACPI_EVALUATE_CONTROL_METHOD.

Конструктор платформы может выбрать, следует ли использовать PEP или встроенное ПО ACPI для обработки определенного метода управления ACPI. Если PEP является зарегистрированным обработчиком для метода управления ACPI, PoFx отвечает на запрос от драйвера Windows ACPI об оценке этого метода, отправляя уведомление PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD в PEP.

Ниже приведен список примеров методов управления ACPI, которые PEP может обрабатывать для устройства:

Идентификация и конфигурация устройств: _HID, _CID, _UID, _ADR, _CLS, _SUB, _CRS, _PRS и т. д. Управление питанием устройств и пробуждение: _PS0 через _PS3, _PR0 через _PR3, _DSW и т. д. Методы, относящиеся к устройству: _DSM и любые методы управления стека устройств. Для специального устройства, например устройства ACPI Time and Alarm, это уведомление используется для оценки методов времени и сигналов тревоги (_GCP, _GRT, _SRT и т. д.).

Для уведомления PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD процедура AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES

Уведомление: значение PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Данные: указатель на структуру PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, содержащую список ресурсов питания.

Запрашивает у PEP список сырьевых ресурсов, необходимых для управления питанием устройства.

В ответ на это уведомление PEP предоставляет список необработанных ресурсов, необходимых для управления питанием устройства. Драйвер Windows ACPI нуждается в этом списке, чтобы резервировать требуемые устройством ресурсы питания и предоставить в PEP соответствующий список переведенных ресурсов (посредством отправки уведомления PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES). Дополнительные сведения см. в разделе "Необработанные" и "Переведенные ресурсы".

Чтобы отправить уведомление PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, платформа управления питанием Windows (PoFx) вызывает подпрограмму обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, а параметр Data указывает на структуру PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Для уведомления PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES процедура AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

Уведомление: значение PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Данные: указатель на структуру PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, содержащую список переведенных ресурсов.

Предоставляет PEP список переведенных ресурсов для всех необходимых ресурсов управления питанием устройства.

Платформа управления питанием Windows (PoFx) отправляет это уведомление, если PEP перечислил все необработанные ресурсы в ответ на предыдущее уведомление PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES. Уведомление PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES предоставляет PEP с соответствующим списком переведенных ресурсов. Дополнительные сведения см. в разделе "Необработанные" и "Переведенные ресурсы".

Чтобы отправить уведомление PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, PoFx вызывает подпрограмму обратного вызова PEP AcceptAcpiNotification. В этом вызове значение параметра уведомления равно PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, а параметр Data указывает на структуру PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Для уведомления PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES функция AcceptAcpiNotification всегда вызывается на уровне IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_WORK

Уведомление: значение PEP_NOTIFY_ACPI_WORK.

Данные: указатель на структуру PEP_WORK.

Отправляется в PEP однократно каждый раз, когда PEP вызывает подпрограмму RequestWorker, чтобы запросить элемент работы из системы управления питанием Windows (PoFx). Это уведомление используется исключительно для работы с ACPI.

Когда PEP вызывает подпрограмму RequestWorker, чтобы запросить рабочий элемент, PoFx отвечает, отправив PEP уведомления PEP_NOTIFY_ACPI_WORK. Однако это уведомление не отправляется, пока не будут доступны ресурсы (то есть рабочий поток), необходимые для обработки рабочего элемента. Таким образом, PoFx гарантирует, что запрос на выполнение, который PEP передает в PoFx во время уведомления, никогда не может завершиться ошибкой из-за нехватки ресурсов.

При входе PEP следует предположить, что структура PEP_WORK неинициализирована. Чтобы обработать это уведомление, PEP должен задать элемент WorkInformation, чтобы он указывал на выделенную PEP структуру PEP_WORK_INFORMATION, которая описывает запрашиваемую работу. Кроме того, PEP должен задать элемент NeedWork структуры PEP_WORK значением TRUE, чтобы убедиться, что PEP обработал уведомление PEP_NOTIFY_ACPI_WORK и что элемент WorkInformation указывает на действительную структуру PEP_WORK_INFORMATION. Если PEP не удается обработать уведомление или не удается выделить структуру PEP_WORK_INFORMATION, PEP должен установить значение NULL для члена WorkInformation и установить значение FALSE для члена NeedWork.

Для уведомления PEP_NOTIFY_ACPI_WORK подпрограмма AcceptAcpiNotification всегда вызывается в IRQL = PASSIVE_LEVEL.