DSDT: solucionar aviso en método _WAK

miliuco

Activo
DSDT: solucionar aviso en método _WAK

Cuando genero el archivo dsdst.aml en el hardware de la firma suelo obtener este aviso (warning):
./dsdt_fixed.txt 222: Method (\_WAK, 1, NotSerialized)
Warning 1080 - ^ Reserved method must return a value (_WAK)

ASL Input: ./dsdt_fixed.txt - 5553 lines, 185901 bytes, 2321 keywords
AML Output: ././dsdt.aml - 17902 bytes, 658 named objects, 1663 executable opcodes

Compilation complete. 0 Errors, 1 Warnings, 0 Remarks, 638 Optimizations
El motivo radica efectivamente en el método _WAK que aparece así (para verlo hay que descompilar el archivo dsdt.aml con la herramienta iasl y la opción -d obteniendo un archivo dsdt.dsl que es de tipo texto):
Method (_WAK, 1, NotSerialized)
{
Store (0xFF, DBG1)
If (LEqual (Arg0, 0x03))
{
Store (0x8F, SCP)
}

If (LEqual (Arg0, 0x04))
{
If (LEqual (OSFL, Zero))
{
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
Else
{
Store (0x58, SMIP)
}
}

If (LEqual (OSFL, One))
{
Store (0x56, SMIP)
}

If (LEqual (OSFL, 0x02))
{
Store (0x57, SMIP)
}

If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
}

If (LEqual (Arg0, One)) {}
If (OSFL)
{
Notify (\_SB.PWRB, 0x02)
}
Else
{
If (LEqual (RTCW, Zero))
{
Notify (\_SB.PWRB, 0x02)
}
}

Notify (\_SB.PCI0.USB0, Zero)
Notify (\_SB.PCI0.USB1, Zero)
Notify (\_SB.PCI0.USB2, Zero)
Notify (\_SB.PCI0.USB3, Zero)
Notify (\_SB.PCI0.USB4, Zero)
Notify (\_SB.PCI0.USB5, Zero)
}
Si añado al final del método (antes del último paréntesis de cierre) este texto:
Return (Package (0x02)
{
Zero,
Zero
})
dejando el método _WAK completo así:
Method (_WAK, 1, NotSerialized)
{
Store (0xFF, DBG1)
If (LEqual (Arg0, 0x03))
{
Store (0x8F, SCP)
}

If (LEqual (Arg0, 0x04))
{
If (LEqual (OSFL, Zero))
{
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
Else
{
Store (0x58, SMIP)
}
}

If (LEqual (OSFL, One))
{
Store (0x56, SMIP)
}

If (LEqual (OSFL, 0x02))
{
Store (0x57, SMIP)
}

If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
}

If (LEqual (Arg0, One)) {}
If (OSFL)
{
Notify (\_SB.PWRB, 0x02)
}
Else
{
If (LEqual (RTCW, Zero))
{
Notify (\_SB.PWRB, 0x02)
}
}

Notify (\_SB.PCI0.USB0, Zero)
Notify (\_SB.PCI0.USB1, Zero)
Notify (\_SB.PCI0.USB2, Zero)
Notify (\_SB.PCI0.USB3, Zero)
Notify (\_SB.PCI0.USB4, Zero)
Notify (\_SB.PCI0.USB5, Zero)
Return (Package (0x02)
{
Zero,
Zero
})
}
al compilar de nuevo el archivo dsdt.dsl con la herramienta iasl sin opciones se obtiene un archivo dsdt.aml sin avisos del compilador:
iasl dsdt.dsl

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20080926 [Oct 4 2008]
Copyright (C) 2000 - 2008 Intel Corporation
Supports ACPI Specification Revision 3.0a

ASL Input: dsdt.dsl - 5561 lines, 185038 bytes, 2322 keywords
AML Output: dsdt.aml - 17908 bytes, 658 named objects, 1664 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 31 Optimizations
Esto es una parte de lo aprendido con las guías DSDT de Roisoft y Pere (gracias) y otros textos sobre DSDT.

NOTAS: en mi hardware hay que tener en cuenta 2 cosas que parecen lograr que el parcheo DSDT funcione mejor:

1. al crear el dsdt.aml con el parcheador de Fassl hay que emplear el modificador newHPET:
sudo ./DSDTPatcher -newHPET

2. da mejor resultado elegir la opción 2 (Vista) cuando pregunta qué tipo de OSI elegir.
 
Arriba