Notificaciones ACPI

Cada notificación ACPI que recibe la rutina de devolución de llamada AcceptAcpiNotification del PEP va acompañada de un parámetro Notification que indica el tipo de notificación y un parámetro Data que apunta a una estructura de datos que contiene la información del tipo de notificación especificado.

En esta llamada, el parámetro Notification se establece en un valor constante PEP_NOTIFY_ACPI_XXX que indica el tipo de notificación. El parámetro Data apunta a un tipo de estructura PEP_ACPI_XXX asociado a este tipo de notificación.

La rutina de devolución de llamada AcceptAcpiNotification usa los siguientes identificadores de notificación ACPI.

Identificador de notificación Valor Estructura asociada
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

Notificación: valor PEP_NOTIFY_ACPI_PREPARE_DEVICE. Datos: puntero a una estructura de PEP_ACPI_PREPARE_DEVICE que identifica el dispositivo por nombre.

Permite al PEP elegir si debe proporcionar servicios ACPI para un dispositivo.

El marco de administración de energía de Windows (PoFx) envía esta notificación cuando el controlador ACPI de Windows detecta un nuevo dispositivo en el espacio de nombres ACPI durante la enumeración de dispositivos. Esta notificación se envía a los PEP que implementan rutinas de devolución de llamada AcceptAcpiNotification.

Para enviar una notificación de PEP_NOTIFY_ACPI_PREPARE_DEVICE, PoFx llama a la rutina AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_PREPARE_DEVICE y el parámetro Data apunta a una estructura de PEP_ACPI_PREPARE_DEVICE que contiene el nombre del dispositivo. Si el PEP está preparado para proporcionar servicios ACPI para este dispositivo, el PEP establece el miembro DeviceAccepted de esta estructura en TRUE. Para rechazar la prestación de dichos servicios, el PEP establece este miembro en FALSE.

Si el PEP indica (estableciendo DeviceAccepted = TRUE) que está preparado para proporcionar servicios ACPI para el dispositivo, PoFx responderá enviando al PEP una notificación PEP_NOTIFY_ACPI_REGISTER_DEVICE para registrar el PEP para que sea el único proveedor de servicios ACPI para el dispositivo. PoFx espera que solo un PEP reclame el rol de proveedor de servicios ACPI para un dispositivo.

Como procedimiento recomendado, no realice ninguna inicialización de dispositivo en respuesta a la notificación de PEP_NOTIFY_ACPI_PREPARE_DEVICE. En su lugar, aplaza esta inicialización hasta que se reciba la notificación de PEP_NOTIFY_ACPI_REGISTER_DEVICE para el dispositivo o se invoque un método de control ACPI (por ejemplo, _INI) para el dispositivo.

Para una notificación de PEP_NOTIFY_ACPI_PREPARE_DEVICE, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ABANDON_DEVICE

Notificación: valor PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Datos: puntero a una estructura de PEP_ACPI_ABANDON_DEVICE que identifica el dispositivo abandonado.

Informa al PEP de que el dispositivo especificado se ha abandonado y ya no requiere servicios ACPI del PEP.

El marco de administración de energía de Windows (PoFx) envía esta notificación para informar al PEP de que el dispositivo ya no está en uso por el sistema operativo. El PEP puede usar esta notificación para limpiar cualquier almacenamiento interno que haya asignado para realizar un seguimiento del estado del dispositivo.

Para enviar una notificación PEP_NOTIFY_ACPI_ABANDON_DEVICE, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_ABANDON_DEVICE y el parámetro Data apunta a una estructura de PEP_ACPI_ABANDON_DEVICE.

PoFx envía esta notificación solo a un PEP que ha optado por proporcionar servicios ACPI para el dispositivo en una notificación de PEP_NOTIFY_ACPI_PREPARE_DEVICE anterior. Si el PEP se ha registrado para proporcionar estos servicios en una notificación anterior de PEP_NOTIFY_ACPI_REGISTER_DEVICE, PoFx enviará una notificación PEP_NOTIFY_ACPI_UNREGISTER_DEVICE para el dispositivo antes de enviar la notificación de PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Para una notificación de PEP_NOTIFY_ACPI_ABANDON_DEVICE, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_REGISTER_DEVICE

Notificación: valor PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Datos: puntero a una estructura de PEP_ACPI_REGISTER_DEVICE que identifica el dispositivo. En respuesta a esta notificación, se espera que el PEP cree un valor PEPHANDLE válido para identificar el dispositivo y escribir este valor de identificador en la estructura.

Registra el PEP para que sea el único proveedor de servicios ACPI para el dispositivo especificado.

El marco de administración de energía de Windows (PoFx) envía esta notificación a un PEP que ha indicado (en una notificación anterior de PEP_NOTIFY_ACPI_PREPARE_DEVICE) que está preparado para proporcionar servicios ACPI para el dispositivo especificado.

Para enviar una notificación de PEP_NOTIFY_ACPI_REGISTER_DEVICE, PoFx llama a la rutina AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_REGISTER_DEVICE y el parámetro Data apunta a una estructura PEP_ACPI_REGISTER_DEVICE que identifica el dispositivo para el que el PEP va a proporcionar servicios ACPI.

Para una notificación de PEP_NOTIFY_ACPI_REGISTER_DEVICE, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE

Notificación: valor PEP_NOTIFY_ACPI_UNREGISTER_DEVICE.

Datos: puntero a una estructura de PEP_ACPI_UNREGISTER_DEVICE que contiene el PEPHANDLE para el dispositivo.

Cancela el registro del dispositivo especificado para los servicios ACPI del PEP.

En respuesta a esta notificación, el PEP puede destruir el PEPHANDLE que el PEP creado para este dispositivo en una notificación de PEP_NOTIFY_ACPI_REGISTER_DEVICE anterior.

Para enviar una notificación de PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_UNREGISTER_DEVICE y el parámetro Data apunta a una estructura de PEP_ACPI_UNREGISTER_DEVICE.

Para una notificación de PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE

Notificación: valor PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Datos: puntero a una estructura de PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE que contiene una enumeración de los objetos en el espacio de nombres ACPI del dispositivo.

Consulta el PEP para obtener la lista de objetos ACPI (métodos nativos) admitidos por el PEP en el dispositivo especificado en el espacio de nombres ACPI.

El controlador ACPI de Windows usa los objetos enumerados por esta notificación para compilar el espacio de nombres para el dispositivo especificado. A partir de entonces, al hacer referencia a este dispositivo, el controlador ACPI consultará el PEP solo para estos objetos.

El marco de administración de energía de Windows (PoFx) envía la notificación PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE poco después de que se detecte un dispositivo y los registros PEP proporcionen servicios ACPI para el dispositivo. Para obtener más información sobre este registro, consulte PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Para enviar una notificación de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE y el parámetro Data apunta a una estructura PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Se espera que la rutina AcceptAcpiNotification controle una notificación de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE y devuelva TRUE. Si no lo hace, se produce una comprobación de errores.

Para una notificación de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION

Notificación: valor PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION.

Datos: puntero a una estructura PEP_ACPI_QUERY_OBJECT_INFORMATION que especifica los atributos del objeto ACPI.

Consulta el PEP para obtener información sobre un objeto ACPI enumerado anteriormente.

El marco de administración de energía de Windows (PoFx) envía esta notificación para consultar el PEP de los atributos de un objeto enumerado durante el control de una notificación de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE anterior. Actualmente, los únicos objetos enumerados son métodos de control.

Para enviar una notificación de PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION y el parámetro Data apunta a una estructura PEP_ACPI_QUERY_OBJECT_INFORMATION.

Para una notificación de PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD

Notificación: valor PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD.

Datos: puntero a una estructura de PEP_ACPI_EVALUATE_CONTROL_METHOD que especifica un método de control ACPI que se va a evaluar, un argumento de entrada que se va a proporcionar a este método y un búfer de salida para el resultado.

Se usa para evaluar un método de control ACPI para el que el PEP es el controlador registrado.

El marco de administración de energía de Windows (PoFx) envía esta notificación al PEP cuando el controlador ACPI de Windows necesita evaluar un método de control ACPI implementado por el PEP.

Para enviar una notificación de PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD y el parámetro Data apunta a una estructura de PEP_ACPI_EVALUATE_CONTROL_METHOD.

El diseñador de plataformas puede elegir si desea que el FIRMWARE PEP o ACPI controle un método de control ACPI determinado. Si el PEP es el controlador registrado para un método de control ACPI, PoFx responde a una solicitud del controlador ACPI de Windows para evaluar este método enviando una notificación PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD al PEP.

A continuación se muestra una lista de ejemplos de métodos de control ACPI que el PEP puede controlar para un dispositivo:

Identificación y configuración del dispositivo: _HID, _CID, _UID, _ADR, _CLS, _SUB, _CRS, _PRS, etc. Administración y reactivación de energía del dispositivo: _PS0 a través de _PS3, _PR0 a través de _PR3, _DSW, etc. Métodos específicos del dispositivo: _DSM y cualquier método de control específico de la pila de dispositivos. Para un dispositivo especial, como una hora ACPI y un dispositivo de alarma, esta notificación se usa para evaluar el tiempo y los métodos de alarma (_GCP, _GRT, _SRT, etc.).

Para una notificación de PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES

Notificación: valor PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Datos: puntero a una estructura de PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES que contiene la lista de recursos de energía.

Consulta el PEP para obtener la lista de recursos sin procesar necesarios para controlar la alimentación en el dispositivo.

En respuesta a esta notificación, el PEP proporciona la lista de recursos sin procesar necesarios para controlar la alimentación del dispositivo. El controlador ACPI de Windows requiere esta lista para que pueda reservar los recursos de energía requeridos por el dispositivo y proporcionar la lista correspondiente de recursos traducidos al PEP (enviando una notificación de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES). Para obtener más información, vea Recursos sin procesar y traducidos.

Para enviar una notificación de PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, The Windows Power Management Framework (PoFx) llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES y el parámetro Data apunta a una estructura PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Para una notificación de PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

Notificación: valor PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Datos: puntero a una estructura de PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES que contiene la lista de recursos traducidos.

Proporciona al PEP una lista de recursos traducidos para los recursos de control de energía necesarios para el dispositivo.

El marco de administración de energía de Windows (PoFx) envía esta notificación si el PEP enumera los recursos sin procesar en respuesta a la notificación anterior PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES. La notificación de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES proporciona al PEP la lista correspondiente de recursos traducidos. Para obtener más información, vea Recursos sin procesar y traducidos.

Para enviar una notificación de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, PoFx llama a la rutina de devolución de llamada AcceptAcpiNotification del PEP. En esta llamada, el valor del parámetro Notification se PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES y el parámetro Data apunta a una estructura PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Para una notificación de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_WORK

Notificación: valor PEP_NOTIFY_ACPI_WORK.

Datos: puntero a una estructura de PEP_WORK.

Se envía al PEP una vez cada vez que el PEP llama a la rutina RequestWorker para solicitar un elemento de trabajo desde el marco de administración de energía de Windows (PoFx). Esta notificación se usa para el trabajo de solo ACPI.

Una vez que el PEP llama a la rutina RequestWorker para solicitar un elemento de trabajo, PoFx responde enviando al PEP una notificación de PEP_NOTIFY_ACPI_WORK. Sin embargo, esta notificación no se envía hasta que los recursos (es decir, el subproceso de trabajo) necesarios para procesar el elemento de trabajo están disponibles. De este modo, PoFx garantiza que la solicitud de trabajo que el PEP pasa a PoFx durante la notificación nunca puede producir un error debido a la falta de recursos.

En la entrada, el PEP debe suponer que la estructura PEP_WORK no está inicializada. Para controlar esta notificación, el PEP debe establecer el miembro WorkInformation para que apunte a una estructura de PEP_WORK_INFORMATION asignada por PEP que describa el trabajo que se solicita. Además, el PEP debe establecer el miembro NeedWork de la estructura de PEP_WORK en TRUE para confirmar que el PEP ha controlado la notificación de PEP_NOTIFY_ACPI_WORK y que el miembro WorkInformation apunta a una estructura de PEP_WORK_INFORMATION válida. Si el PEP no controla la notificación o no puede asignar la estructura de PEP_WORK_INFORMATION, el PEP debe establecer el miembro WorkInformation en NULL y establecer el miembro NeedWork en FALSE.

Para una notificación de PEP_NOTIFY_ACPI_WORK, siempre se llama a la rutina AcceptAcpiNotification en IRQL = PASSIVE_LEVEL.