本帖最后由 keeyaom 于 2021-1-25 16:45 编辑
学渣爬论坛及相关文档尝试做了两个补丁(),但是电量显示都还是0.
HP笔记本
ACPIBatteryManager.kext 以及SMCBatteryManager.kext都试过,都没成功驱动。
用MaciASL 提取的DSDT,
先搜索 EmbeddedControl,再搜索ERAM.
整理出来字节大于8的,有以下选项
BADC, 16, UPBI
BFCC, 16, UPBI,
MCUR, 16, UPBS,
MBRM, 16, UPBS,CLRI
MBCV, 16, UPBS,
SMW0, 16 SWMR
FLD0, 64 SMRD
FLD1, 128 SMRD
FLD2, 192 SMRD
FLD3, 256 SMRD
SMD0, 256, SMWR
搜索EmbeddedControl的结果
- OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- SMPR, 8,
- SMST, 8,
- SMAD, 8,
- SMCM, 8,
- SMD0, 256,
- BCNT, 8,
- SMAA, 8,
- Offset (0x40),
- SW2S, 1,
- , 2,
- ACCC, 1,
- TRPM, 1,
- Offset (0x41),
- W7OS, 1,
- QWOS, 1,
- , 1,
- SUSE, 1,
- RFLG, 1,
- , 1,
- , 1,
- Offset (0x42),
- , 5,
- UBOS, 1,
- Offset (0x43),
- , 1,
- , 1,
- ACPS, 1,
- ACKY, 1,
- GFXT, 1,
- , 1,
- , 1,
- Offset (0x44),
- , 7,
- DSMB, 1,
- GMSE, 1,
- , 1,
- QUAD, 1,
- Offset (0x46),
- Offset (0x47),
- ADC4, 8,
- ADC5, 8,
- Offset (0x4C),
- STRM, 8,
- Offset (0x4E),
- LIDE, 1,
- Offset (0x50),
- , 5,
- DPTL, 1,
- , 1,
- DPTE, 1,
- Offset (0x52),
- ECLS, 1,
- Offset (0x55),
- EC45, 8,
- Offset (0x58),
- RTMP, 8,
- ADC6, 8,
- Offset (0x5E),
- TMIC, 8,
- Offset (0x61),
- SHPM, 8,
- ECTH, 8,
- ECTL, 8,
- Offset (0x67),
- LDDG, 1,
- , 1,
- GC6R, 1,
- IGC6, 1,
- Offset (0x68),
- , 3,
- PLGS, 1,
- Offset (0x69),
- , 6,
- BTVD, 1,
- Offset (0x6C),
- GWKR, 8,
- Offset (0x70),
- BADC, 16,
- BFCC, 16,
- BVLB, 8,
- BVHB, 8,
- BDVO, 8,
- Offset (0x7F),
- ECTB, 1,
- Offset (0x82),
- MBST, 8,
- MCUR, 16,
- MBRM, 16,
- MBCV, 16,
- VGAV, 8,
- FGM2, 8,
- FGM3, 8,
- Offset (0x8D),
- , 5,
- MBFC, 1,
- Offset (0x92),
- Offset (0x93),
- Offset (0x94),
- GSSU, 1,
- GSMS, 1,
- Offset (0x95),
- MMST, 4,
- DMST, 4,
- Offset (0xA0),
- QBHK, 8,
- Offset (0xA2),
- QBBB, 8,
- Offset (0xA4),
- MBTS, 1,
- MBTF, 1,
- , 4,
- AD47, 1,
- BACR, 1,
- MBTC, 1,
- , 2,
- MBNH, 1,
- Offset (0xA6),
- MBDC, 8,
- Offset (0xA8),
- EWDT, 1,
- CWDT, 1,
- LWDT, 1,
- AWDT, 1,
- Offset (0xAA),
- , 1,
- SMSZ, 1,
- , 5,
- RCDS, 1,
- Offset (0xAD),
- SADP, 8,
- Offset (0xB2),
- RPM1, 8,
- RPM2, 8,
- Offset (0xB7),
- GTMP, 8,
- Offset (0xBA),
- Offset (0xBB),
- Offset (0xBC),
- Offset (0xC1),
- DPPC, 8,
- Offset (0xC8),
- , 1,
- CVTS, 1,
- Offset (0xC9),
- TPVN, 8,
- Offset (0xCE),
- NVDX, 8,
- ECDX, 8,
- EBPL, 1,
- Offset (0xD2),
- , 7,
- DLYE, 1,
- Offset (0xD4),
- PSHD, 8,
- PSLD, 8,
- DBPL, 8,
- STSP, 8,
- Offset (0xDA),
- PSIN, 8,
- PSKB, 1,
- PSTP, 1,
- , 1,
- PWOL, 1,
- RTCE, 1,
- Offset (0xE0),
- DLYT, 8,
- DLY2, 8,
- Offset (0xE5),
- GP12, 8,
- SFHK, 8,
- Offset (0xE9),
- DTMT, 8,
- PL12, 8,
- ETMT, 8,
- Offset (0xF2),
- ZPOD, 1,
- , 4,
- WLPW, 1,
- WLPS, 1,
- ENPA, 1,
- Offset (0xF4),
- SFAN, 8,
- Offset (0xF8),
- BAAE, 1,
- S3WA, 1,
- BNAC, 1,
- , 1,
- EFS3, 1,
- S3WK, 1,
- RSAL, 1
- }
复制代码 搜索EmbeddedControl的结果
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- SMW0, 16
- }
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- SMB0, 8
- }
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- FLD0, 64
- }
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- FLD1, 128
- }
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- FLD2, 192
- }
- Field (ERAM, ByteAcc, NoLock, Preserve)
- {
- Offset (0x04),
- FLD3, 256
- }
复制代码 在DSDT中检查mutex的结果
- Mutex (ECMT, 0x00)
- Mutex (MUT0, 0x00)
- Mutex (MUT1, 0x00)
- Mutex (EHLD, 0x00)
- Mutex (MUTX, 0x00)
- Mutex (OSUM, 0x00)
复制代码
----------------------------第一个补丁--------------------------------------
- into method label B1B2 remove_entry;
- into definitionblock code_regex . insert
- begin
- Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n
- end;
- into device label EC0 code_regex BADC,\s+16, replace_matched begin ADC0,8,ADC1,8, end;
- into device label EC0 code_regex BFCC,\s+16, replace_matched begin FCC0,8,FCC1,8, end;
- into device label EC0 code_regex MCUR,\s+16, replace_matched begin CUR0,8,CUR1,8, end;
- into device label EC0 code_regex MBRM,\s+16, replace_matched begin BRM0,8,BRM1,8, end;
- into device label EC0 code_regex MBCV,\s+16, replace_matched begin BCV0,8,BCV1,8, end;
- into method label UPBI code_regex \(\^\^PCI0\.LPCB\.EC0\.BADC, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.ADC0,\^\^PCI0\.LPCB\.EC0\.ADC1), end;
- into method label UPBI code_regex \(\^\^PCI0\.LPCB\.EC0\.BFCC, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.FCC0,\^\^PCI0\.LPCB\.EC0\.FCC1), end;
- into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MCUR, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.CUR0,\^\^PCI0\.LPCB\.EC0\.CUR1), end;
- into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MBRM, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.BRM0,\^\^PCI0\.LPCB\.EC0\.BRM1), end;
- into method label CLRI code_regex \(\^\^LPCB\.EC0\.MBRM, replaceall_matched begin (B1B2(\^\^LPCB\.EC0\.BRM0,\^\^LPCB\.EC0\.BRM1), end;
- into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MBCV, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.BCV0,\^\^PCI0\.LPCB\.EC0\.BCV1), end;
- into device label EC0 code_regex (SMD0,)\s+(256) replace_matched begin SMDX,%2,//%1%2 end;
- into method label WE1B parent_label EC0 remove_entry;
- into method label WECB parent_label EC0 remove_entry;
- into device label EC0 insert
- begin
- Method (WE1B, 2, NotSerialized)\n
- {\n
- OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
- Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
- Store(Arg1, BYTE)\n
- }\n
- Method (WECB, 3, Serialized)\n
- // Arg0 - offset in bytes from zero-based EC\n
- // Arg1 - size of buffer in bits\n
- // Arg2 - value to write\n
- {\n
- ShiftRight(Arg1, 3, Arg1)\n
- Name(TEMP, Buffer(Arg1) { })\n
- Store(Arg2, TEMP)\n
- Add(Arg0, Arg1, Arg1)\n
- Store(0, Local0)\n
- While (LLess(Arg0, Arg1))\n
- {\n
- WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n
- Increment(Arg0)\n
- Increment(Local0)\n
- }\n
- }\n
- end;
- into method label SMWR code_regex Store\s\(Arg3,\sSMD0\) replaceall_matched begin WECB(0x0A,256,Arg3) end;
- into Device label EC0 code_regex (FLD0,)\s+(64) replace_matched begin FL0D,%2,//%1%2 end;
- into Device label EC0 code_regex (FLD1,)\s+(128) replace_matched begin FL1D,%2,//%1%2 end;
- into Device label EC0 code_regex (FLD2,)\s+(192) replace_matched begin FL2D,%2,//%1%2 end;
- into Device label EC0 code_regex (FLD3,)\s+(256) replace_matched begin FL3D,%2,//%1%2 end;
- begin
- Method (RE1B, 1, NotSerialized)\n
- {\n
- OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
- Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
- Return(BYTE)\n
- }\n
- Method (RECB, 2, Serialized)\n
- // Arg0 - offset in bytes from zero-based \_SB.PCI0.LPCB.EC0\n
- // Arg1 - size of buffer in bits\n
- {\n
- ShiftRight(Arg1, 3, Arg1)\n
- Name(TEMP, Buffer(Arg1) { })\n
- Add(Arg0, Arg1, Arg1)\n
- Store(0, Local0)\n
- While (LLess(Arg0, Arg1))\n
- {\n
- Store(RE1B(Arg0), Index(TEMP, Local0))\n
- Increment(Arg0)\n
- Increment(Local0)\n
- }\n
- Return(TEMP)\n
- }\n
- end;
- into method label SMRD code_regex FLD0 replaceall_matched begin RECB(0x04, 64) end;
- into method label SMRD code_regex FLD1 replaceall_matched begin RECB(0x04, 128) end;
- into method label SMRD code_regex FLD2 replaceall_matched begin RECB(0x04, 192) end;
- into method label SMRD code_regex FLD3 replaceall_matched begin RECB(0x04, 256) end;
复制代码
------------------------------------------------第二种补丁二楼-----------------------------------------------
|