Уведомления 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_DEVICE | 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. В этом вызове значение параметра Notification равно PEP_NOTIFY_ACPI_PREPARE_DEVICE, а параметр Data указывает на PEP_ACPI_PREPARE_DEVICE структуру, содержащую имя устройства. Если PEP готова предоставить службы ACPI для этого устройства, peP устанавливает для элемента DeviceAccepted этой структуры значение TRUE. Чтобы отказаться от предоставления таких услуг, PEP устанавливает для этого элемента значение FALSE.
Если PEP указывает (установив deviceAccepted = TRUE), что он готов предоставить службы ACPI для устройства, PoFx отправит pep 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове параметр Notification имеет значение 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. В этом вызове значение параметра Notification равно 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра Notification равно 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра Notification равно 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра Notification равно 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 и 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) вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра Notification равно 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 вызывает процедуру обратного вызова AcceptAcpiNotification pep. В этом вызове значение параметра Notification равно 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 должна задать для элемента WorkInformation значение NULL, а для элемента NeedWork — значение FALSE.
Для уведомления PEP_NOTIFY_ACPI_WORK подпрограмма AcceptAcpiNotification всегда вызывается по адресу IRQL = PASSIVE_LEVEL.