Como funciona
O firmware descreve com tabelas ACPI os dispositivos que o sistema operacional não consegue descobrir sozinho, como a bateria, os botões, os sensores, os controladores I²C ou o TPM. Cada um leva um identificador de hardware (_HID) formado por um prefixo de fabricante e quatro dígitos hexadecimais escolhidos por esse fabricante.
Os prefixos são atribuídos pelo UEFI Forum em dois registros: o de PNP IDs, de três letras, e o de ACPI IDs, de quatro caracteres. Esta ferramenta pesquisa o prefixo nos dois registros e, para os identificadores padrão definidos pela Microsoft e pela especificação ACPI, também informa qual dispositivo é.
Exemplos
ACPI\PNP0A08Microsoft — PCI Express Root BridgeFormato do Gerenciador de Dispositivos do Windows. Os PNP0xxx são identificadores genéricos que qualquer fabricante pode usar.ACPI\VEN_INT&DEV_33A1Intel Corporation — Intel Power Engine Plug-in (Modern Standby)Forma VEN_/DEV_ que o Windows usa nos IDs de hardware. A Intel usa o prefixo INT desde antes de existir o registro de ACPI IDs.Name (_HID, EisaId ("PNP0C0A"))PNP0C0A — Control Method Battery — EisaId 0x0A0CD041Linha de uma tabela DSDT desmontada. A ferramenta também aceita o inteiro compactado gerado pelo EisaId.10EC5640Realtek Semiconductor Co., Ltd.Alguns fabricantes usam como prefixo o vendor ID que a PCI-SIG lhes atribuiu; nesse caso, o fabricante vem do catálogo PCI.Casos de uso
- Identificar um dispositivo desconhecido do Gerenciador de Dispositivos cujo ID de hardware começa com ACPI\.
- Encontrar o driver correto para sensores, botões ou controladores I²C de um notebook a partir do seu _HID.
- Interpretar os dispositivos declarados em uma tabela DSDT ou SSDT ao depurar o firmware ou escrever um patch ACPI.
- Saber a qual empresa corresponde o código de fabricante de três letras que um monitor informa em seu EDID.
Perguntas frequentes
Onde encontro o identificador ACPI de um dispositivo?
No Windows, nas propriedades do dispositivo no Gerenciador de Dispositivos, guia Detalhes, propriedade "IDs de hardware". No Linux, cada dispositivo aparece como uma pasta em /sys/bus/acpi/devices com seu identificador no nome, e o arquivo hid dessa pasta o contém. Nas tabelas do firmware, desmontadas com acpidump e iasl, é o objeto _HID de cada dispositivo.
Por que encontra o fabricante, mas não o dispositivo?
Os registros do UEFI Forum atribuem apenas o prefixo. O significado dos quatro dígitos seguintes é decidido por cada fabricante e não existe um catálogo público como o de PCI ou USB. O dispositivo só é conhecido nos identificadores padrão, como os PNP0xxx da Microsoft ou os ACPI00xx da especificação, e em alguns muito difundidos.
Qual é a diferença entre um PNP ID e um ACPI ID?
O PNP ID tem um prefixo de três letras e vem do Plug and Play dos anos noventa; os mesmos códigos identificam o fabricante de um monitor no EDID. O ACPI ID tem um prefixo de quatro letras ou dígitos e é o formato atual. Ambos têm quatro dígitos hexadecimais depois do prefixo.
O que é o EisaId compactado?
Na linguagem ASL, a macro EisaId converte um PNP ID em um inteiro de 32 bits: cada letra ocupa cinco bits e o número do produto, os dois bytes seguintes. Por isso, ao desmontar uma tabela, às vezes aparece um número como 0x0A0CD041 em vez de PNP0C0A. A ferramenta aceita esse número e mostra a forma compactada de qualquer PNP ID.
Com que frequência os dados são atualizados?
A ferramenta usa uma cópia dos registros de ACPI IDs e de PNP IDs publicados pelo UEFI Forum e a renova periodicamente. Junto ao resultado são exibidas a data dessa cópia e a data em que o prefixo foi aprovado.