各主板黑苹果dsdt补丁 | 您所在的位置:网站首页 › b75改biosnvme › 各主板黑苹果dsdt补丁 |
最近新装了一台机器:主板微星的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谁用谁知道。 |
CopyRight 2018-2019 实验室设备网 版权所有 |