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.