DSDT (Differentiated System Description Table) es parte de la especificación ACPI, y más o menos explicándolo de forma sencilla es una tabla donde se indican los diversos eventos relacionados con la gestión de energía que soporta un equipo. Las tablas DSDT suelen venir preparadas para windows, con lo cual en otros sistemas como linux pueden fallar los ventiladores, o la pantalla no apagarse al cerrar la tapa, etc. Esto es al menos lo que dice en la wiki de arch linux, habrá que fiarse.
En mi caso me gusta optimizar mi SO al límite, así que decidí reparar la tabla DSDT a ver si mejoraba algo, aunque para ser sinceros no noté nada a parte de que el portátil no encendía con el brillo al máximo, de agradecer, y me entretuve un ratillo aprendiendo algo nuevo. A otra gente le supone una mejora mayor y si quieres instalar un Hackintosh en tu PC necesitas tener la tabla reparada antes de nada.
Para rehacer una tabla funcional, en Linux tenéis que hacer como root:
cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
Esto os dará la tabla en uso actualmente. La descompilamos con:
iasl -d dsdt.dat
Y la compilamos otra vez con:
iasl -tc dsdt.dsl
Y aquí es donde saltarán todos los errores. A partir de este punto es donde tenemos que matarnos un poquillo a solucionar los fallos que están dando. Os comento los que me dieron a mí y cómo solucionarlos:
- Non-hex letters must be upper case. Pues eso, las letras que no sean hexadecimales ponedlas con mayúsculas. Con unos cuantos buscar y reemplazar se soluciona.
- Use of compiler reserved name (_T_0). Fácil, cambiamos _T_0 a T_0.
- Not all control paths return a value. Se coloca un Return (Zero) al final de esa función.
- Reserved method should not return a value. Pues eso, que no debería devolver un valor así que borramos el return.
- Found buffer, requires package. Empaquetamos el buffer. Cambiamos por ejemplo Buffer(0x10) por Package(0x10). Fácil y sencillo.
http://cannibalcandy.wordpress.com/2011/02/18/dsdt-editing-put-an-end-to-your-acpi-woes/
http://sadevil.org/blog/2012/01/01/fixing-the-acpi-dsdt-of-an-acer-ferrari-one-200/
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20121018-64 [Oct 26 2012]
Copyright (c) 2000 - 2012 Intel Corporation
dsdt.dsl 5090: Name (_HID, "pnp0c14")
Error 4133 - Non-hex letters must be upper case ^ (pnp0c14)
dsdt.dsl 5168: Name (_T_0, Zero)
Remark 5011 - Use of compiler reserved name ^ (_T_0)
dsdt.dsl 5761: Method (SPBL, 1, NotSerialized)
Warning 1114 - ^ Not all control paths return a value (SPBL)
dsdt.dsl 12509: Return (ATKR (Arg0))
Warning 1120 - ^ Called method may not always return a value
dsdt.dsl 12515: Method (ATKR, 1, NotSerialized)
Warning 1114 - ^ Not all control paths return a value (ATKR)
dsdt.dsl 13014: Return (One)
Warning 1104 - ^ Reserved method should not return a value (_Q0E)
dsdt.dsl 13077: Name (_T_0, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_0)
dsdt.dsl 13626: Name (_PLD, Buffer (0x10)
Error 4105 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
dsdt.dsl 14375: Method (MXDS, 1, NotSerialized)
Warning 1114 - ^ Not all control paths return a value (MXDS)
dsdt.dsl 14781: Name (_HID, "pnp0c14")
Error 4133 - ^ Non-hex letters must be upper case (pnp0c14)