最近新装了一台机器:主板微星的B75的黑苹果电脑,无法睡眠,点睡眠就秒醒,DSDT里面的错误也都改正了,觉得应该没有问题了,结果上机,睡20分钟就醒了,今天抽了点时间将这几个警告处理掉。
下面就是主板的DSDT的警告问题,一般只要改正了错误,基本是没有什么问题的,但我这块板子不知道怎么回事。还有一点要说明一下的,我这块B75主板的BIOS里有个选项在电源里有个选项是关于睡眠的,有两个选项:BIOS和OS,如发现不能睡的可以到BIOS里去看看,只要改成OS就可以睡了,当然这只针对黑苹果。
话不多说看下面这几个警告:第一个:3410 3090 Min/Max/Length/Gran are all Zero,but no resource tagp 这个警告
首先定位到错误的位置:
这个警告只要改下面的一个数值:
原值是:0X0000
改为:0X0001
警告消失
第二个警告:
3489 3130 Result is not used,possible operator timeout will be missed
定位警告位置:
原代码是:
Mutex (MUT0, 0x00)
Method (ENFG, 1, NotSerialized)
{
Acquire (MUT0, 0x0FFF)
Store (0x87, INDX)
Store (0x87, INDX)
Store (Arg0, LDN)
}
改正:(这段代码来自Z77主板,其实同型号的主板可以相互通用,也是借鉴一下来修正错误)
Mutex (MUT0, 0x00)
Method (ENFG, 1, NotSerialized)
{
Store (0x87, INDX)
Store (One, INDX)
Store (0x55, INDX)
If (LEqual (SP1O, 0x2E))
{
Store (0x55, INDX)
}
Else
{
Store (0xAA, INDX)
}
Store (Arg0, LDN)
}
第三个警告:
3601 3115 Not all control paths return a value (DSTA)
定位到警告的位置:
有警告的代码:
Method (DSTA, 1, NotSerialized)
{
ENFG (CGLD (Arg0))
Store (ACTR, Local0)
EXFG ()
If (LEqual (Local0, 0xFF))
{
Return (Zero)
}
And (Local0, One, Local0)
If (LGreaterEqual (Arg0, 0x10))
{
Or (IOES, ShiftLeft (Local0, And (Arg0, 0x0F)), IOES)
}
Else
{
Or (IOST, ShiftLeft (Local0, Arg0), IOST)
}
If (Local0)
{
Return (0x0F)
}
ElseIf (LGreaterEqual (Arg0, 0x10))
{
Store (IOES, Local0)
}
Else
{
Store (IOST, Local0)
}
}
修改为以下代码:
Method (DSTA, 1, NotSerialized)
{
ENFG (CGLD (Arg0))
Store (ACTR, Local0)
EXFG ()
If (LEqual (Local0, 0xFF))
{
Return (Zero)
}
And (Local0, One, Local0)
If (LGreaterEqual (Arg0, 0x10))
{
Or (IOES, ShiftLeft (Local0, And (Arg0, 0x0F)), IOES)
}
Else
{
Or (IOST, ShiftLeft (Local0, Arg0), IOST)
}
If (Local0)
{
Return (0x0F)
}
ElseIf (LGreaterEqual (Arg0, 0x10))
{
Store (IOES, Local0)
}
Else
{
Store (IOST, Local0)
}
Return (Zero) 只需要在最后加一个返回值就可以消除这个警告。
}
第四个警告:
9975 3144 Method Local is set but never used (Local0)
定位警告位置:
有警告的代码段:
Scope (_SB.PCI0)
{
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (0x07D0, OSYS)
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Windows 2001"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP1"))
{
Store (0x07D1, OSYS)
}
修改为:
Scope (_SB.PCI0)
{
Method (_INI, 0, NotSerialized) // _INI: Initialize
{
Store (0x07D0, OSYS)
If (CondRefOf (_OSI)) 只要修改一下后面的数值就可以了很简单的一个警告。
{
If (_OSI ("Windows 2001"))
{
Store (0x07D1, OSYS)
}
第五个警告:
11018 3115 Not all control paths rerurn a value (_HID)
定位到警告的位置:
错误代码:
Device (_SB.PCI0.LPCB.TPM)
{
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
If (TCMF) {}
Else
{
Return (0x0201D824)
}
}
修改为:
Device (_SB.PCI0.LPCB.TPM)
{
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
If (TCMF) {}
Else
{
Return (0x0201D824)
}
Return (Zero) 直接给它加一个返回值,同时5个和6个警告都消失了。
}
第六个警告在修改第五个警告的同时第六个警告自动修改好了。
第七个警告:
11487 3136 Non-hex letters must be upper case (pnp0c14)
定位到错误的地方:
错误代码:
Scope (_SB)
{
Device (WMIO)
{
Mutex (WMIX, 0x01)
Name (_HID, "pnp0c14") // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Name (BUF4, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateByteField (BUF4, Zero, BF00)
CreateByteField (BUF4, One, BF01)
CreateByteField (BUF4, 0x02, BF02)
CreateByteField (BUF4, 0x03, BF03)
Name (_WDG, Buffer (0x14)
{
/* 0000 */ 0xCE, 0x93, 0x05, 0xA8, 0x77, 0x23, 0xDA, 0x11,
/* 0008 */ 0xB0, 0x12, 0xB6, 0x22, 0x20, 0x12, 0x07, 0x27,
/* 0010 */ 0x4D, 0x49, 0x01, 0x02
})
OperationRegion (CMOS, SystemIO, 0x72, 0x02)
Field (CMOS, ByteAcc, NoLock, Preserve)
{
CMIN, 8,
CMDA, 8
}
修改为:
Scope (_SB)
{
Device (WMIO)
{
Mutex (WMIX, 0x01)
Name (_HID, "PNP0c14") // _HID: Hardware ID 这个最简单只需要将小写的"pnp"改成大写的“PNP”即可
Name (_UID, Zero) // _UID: Unique ID
Name (BUF4, Buffer (0x04)
至此警告都修正了,同时睡眠也可以了。
关于这个:
_REG has no corresponding Operation Region 修正:
定位到有警告的地方:
Scope (_SB.PCI0.SAT0)
{
Name (REGF, One)
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LEqual (Arg0, 0x02))
{
Store (Arg1, REGF)
}
}
改正为:
Scope (_SB.PCI0.SAT0)
{
Name (REGF, One)
Method (REG, 2, NotSerialized) // _REG: Region Availability 只要改REG前面的“—”去掉就可以了。
{
If (LEqual (Arg0, 0x02))
{
Store (Arg1, REGF)
}
}
希望能帮到大家,其实修改DSDT其实很简单,只要用对工具,这东西不是编程没有想的那么复杂,我也知道有人会说我可以打补丁啊何必这么麻烦,那你就当我没有说,DSDT谁用谁知道。
如果觉得《各主板黑苹果dsdt补丁_关于B75主板的DSDT警告修改和睡眠相关修改》对你有帮助,请点赞、收藏,并留下你的观点哦!