domingo, 12 de mayo de 2013

Reparando la tabla DSDT (Asus K53SV)


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.
Y esos fueron los fallos con los que tuve que enfrentarme yo. Pongo unos enlaces de webs que me fueron de utilidad y al final de todo parte de la salida de compilar el dsdt sin arreglar.

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)