Compartilhar via


Notificações de ACPI

Cada notificação de ACPI que a rotina de retorno de chamada AcceptAcpiNotification do PEP recebe é acompanhada por um parâmetro de Notificação, que indica o tipo de notificação, e um parâmetro de Dados, que aponta para uma estrutura de dados que contém as informações para o tipo especificado de notificação.

Nessa chamada, o parâmetro Notificação é definido como um valor constante PEP_NOTIFY_ACPI_XXX que indica o tipo de notificação. O parâmetro Data aponta para um tipo de estrutura PEP_ACPI_XXX associado a esse tipo de notificação.

As seguintes IDs de notificação de ACPI são usados pela função de callback AcceptAcpiNotification.

ID de notificação Valor Estrutura associada
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

Notificação: o valor PEP_NOTIFY_ACPI_PREPARE_DEVICE. Dados: um ponteiro para uma estrutura de PEP_ACPI_PREPARE_DEVICE que identifica o dispositivo pelo nome.

Permite que o PEP escolha se deseja fornecer serviços ACPI para um dispositivo.

A PoFx (estrutura de gerenciamento de energia do Windows) envia essa notificação quando o driver ACPI do Windows descobre um novo dispositivo no namespace ACPI durante a enumeração do dispositivo. Essa notificação é enviada aos PEPs que implementam rotinas de retorno de chamada AcceptAcpiNotification.

Para enviar uma notificação PEP_NOTIFY_ACPI_PREPARE_DEVICE, o PoFx chama a rotina AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_PREPARE_DEVICE e o parâmetro Data aponta para uma estrutura PEP_ACPI_PREPARE_DEVICE que contém o nome do dispositivo. Se o PEP estiver preparado para fornecer serviços ACPI para esse dispositivo, o PEP definirá o membro DeviceAccepted dessa estrutura como TRUE. Para recusar a prestação desses serviços, o PEP define esse membro como FALSE.

Se o PEP indicar (definindo DeviceAccepted = TRUE) que ele está preparado para fornecer serviços ACPI para o dispositivo, a PoFx responderá enviando ao PEP uma notificação PEP_NOTIFY_ACPI_REGISTER_DEVICE para registrar o PEP como o único provedor de serviços ACPI para o dispositivo. A PoFx espera que apenas um PEP reivindice a função de provedor de serviços ACPI para um dispositivo.

Como prática recomendada, não execute nenhuma inicialização de dispositivo em resposta à notificação de PEP_NOTIFY_ACPI_PREPARE_DEVICE. Em vez disso, adie essa inicialização até que a notificação PEP_NOTIFY_ACPI_REGISTER_DEVICE para o dispositivo seja recebida ou um método de controle ACPI (por exemplo, _INI) seja invocado para o dispositivo.

Para uma notificação PEP_NOTIFY_ACPI_PREPARE_DEVICE, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ABANDON_DEVICE

Notificação: o valor PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Dados: um ponteiro para uma estrutura de PEP_ACPI_ABANDON_DEVICE que identifica o dispositivo abandonado.

Informa ao PEP que o dispositivo especificado foi abandonado e não requer mais serviços de ACPI do PEP.

A PoFx (estrutura de gerenciamento de energia do Windows) envia essa notificação para informar ao PEP que o dispositivo não está mais em uso pelo sistema operacional. O PEP pode usar essa notificação para limpar qualquer armazenamento interno alocado para acompanhar o estado do dispositivo.

Para enviar uma notificação de PEP_NOTIFY_ACPI_ABANDON_DEVICE, o PoFx chama a função de callback AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_ABANDON_DEVICE e o parâmetro Data aponta para uma estrutura de PEP_ACPI_ABANDON_DEVICE.

A PoFx envia essa notificação apenas para um PEP que optou por fornecer serviços ACPI para o dispositivo em uma notificação de PEP_NOTIFY_ACPI_PREPARE_DEVICE anterior. Se o PEP tiver se registrado para fornecer esses serviços anteriormente em uma notificação PEP_NOTIFY_ACPI_REGISTER_DEVICE, a PoFx enviará uma notificação PEP_NOTIFY_ACPI_UNREGISTER_DEVICE para o dispositivo antes de enviar a notificação PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Para uma notificação PEP_NOTIFY_ACPI_ABANDON_DEVICE, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_REGISTER_DEVICE

Notificação: o valor PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Dados: um ponteiro para uma estrutura do tipo PEP_ACPI_REGISTER_DEVICE que serve para identificar o dispositivo. Em resposta a essa notificação, espera-se que o PEP crie um valor PEPHANDLE válido para identificar o dispositivo e escreva esse valor de handle na estrutura.

Registra o PEP como o único provedor de serviços ACPI do dispositivo especificado.

O framework de gerenciamento de energia do Windows (PoFx) envia essa notificação a um PEP que indicou, em uma notificação anterior de PEP_NOTIFY_ACPI_PREPARE_DEVICE, que está preparado para fornecer serviços ACPI para o dispositivo especificado.

Para enviar uma notificação PEP_NOTIFY_ACPI_REGISTER_DEVICE, o PoFx chama a rotina AcceptAcpiNotification do PEP. Nesta chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_REGISTER_DEVICE e o parâmetro Data aponta para uma estrutura de PEP_ACPI_REGISTER_DEVICE que identifica o dispositivo para o qual o PEP deve fornecer serviços ACPI.

Para uma notificação PEP_NOTIFY_ACPI_REGISTER_DEVICE, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE

Notificação: o valor PEP_NOTIFY_ACPI_UNREGISTER_DEVICE.

Dados: um ponteiro para uma estrutura PEP_ACPI_UNREGISTER_DEVICE que contém o PEPHANDLE para o dispositivo.

Cancela o registro do dispositivo especificado para serviços ACPI na PEP.

Em resposta a essa notificação, o PEP pode destruir o PEPHANDLE que o PEP criou para esse dispositivo em uma notificação de PEP_NOTIFY_ACPI_REGISTER_DEVICE anterior.

Para enviar uma notificação PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, a PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_UNREGISTER_DEVICE e o parâmetro Data aponta para uma estrutura PEP_ACPI_UNREGISTER_DEVICE.

Para uma notificação PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE

Notificação: o valor PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Dados: um ponteiro para uma estrutura do tipo PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE que contém uma enumeração dos objetos no namespace ACPI do dispositivo.

Consulta o PEP para obter a lista de objetos ACPI (métodos nativos) com suporte pelo PEP no dispositivo especificado no namespace ACPI.

O driver ACPI do Windows usa os objetos enumerados por essa notificação para criar o namespace para o dispositivo especificado. Depois disso, ao se referir a esse dispositivo, o driver ACPI consultará o PEP somente para esses objetos.

O framework de gerenciamento de energia do Windows (PoFx) envia a notificação PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE logo após um dispositivo ser descoberto e o PEP se registrar para fornecer serviços ACPI para o dispositivo. Para obter mais informações sobre esse registro, consulte PEP_NOTIFY_ACPI_REGISTER_DEVICE.

Para enviar uma notificação PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, o PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE e o parâmetro Data aponta para uma estrutura PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE.

Espera-se que a rotina AcceptAcpiNotification lide com uma notificação PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE e retorne TRUE. A falha ao fazer isso causa uma verificação de bugs.

Para uma notificação PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION

Notificação: o valor PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION.

Dados: um ponteiro para uma estrutura PEP_ACPI_QUERY_OBJECT_INFORMATION que define os atributos do objeto ACPI.

Consulta o PEP para obter informações sobre um objeto ACPI enumerado anteriormente.

A estrutura de gerenciamento de energia do Windows (PoFx) envia essa notificação para consultar o PEP quanto aos atributos de um objeto que foi enumerado durante o tratamento de uma notificação anterior de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE. Atualmente, os únicos objetos que são enumerados são métodos de controle.

Para enviar uma notificação PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, o PoFx chama a rotina de callback AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION e o parâmetro Data aponta para uma estrutura PEP_ACPI_QUERY_OBJECT_INFORMATION.

Para uma notificação PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD

Notificação: o valor PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD.

Dados: um ponteiro para uma estrutura de PEP_ACPI_EVALUATE_CONTROL_METHOD que especifica um método de controle ACPI a ser avaliado, um argumento de entrada para fornecer a esse método e um buffer de saída para o resultado.

É usado para avaliar um método de controle ACPI para o qual o PEP é o manipulador registrado.

A PoFx (Estrutura de Gerenciamento de Energia do Windows) envia essa notificação para o PEP quando o driver ACPI do Windows precisa avaliar um método de controle ACPI implementado pelo PEP.

Para enviar uma notificação PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, PoFx chama a função de retorno AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD e o parâmetro Data aponta para uma estrutura PEP_ACPI_EVALUATE_CONTROL_METHOD.

O designer de plataforma pode escolher se deseja que o PEP ou o firmware ACPI manipule um método de controle ACPI específico. Se o PEP for o manipulador registrado para um método de controle ACPI, PoFx responderá a uma solicitação do driver ACPI do Windows para avaliar esse método enviando uma notificação de PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD ao PEP.

Veja a seguir uma lista de exemplos de métodos de controle ACPI que o PEP pode manipular para um dispositivo:

Identificação e configuração do dispositivo: _HID, _CID, _UID, _ADR, _CLS, _SUB, _CRS, _PRS e assim por diante. Gerenciamento e ativação de energia do dispositivo: _PS0 até _PS3, _PR0 até _PR3, _DSW e assim por diante. Métodos específicos do dispositivo: _DSM e quaisquer métodos de controle específicos da pilha de dispositivos. Para um dispositivo especial, como um dispositivo de Tempo e Alarme ACPI, essa notificação é usada para avaliar métodos de tempo e alarme (_GCP, _GRT, _SRT e assim por diante).

Para uma notificação PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES

Notificação: o valor PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Dados: um ponteiro para uma estrutura PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES que contém a lista de recursos de energia.

Consulta o PEP para obter a lista de recursos brutos necessários para controlar a energia do dispositivo.

Em resposta a essa notificação, o PEP fornece a lista de recursos brutos necessários para controlar a energia do dispositivo. O driver ACPI do Windows requer essa lista para que ele possa reservar os recursos de energia necessários pelo dispositivo e fornecer a lista correspondente de recursos traduzidos para o PEP, realizando o envio de uma notificação PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES. Para obter mais informações, consulte Recursos Brutos e Traduzidos.

Para enviar uma notificação PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, a estrutura de gerenciamento de energia do Windows (PoFx) chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES e o parâmetro Data aponta para uma estrutura PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES.

Para uma notificação PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

Notificação: o valor PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Dados: um ponteiro para uma estrutura PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES que contém a lista de recursos traduzidos.

Fornece ao PEP uma lista de recursos traduzidos para todos os recursos de controle de energia necessários para o dispositivo.

O PoFx (estrutura de gerenciamento de energia do Windows) envia essa notificação se o PEP tiver listado quaisquer recursos brutos em resposta à notificação anterior de PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES. A notificação PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES fornece ao PEP a lista correspondente de recursos traduzidos. Para obter mais informações, consulte Recursos Brutos e Traduzidos.

Para enviar uma notificação PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, o PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro de notificação é PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES e o parâmetro Data aponta para uma estrutura PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES.

Para uma notificação PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.

PEP_NOTIFY_ACPI_WORK

Notificação: o valor PEP_NOTIFY_ACPI_WORK.

Dados: um ponteiro para uma estrutura PEP_WORK.

Enviado ao PEP uma vez cada vez que o PEP chama a rotina RequestWorker para solicitar um item de trabalho da PoFx (estrutura de gerenciamento de energia do Windows). Esta notificação é usada exclusivamente para trabalhos relacionados ao ACPI.

Depois que o PEP chama a rotina RequestWorker para solicitar um item de trabalho, a PoFx responde enviando ao PEP uma notificação PEP_NOTIFY_ACPI_WORK. No entanto, essa notificação não será enviada até que os recursos (ou seja, o thread de trabalho) necessários para processar o item de trabalho estejam disponíveis. Dessa forma, a PoFx garante que a solicitação de trabalho que o PEP passa para PoFx durante a notificação nunca poderá falhar devido à falta de recursos.

Na entrada, o PEP deve assumir que a estrutura de PEP_WORK não está inicializada. Para lidar com essa notificação, o PEP deve definir o membro WorkInformation para apontar para uma estrutura PEP_WORK_INFORMATION, previamente alocada por ele, que descreve o trabalho solicitado. Além disso, o PEP deve configurar o membro NeedWork da estrutura PEP_WORK como TRUE para confirmar que o PEP processou a notificação PEP_NOTIFY_ACPI_WORK e que o membro WorkInformation aponta para uma estrutura PEP_WORK_INFORMATION válida. Se o PEP falhar ao lidar com a notificação ou não conseguir alocar a estrutura de PEP_WORK_INFORMATION, o PEP deverá definir o membro WorkInformation como NULL e definir o membro NeedWork como FALSE.

Para uma notificação PEP_NOTIFY_ACPI_WORK, a rotina AcceptAcpiNotification é sempre chamada em IRQL = PASSIVE_LEVEL.