4.1.06

DSDT Hacking

Nee, dat mam Opginn aus dem leschte Posting woar natirlech nëmmen e Witz ;-) Ëmmerhinn kann ee jo nach un der DSDT frëckelen. Dat hunn ech natirlech och misse versichen. Den HOWTO Fix Common ACPI Problems an de Linux ACPI Howto sinn dobäi ganz hëllefräich. Fir et kuerz ze man:
emerge iasl  # Intel Compiler installéiren
cat /proc/acpi/dsdt > dsdt.dat # DSDT ausliesen
iasl -d dsdt.dat # Disassembléiren
iasl -tc dsdt.dsl # Recompiléiren
An dat hei ass d’Resultat:
Intel ACPI Component Architecture
ASL Optimizing Compiler / AML Disassembler version 20050513 [Jan 4 2006]
Copyright (C) 2000 - 2005 Intel Corporation
Supports ACPI Specification Revision 3.0

dsdt.dsl 1820: Field (U1D3, WordAcc, NoLock, Preserve)
Error 1047 - ^ Access width is greater than region size

dsdt.dsl 1822: UR49, 3
Error 1051 - ^ Access width of Field Unit extends beyond region limit

dsdt.dsl 1826: Field (UBP1, WordAcc, NoLock, Preserve)
Error 1047 - ^ Access width is greater than region size

dsdt.dsl 1828: U1PE, 2
Error 1051 - ^ Access width of Field Unit extends beyond region limit

dsdt.dsl 1861: Field (UBP2, WordAcc, NoLock, Preserve)
Error 1047 - ^ Access width is greater than region size

dsdt.dsl 1863: U2PE, 2
Error 1051 - ^ Access width of Field Unit extends beyond region limit

dsdt.dsl 1889: Field (UBP3, WordAcc, NoLock, Preserve)
Error 1047 - ^ Access width is greater than region size

dsdt.dsl 1891: U3PE, 2
Error 1051 - ^ Access width of Field Unit extends beyond region limit

dsdt.dsl 1917: Field (UBP4, WordAcc, NoLock, Preserve)
Error 1047 - ^ Access width is greater than region size

dsdt.dsl 1919: U4PE, 2
Error 1051 - ^ Access width of Field Unit extends beyond region limit

dsdt.dsl 2803: Method (STM, 0, Serialized)
Warning 2019 - ^ Not all control paths return a value (STM_)

dsdt.dsl 3246: Method (_WAK, 1, NotSerialized)
Warning 2026 - ^ Reserved method must return a value (_WAK)

ASL Input: dsdt.dsl - 3362 lines, 100645 bytes, 1269 keywords
Compilation complete. 10 Errors, 2 Warnings, 0 Remarks, 420 Optimizations
Hëppla. Mee wéi ech séier festgestallt hunn, ënner anerem well ech d’Syntax an der ACPI 1.0b Spezifikatioun noschloen konnt, sinn déi meescht Feeler relativ einfach ze behiewen. Am Quellcode hunn ech déi folgend Zeilen:
OperationRegion (U1D3, PCI_Config, 0x49, 0x01)
Field (U1D3, WordAcc, NoLock, Preserve)
{
UR49, 3
}
Mat OperationRegion seet een op wéienge Bytes ee schaffe wëll, an dësem Fall um Block 0x49 bis 0x49+0x01. Do hu mer e Bit Field wou mer déi 3 éischt Bits UR49 nennen. Mee den Hoken ass dass ëmmer nëmme ganz Words gelies/geschriwwe ginn (WordAcc). Dowéinst muss een als Längt vun der Region 0x02 uginn (1 Word = 2 Byte), an net 0x01. Well de Standard seet nämlech:
For example, an access type of WordAcc cannot read the last byte of an odd-length operation region.
Super, sou wéi d’Leit vun MSI programméiert hunn däerf e konformen ACPI Interpreter d’Field UR49 weder liesen nach schreiwen!

Fir déi zweet Warnung (Zeil 3246) hunn ech einfach um Enn Return(Package(0x02){0x00,0x00}) agefügt. (Méi Detailer wat _WAK returne soll fënnt een an der ACPI-Dok.)

Endlech hat ech eng Datei déi ech problemlos kompiléire konnt (bis op déi éischt Warnung, mee ech mengen déi ass net sou wëll). Dono just nach an de Kernel akompiléiren a rebooten. Naja, direkt nom WakeUp huet en rem reboot. Et huet also alles näicht gedingt. Dat ass iwwregens och d’Resultat dat aner Leit haten, wéi dëse Thread op der LKML weist. An engem anere Thread ass och net vill méi eraus komm.

Interessant woar et trotzdem.

Labels: ,

0 Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]

<< Startseite