Notificações de ACPI

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

Nessa chamada, o parâmetro Notification é 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 usadas pela rotina de retorno de chamada 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 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, a PoFx chama a rotina AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é 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 está preparado para fornecer serviços ACPI para o dispositivo, a PoFx responderá enviando ao PEP uma notificação de 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 exiba a função do 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 de 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 de 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 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 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 limpo qualquer armazenamento interno alocado para acompanhar o estado do dispositivo.

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

A PoFx envia essa notificação somente 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 em uma notificação de PEP_NOTIFY_ACPI_REGISTER_DEVICE anterior, a PoFx enviará uma notificação de PEP_NOTIFY_ACPI_UNREGISTER_DEVICE para o dispositivo antes de enviar a notificação de PEP_NOTIFY_ACPI_ABANDON_DEVICE.

Para uma notificação de 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 PEP_ACPI_REGISTER_DEVICE que identifica o dispositivo. Em resposta a essa notificação, espera-se que o PEP crie um valor PEPHANDLE válido para identificar o dispositivo e gravar esse valor de identificador na estrutura.

Registra o PEP para ser o único provedor de serviços ACPI para o dispositivo especificado.

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

Para enviar uma notificação de PEP_NOTIFY_ACPI_REGISTER_DEVICE, a PoFx chama a rotina AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é PEP_NOTIFY_ACPI_REGISTER_DEVICE e o parâmetro Data aponta para uma estrutura 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 do 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 de PEP_NOTIFY_ACPI_UNREGISTER_DEVICE, a PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é PEP_NOTIFY_ACPI_UNREGISTER_DEVICE e o parâmetro Data aponta para uma estrutura PEP_ACPI_UNREGISTER_DEVICE.

Para uma notificação de 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 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) compatíveis com o 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.

A PoFx (estrutura de gerenciamento de energia) do Windows envia a notificação de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE logo após a descoberta de um dispositivo e os registros PEP 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 de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE, a PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é 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 manipule uma notificação de PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE e retorne TRUE. Não fazer isso causa um bug marcar.

Para uma notificação de 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 especifica os atributos do objeto ACPI.

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

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

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

Para uma notificação de 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 PEP_ACPI_EVALUATE_CONTROL_METHOD que especifica um método de controle ACPI a ser avaliado, um argumento de entrada a ser fornecido 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, a PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é 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 optar por ter o PEP ou o firmware ACPI para lidar com 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 para o 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 por meio de _PS3, _PR0 por meio de _PR3, _DSW e assim por diante. Métodos específicos do dispositivo: _DSM e quaisquer métodos de controle específicos da pilha do dispositivo. Para um dispositivo especial, como um dispositivo ACPI Time e Alarm, 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 exigidos pelo dispositivo e fornecer a lista correspondente de recursos traduzidos para o PEP (enviando uma notificação de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES). Para obter mais informações, consulte Recursos brutos e traduzidos.

Para enviar uma notificação de PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES, a PoFx (estrutura de gerenciamento de energia) do Windows chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é 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.

A PoFx (estrutura de gerenciamento de energia) do Windows enviará essa notificação se o PEP listar recursos brutos em resposta à notificação de PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES anterior. 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 de PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES, a PoFx chama a rotina de retorno de chamada AcceptAcpiNotification do PEP. Nessa chamada, o valor do parâmetro Notification é 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 de 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. Essa notificação é usada para o trabalho somente ACPI.

Depois que o PEP chama a rotina RequestWorker para solicitar um item de trabalho, o PoFx responde enviando ao PEP uma notificação de PEP_NOTIFY_ACPI_WORK. No entanto, essa notificação não é 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 de PEP_WORK_INFORMATION alocada por PEP que descreva o trabalho que está sendo solicitado. Além disso, o PEP deve definir o membro NeedWork da estrutura PEP_WORK como TRUE para confirmar que o PEP lidou com a notificação de PEP_NOTIFY_ACPI_WORK e que o membro WorkInformation aponta para uma estrutura de PEP_WORK_INFORMATION válida. Se o PEP não conseguir lidar com a notificação ou não conseguir alocar a estrutura PEP_WORK_INFORMATION, o PEP deverá definir o membro WorkInformation como NULL e definir o membro NeedWork como FALSE.

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