在DSDT的修改中会出现各种各样的Warnings和Errors,Warnings可以忽略,除非你和我一样是一个完美主义者;Error就不能视而不见了,出现Error之后会使引导出现问题。所以相对于Warnings,Errors是一定要去除的。
推荐一种修改方式,就是改之前先编译(Compile)一下,有errors和warnings就先修改掉。完成之后,再修改一个地方编译一下,一步一步来,不然修改了很多到最后都不知道是错在哪里了。
下面就列举一些比较常见的吧,错误代码不一定完全和实际中的一样,有可能会有几个数值的差距,不过不影响。另外,下面所有内容直接用英文了,并稍微加了一点点点自己的理解。虽然自己看得懂,不过本人翻译水平有限,下面很多词语过于专业。怕翻译之后就变味了,所以干脆就不翻译了。英文不算太难,如果遇到不认识的单词搜索一下即可。(=^_^=)
-
Access width of Field Unit extends beyond region limit
1
2
3
4
SRST , 1 ,
Error 1051 - ^ Access width of Field Unit extends beyond region limit
ACPW , 1
Error 1051 - ^ Access width of Field Unit extends beyond region limitThis error consists on that the limit of data is less that the quantity of the same
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
OperationRegion (GPIO , SystemIO , 0x1180 , 0x3B ) // "0x3B" contains the error, it must be increased for example to "0x3C" (hexa)
Field (GPIO , WordAcc , Lock , Preserve )
{
AccessAs (DWordAcc , 0x00 ) ,
Offset ( 0x0F ) ,
, 4 ,
LV28 , 1 ,
Offset ( 0x2D ) ,
, 5 ,
LPOL , 1 ,
Offset ( 0x38 ) ,
, 1 ,
SRST , 1 ,
Offset ( 0x39 ) ,
, 2 ,
ACPW , 1
} -
Argument count mismatch error
1
2
./dsdt_fixed .txt 1 : ACPI (Local2 )
Error 4095 - ^ syntax error , unexpected PARSEOP_NAMESEG ,expecting PARSEOP_DEFINITIONBLOCKThis error comes from line 1.If we look inside the DSDT.dsl, we can verify that the error is here:
1
2
3
4
5
ACPI Error (dmutils - 0261 ) : Argument count mismatch for method \_SB_ .VWAK 3 1 [ 20080926 ]
ACPI Error (dmutils - 0261 ) : Argument count mismatch for method \_GPE .VBRE 2 1 [ 20080926 ]
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20080926There should be no code before these lines:
1
2
3
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20080926 -
Internal compiler error ^ (null Op pointer)
1
2
dsdt .dsl 4106 : If (LNot (\_OSI ( "Windows 2006" ) ) )
Error 4011 - Internal compiler error ^ ( null Op pointer )The incorrect part of the code is:
1
2
3
4
If (LNot (\_OSI ( "Windows 2006" ) ) )
{
PHSR ( 0x10 , 0x00 )
}It can be fixed by these changes:
1
2
3
4
5
6
7
If (\_OSI ( "Windows 2006" ) )
{
}
Else
{
PHSR ( 0x10 , 0x00 )
} -
Local variable is not initialized
1
2
./dsdt_fixed .txt 408 : Store (Local0 , Local0 )
Error 4050 - ^ Method local variable is not initialized (Local0 )If we revise the code, and look at line 408 we find the these codes.There may exists two cases
1
2
3
4
5
6
7
8
9
10
11
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
Store (Local0 , Local0 )
}
Method (_SST , 1 , NotSerialized )
{
Store (Local0 , Local0 )
}
}1
2
3
4
5
6
7
8
9
10
11
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
Store ( "Local0" , Local0 )
}
Method (_SST , 1 , NotSerialized )
{
Store ( "Local0" , Local0 )
}
}How do we know what in the DSDT.dsl needs fixing? If you search for “Store” in the menu, and look just below the error, you will see something like this:
1
2
Store ( 0xFF , RSR0 )
Store ( 0x80 , PMC0 )The first value of “Store” is a hexadecimal value, and the second, a variable. There is the error. In the code (Local0,Local0), it is supposed that the first value is a hexadecimal, not a variable. we could add 0×00 or also zero, in a format like this:
1
2
3
4
5
6
7
8
9
10
11
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
Store (zero , Local0 )
}
Method (_SST , 1 , NotSerialized )
{
Store (zero , Local0 )
}
} -
Maximum error count (200) exceeded
1
./dsdt_fixed .txt 24 : External (^CPU0 ._PPC )The problem here is that the compiler doesn’t like the following:
1
External (^CPU0 ._PPC )It can be fixed by using this code:
1
External (\_PR .CPU0 ._PPC )Then we must find and replace every occurrence in the code that has ^CPU0 for _PR.CPU0 to skip this error:
1
2
3
4
5
6
7
8
9
10
11
dsdt .dsl .patched 574 : If (LGreater (^CPU0 ._PPC , Zero ) )
Error 4063 -Object not found or not accessible from scope ^ (^CPU0 ._PPC )
dsdt .dsl .patched 576 : Subtract (^CPU0 ._PPC , One , ^CPU0 ._PPC )
Error 4063 -Object not found or not accessible from scope ^ (^CPU0 ._PPC )
dsdt .dsl .patched 576 : Subtract (^CPU0 ._PPC , One , ^CPU0 ._PPC )
Error 4063 -Object not found or not accessible from scope ^ (^CPU0 ._PPC )
dsdt .dsl .patched 578 : Add (^CPU0 ._PPC , One , ^CPU0 ._PPC )
Error 4063 -Object not found or not accessible from scope ^ (^CPU0 ._PPC ) -
Method local variable is not initialized (Local0)
1
2
DSDT .dsl 242 : Store (Local0 , Local0 )
Error 4050 – ^ Method local variable is not initialized (Local0 )This error is produced because a variable tries to store it’s value in itself. Original codes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
Store (Local0 , Local0 )
}
Method (_SST , 1 , NotSerialized )
{
Store (Local0 , Local0 )
If (LEqual (Arg0 , 0x03 ) ) { }
If (LEqual (Arg0 , 0x01 ) ) { }
}
}There are two method to repair this,you need to comment this code out below or enclose on ” ” the first Local0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
/* Store (Local0, Local0) */
}
Method (_SST , 1 , NotSerialized )
{
/* Store (Local0, Local0) */
If (LEqual (Arg0 , 0x03 ) ) { }
If (LEqual (Arg0 , 0x01 ) ) { }
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
Scope (\_SI )
{
Method (_MSG , 1 , NotSerialized )
{
/* Store ("Local0", Local0) */
}
Method (_SST , 1 , NotSerialized )
{
/* Store ("Local0", Local0) */
If (LEqual (Arg0 , 0x03 ) ) { }
If (LEqual (Arg0 , 0x01 ) ) { }
}
} -
Method local variable is not initialized
1
2
dsdt .dsl 610 : If (LNot (LEqual (ShiftRight (And (Local1 , 0x10 ) , 0x03 ) , And (Local2 , 0x02 ) ) ) )
Error 1013 - Method local variable is not initialized ^ (Local1 )In this case, you must change all “Local1″ in that line to “Local2″.(Only in this case, in others it could be another error.)
-
Missing ResourceSource string
1
2
3
4
5
6
7
8
dsdt .asl 1028 : 0x0100 , 0x00 )
Error 1094 - ^ Missing ResourceSource string (required )
dsdt .asl 1034 : 0x00000CF8 , 0x00 )
Error 1094 - ^ Missing ResourceSource string (required )
dsdt .asl 1041 : 0x0000F300 , 0x00 )
Error 1094 - ^ Missing ResourceSource string (required )To fix this error we must eliminate the value of 0×00 from all erroneous entries. The first one is the original,and the second one is the modified.
1
2
3
4
5
6
1023 WordBusNumber (ResourceProducer , MinFixed , MaxFixed ,PosDecode ,
1024 0x0000 , /* Address Space Granularity */
1025 0x0000 , /* Address Range Minimum */
1026 0x00FF , /* Address Range Maximum */
1027 0x0000 , /* Address Translation Offset */
1028 0x0100 , 0x00 )1
2
3
4
5
6
1023 WordBusNumber (ResourceProducer , MinFixed , MaxFixed ,PosDecode ,
1024 0x0000 , /* Address Space Granularity */
1025 0x0000 , /* Address Range Minimum */
1026 0x00FF , /* Address Range Maximum */
1027 0x0000 , /* Address Translation Offset */
1028 0x0100 ) -
Must return a value (_WAK)
1
2
dsdt .dsl 163 : Method (_WAK , 1 , NotSerialized )
Warning 2026 - ^ Reserved method must return a value (_WAK )At the end of the _WAK method, this must be added:
1
Return (Package ( 0x02 ) {Zero , Zero } )Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Method (_WAK , 1 , NotSerialized )
{
P8XH (One , 0xAB )
If (LOr (LEqual (Arg0 , 0x03 ) , LEqual (Arg0 , 0x04 ) ) )
{
If (And (CFGD , 0x01000000 ) )
{
If (LAnd (And (CFGD , 0xF0 ) , LEqual (OSYS , 0x07D1 ) ) )
{
TRAP ( 0x3D )
}
}
}
If (LEqual (RP2D , Zero ) )
{
Notify (\_SB .PCI0 .RP02 , Zero )
}
If (LEqual (Arg0 , 0x03 ) ) { }
If (LEqual (Arg0 , 0x04 ) )
{
\_SB .PCI0 .LPCB .EC .SELE ( )
}
P8XH (Zero , 0xCD )
Return (Package ( 0x02 )
{
Zero ,
Zero
} )
} -
Not all control paths return a value
1
2
dsdt .dsl 7288 : Method (EVNT , 1 , NotSerialized )
Warning 1086 - ^ Not all control paths return a value (EVNT )In this other case, a value of this kind must be returned at the end of the method:
1
Return (Zero )Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Method (EVNT , 1 , NotSerialized )
{
While (VZOK )
{
If (LEqual (VZOK , 0x01 ) )
{
Store (Arg0 , VZOK )
Notify (\_SB .VALZ , 0x80 )
Return (Zero )
}
Else
{
Sleep ( 0x05 )
}
}
}The fix is something like:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Method (EVNT , 1 , NotSerialized )
{
While (VZOK )
{
If (LEqual (VZOK , 0x01 ) )
{
Store (Arg0 , VZOK )
Notify (\_SB .VALZ , 0x80 )
Return (Zero )
}
Else
{
Sleep ( 0x05 )
}
}
Return (Zero )
} -
Not all control paths return a value(2)
1
2
dsdt .dsl 255 : Method (_BTP , 1 , NotSerialized )
Warning 2019 - ^ Not all control paths return a value (_BTP )The original code is:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Device (CMB0 )
{
Name (_HID , EisaId ( "PNP0C0A" ) )
Name (_UID , 0x01 )
Name (BATP , Ones )
Name (_PCL , Package ( 0x01 )
{
\_SB
} )
...
...
...
Method (_BTP , 1 , NotSerialized )
{
If (LEqual (\ECFL , Zero ) )
{
Return ( 0x0F )
}
Else
{
Store ( "_SB.CMB0._BTP" , Debug )
}
}
...
...
...
}In this case, the solution consists on using the returned value of \ECFL and then add it in place of “Debug”.Change this line:
1
Store ( "_SB.CMB0._BTP" , Debug )to this:
1
Store ( "_SB.CMB0._BTP" , 0x0F ) -
Object does not exist ^ (\_PR.C000)
1
2
3
4
5
6
7
8
9
10
11
dsdt .dsl 75 : If (LEqual (\C001 , 0x00 ) )
Error 1061 - Object does not exist ^ (\C001 )
dsdt .dsl 6589 : \_PR .C000
Error 1061 - Object does not exist ^ (\_PR .C000 )
dsdt .dsl 6645 : Notify (\_PR .C000 , 0x80 )
Error 1061 - Object does not exist ^ (\_PR .C000 )
dsdt .dsl 6718 : Notify (\_PR .C000 , 0x80 )
Error 1061 - Object does not exist ^ (\_PR .C000 )In this error, there is missing code that needs to be added to the beginning.This is the code to be added:
1
2
External (\C001 )
External (\_PR .C000 )Just below the header of the DSDT, like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20090625
*
* Disassembly of ./dsdt.dat, Tue Aug 11 23:29:06 2009
*
*
* Original Table Header:
* Signature "DSDT"
* Length 0x00005FC3 (24515)
* Revision 0x02
* Checksum 0x13
* OEM ID "Sony"
* OEM Table ID "VAIO"
* OEM Revision 0x20080725 (537397029)
* Compiler ID "INTL"
* Compiler Version 0x20090625 (537462309)
*/
DefinitionBlock ( "./dsdt.aml" , "DSDT" , 2 , "Sony" , "VAIO" , 0x20080725 )
{
External (\C001 )
External (\_PR .C000 )
External (L0C3 )
External (L1C3 )
External (PDC1 )
External (PDC0 )
External (CFGD ) -
Object does not exist ^ (\LOR)
1
2
./dsdt_fixed .txt 233 : If (\LOr (_OSI ( "Darwin" ) , _OSI ( "Windows 2001" ) ) )
Error 4063 - Object does not exist ^ (\LOR )Solution:
1
If (LOr (\_OSI ( "Darwin" ) , \_OSI ( "Windows 2001" ) ) )Or:
1
If (LOr (_OSI ( "Darwin" ) , _OSI ( "Windows 2001" ) ) ) -
Operation Region requires ByteAcc
1
2
3
4
5
./dsdt_fixed .txt 3964 : Field (ECRM , AnyAcc , Lock , Preserve )
Error 4075 - ^ Host Operation Region requires ByteAcc access
./dsdt_fixed .txt 4192 : Return (Local1 )
Error 4050 - Method local variable is not initialized ^ (Local1 )What is happening here? Well This:
1
2
OperationRegion (ECRM , EmbeddedControl , Zero , 0xFF )
Field (ECRM , AnyAcc , Lock , Preserve )The compiler tells us that Anyacc isn’t correct, it must be ByteAcc, so that way we change this:
1
2
OperationRegion (ECRM , EmbeddedControl , Zero , 0xFF )
Field (ECRM , ByteAcc , Lock , Preserve )The second error:
1
2
./dsdt_fixed .txt 4192 : Return (Local1 )
Error 4050 - Method local variable is not initialized ^ (Local1 )Is similar to the error above, of the uninitialized variable, does it sound familiar to you all?
1
2
3
4
5
6
7
8
9
10
11
Method (PKTW , 1 , NotSerialized )
{
Store (Arg0 , EPKT )
Return (Local1 )
We fix it like this :
Method (PKTW , 1 , NotSerialized )
{
Store (Arg0 , EPKT )
Return (Zero ) -
Possible operator timeout is ignored
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dsdt .dsl 4220 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4234 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4249 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4264 : Acquire (MUTE , 0x0FFF )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4278 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4293 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignored
dsdt .dsl 4308 : Acquire (MUTE , 0x03E8 )
Warning 1103 - ^ Possible operator timeout is ignoredIn this error, the value of MUTE must be changed from 0xXXXX to 0xFFFF
1
Acquire (MUTE , 0x03E8 )Converts to the code below,and it must be replaced where ever it gives error.
1
Acquire (MUTE , 0xFFFF ) -
Reserved method has too few arguments
1
2
dsdt .dsl 3067 : Method (_EJ0 , 0 , NotSerialized )
Warning 1076 - ^ Reserved method has too few arguments (_EJ0 requires 1 )This error is solved by changing:
1
Method (_EJ0 , 0 , NotSerialized )to:
1
Method (_EJ0 , 1 , NotSerialized ) -
Reserved method has too many arguments
1
2
dsdt .dsl 3067 : Method (_EJ0 , 0 , NotSerialized )
Warning 1076 - ^ Reserved method has too few arguments (_EJ0 requires 1 )This error is solved by changing:
1
Method (_EJ0 , 0 , NotSerialized )to:
1
Method (_EJ0 , 1 , NotSerialized ) -
Reserved method must return a value (_PSR)
1
2
dsdt .dsl 3896 : Method (_PSR , 0 , NotSerialized )
Warning 1079 - ^ Reserved method must return a value (_PSR )Here the problem is that it is not detected the change from battery/AC.Extracted from the ACPI specifications:
1
2
3
4
5
6
7
8
11 .3 .1 PSR (Power Source )
Returns the current power source devices . Used for the AC adapter and is located under the AC adapter
object in name space . Used to determine if system is running off the AC adapter .
Arguments :
None
Result Code :
0x00000000 – Off -line
0x00000001 – On -lineThis is the erroneous code:
1
2
3
4
5
6
7
Method (_PSR , 0 , NotSerialized )
{
If (\_SB .PCI0 .PIB .EC .ECOK )
{
Return (\_SB .PCI0 .PIB .EC .ADP )
}
}And here the solution:
1
2
3
4
5
6
7
8
9
10
11
Method (_PSR , 0 , NotSerialized )
{
If (\_SB .PCI0 .PIB .EC .ECOK )
{
Return ( 0x01 )
}
Else
{
Return ( 0x00 )
}
} -
Reserved method must return a value (_STA)
1
2
Method (_STA , 0 , NotSerialized )
Warning 2026 - ^ Reserved method must return a value (_STA )This is the original code:
1
2
3
4
Method (_STA , 0 , NotSerialized )
{
STAL ( 0x60 )
}It should be:
1
2
3
4
Method (_STA , 0 , NotSerialized )
{
Return (STAL ( 0x60 ) )
} -
Result is not used, operator has no effect ^
1
2
dsdt .dsl 10150 : ShiftRight (BUF2 , 0x04 )
Warning 1105 - Result is not used , operator has no effect ^The error is produced because “Shiftright” stores no value:
1
2
3
4
5
6
7
8
.....
Store (AAXB , MBUF )
ShiftRight (BUF2 , 0x04 ) < ------- Error .
Store (BUF2 , Local3 )
Store (CMER , BUF0 )
Store ( 0xFF , BUF1 )
Store (Zero , BUF2 )
.....It must be changed to this :
1
2
3
4
5
6
7
8
Store (BUF2 , Local4 )
Store (AAXB , MBUF )
Store (BUF2 , Local4 ) <------- Here .
Store (BUF2 , Local3 )
Store (CMER , BUF0 )
Store ( 0xFF , BUF1 )
Store (Zero , BUF2 ) -
Result is not used, operator has no effect ^ (2)
1
2
./dsdt .dsl 2803 : And (CTRL , 0x1E )
Warning 1105 - ^ Result is not used , operator has no effectIt can be fixed changing:
1
And (CTRL , 0x1E )to:
1
And (CTRL , 0x1E , CTRL ) -
String must be entirely alphanumeric
1
2
dsdt .dsl 32 : Name (_HID , "*PNP0A03" )
Error 1068 - ^ String must be entirely alphanumeric ( *PNP0A03 )Solution is to remove the “ * ”character,such as converts
1
( *PNP0A03 )to:
1
(PNP0A03 ) -
Too many arguments
1
2
dsdt .dsl 2672 : Method (_GLK , 1 , NotSerialized )
Warning 2024 - ^ Reserved method has too many arguments ( _GLK requires 0 )Solution: eliminate the arguments:
1
Method (_GLK )This was a simple one.(^0^)
-
Warning 1099 -Unknown reserved name ^ (_BCG)
On this case the compiler is complaining about the use of “-” on a specified method name.Here is a example:
1
2
3
4
5
6
Method (_BCG , 0 , Serialized )
{
Store (C136 , Local0 )
Return (Local0 )
}
}Just change _BCG to BCG and the compiler will be happy again.
1
2
3
4
5
6
Method (BCG , 0 , Serialized )
{
Store (C136 , Local0 )
Return (Local0 )
}
} -
Use of reserved word ^ (_T_0)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dsdt .dsl 2928 : Name (_T_0 , Zero )
Error 4081 - Use of reserved word ^ (_T_0 )
dsdt .dsl 2980 : Name (_T_1 , "" )
Error 4081 - Use of reserved word ^ (_T_1 )
dsdt .dsl 3012 : Name (_T_2 , Zero )
Error 4081 - Use of reserved word ^ (_T_2 )
dsdt .dsl 3039 : Name (_T_0 , Zero )
Error 4081 - Use of reserved word ^ (_T_0 )
dsdt .dsl 3215 : Name (_T_0 , Zero )
Error 4081 - Use of reserved word ^ (_T_0 )
dsdt .dsl 3404 : Name (_T_1 , Zero )
Error 4081 - Use of reserved word ^ (_T_1 )The solution consists of changing this:
1
Name (_T_0 , Zero )to this:
1
Name (T_0 , Zero )