Small excerpt from it's DSDT (disassembled with official iasl):
Code: Select all
Device(PCI0)
{
Name(...)
Name(...)
Method(...)
....
}
...
If ((ECR1 == One))
// Encoded as: A0 40 07 93 45 43 52 31 01
// Which translates to: If PkgLen(0x70) LEqual "ECR1" 1
Also, what looks like a NameSeg in a NamePath in a NameString, where I was expecting a TermArg.
From the ACPI specification 5.0A section 20 :
Code: Select all
// 20.2.3 Data Objects Encoding
DataRefObject := DataObject | ObjectReference | DDBHandle
// 20.2.5 Term Objects Encoding
ObjectList := Nothing | <Object ObjectList>
Object := NameSpaceModifierObj | NamedObj
// 20.2.5.1 Namespace Modifier Objects Encoding
NameSpaceModifierObj := DefAlias | DefName | DefScope
// 20.2.5.2 Named Objects Encoding
NamedObj := DefBankField | DefCreateBitField | DefCreateByteField | DefCreateDWordField |
DefCreateField | DefCreateQWordField |DefCreateWordField | DefDataRegion |
DefOpRegion | DefPowerRes | DefProcessor | DefThermalZone
DefDevice := DeviceOp PkgLength NameString ObjectList
// 20.2.5.3 Type 1 Opcodes Encoding
DDBHandleObject := SuperName
Since DefMethod is defined in a section entitled "Named Object", I assumed that it was a possible variant of NamedObj.
However, as I found more and more unexpected structs, I started to wonder if either Lenovo made a really weird DSDT or if I was completely wrong and not understanding the ACPI specification.
I tend to think I'm always the one in cause, but the specification seems rather inconsistent (DDBHandle used in DataRefObject but never defined, while there is a DDBHandleObject. There are a handful of things like this).
Did anybody face the same problem ?