Cómo funciona
El firmware describe con tablas ACPI los dispositivos que el sistema operativo no puede descubrir por sí mismo, como la batería, los botones, los sensores, los controladores I²C o el TPM. Cada uno lleva un identificador de hardware (_HID) formado por un prefijo de fabricante y cuatro dígitos hexadecimales que elige ese fabricante.
Los prefijos los asigna el UEFI Forum en dos registros: el de PNP IDs, de tres letras, y el de ACPI IDs, de cuatro caracteres. Esta herramienta busca el prefijo en ambos registros y, para los identificadores estándar que definen Microsoft y la especificación ACPI, también te dice qué dispositivo es.
Ejemplos
ACPI\PNP0A08Microsoft — PCI Express Root BridgeFormato del Administrador de dispositivos de Windows. Los PNP0xxx son identificadores genéricos que puede usar cualquier fabricante.ACPI\VEN_INT&DEV_33A1Intel Corporation — Intel Power Engine Plug-in (Modern Standby)Forma VEN_/DEV_ que Windows usa en los identificadores de hardware. Intel usa el prefijo INT desde antes de que existiera el registro de ACPI IDs.Name (_HID, EisaId ("PNP0C0A"))PNP0C0A — Control Method Battery — EisaId 0x0A0CD041Línea de una tabla DSDT desensamblada. La herramienta también acepta el entero comprimido que genera EisaId.10EC5640Realtek Semiconductor Co., Ltd.Algunos fabricantes usan como prefijo el vendor ID que les asignó PCI-SIG; en ese caso el fabricante sale del catálogo de PCI.Casos de uso
- Identificar un dispositivo desconocido del Administrador de dispositivos cuyo identificador de hardware empieza con ACPI\.
- Buscar el controlador correcto para sensores, botones o controladores I²C de una notebook a partir de su _HID.
- Interpretar los dispositivos declarados en una tabla DSDT o SSDT al depurar el firmware o escribir un parche ACPI.
- Saber qué empresa corresponde al código de fabricante de tres letras que informa un monitor en su EDID.
Preguntas frecuentes
¿Dónde encuentro el identificador ACPI de un dispositivo?
En Windows, en las propiedades del dispositivo dentro del Administrador de dispositivos, pestaña Detalles, propiedad "Id. de hardware". En Linux, cada dispositivo aparece como una carpeta de /sys/bus/acpi/devices con su identificador en el nombre, y el archivo hid de esa carpeta lo contiene. En las tablas del firmware, desensambladas con acpidump e iasl, es el objeto _HID de cada dispositivo.
¿Por qué encuentra el fabricante pero no el dispositivo?
Los registros del UEFI Forum solo asignan el prefijo. Qué significan los cuatro dígitos que siguen lo decide cada fabricante y no existe un catálogo público como el de PCI o USB. Solo se conoce el dispositivo en los identificadores estándar, como los PNP0xxx de Microsoft o los ACPI00xx de la especificación, y en algunos muy difundidos.
¿Qué diferencia hay entre un PNP ID y un ACPI ID?
El PNP ID tiene un prefijo de tres letras y viene del Plug and Play de los años noventa; los mismos códigos identifican al fabricante de un monitor en el EDID. El ACPI ID tiene un prefijo de cuatro letras o dígitos y es el formato actual. Los dos llevan cuatro dígitos hexadecimales después del prefijo.
¿Qué es el EisaId comprimido?
En el lenguaje ASL, la macro EisaId convierte un PNP ID en un entero de 32 bits: cada letra ocupa cinco bits y el número de producto, los dos bytes siguientes. Por eso al desensamblar una tabla a veces aparece un número como 0x0A0CD041 en lugar de PNP0C0A. La herramienta acepta ese número y muestra la forma comprimida de cualquier PNP ID.
¿Con qué frecuencia se actualizan los datos?
La herramienta usa una copia de los registros de ACPI IDs y de PNP IDs que publica el UEFI Forum y la renueva periódicamente. Junto al resultado se muestra la fecha de esa copia y la fecha en que se aprobó el prefijo.