into device label H_EC code_regex BDC0,\s+16 replace_matched begin DC00,8,DC01,8 end;
into scope label ^^LPCB code_regex BDC0,\s+16 replace_matched begin DC00,8,DC01,8 end;
# 拆分32位属性
into scope code_regex BTY0,\s+32 replace_matched begin TY00,8,TY01,8,TY02,8,TY03,8 end;
# 所有大于32位的都不用拆
从上面的图片可以看到补丁完美实现拆字节,下面再看看调用例子
访问属性补丁例子复制
1
2
3
4
5
6
7
8
9
10
11
12
# 16位属性访问替换补丁
# 注意BFC0在两个方法中有调用,都要写补丁替换
into method label BTIF code_regex \(BFC0, replaceall_matched begin (B1B2(FC00,FC01), end;
into method label _Q09 code_regex \^\^BFC0\) replaceall_matched begin ^^B1B2(FC00,FC01)) end;
# 32位属性访问替换补丁
into method label GBTI code_regex \(BTY0, replaceall_matched begin (B1B4(TY00,TY01,TY02,TY03), end;
# 56位属性替换补丁
into method label GBTI code_regex \(BDN0, replaceall_matched begin (RECB(0x10,56), end;
# 128位属性替换补丁
into method label GBTI code_regex \(BMN0, replaceall_matched begin (RECB(0x20,128), end;
# 从56位和128位属性访问补丁可以看到是通过RECB(偏移量, 位数)这个方法实现的,理论上16位、32位的
# 也可以不拆,访问的时候用这个方法,但是回到准备阶段第4部我们发现算每个属性的偏移量这工作比拆字节还头大
其它举例复制
1
2
3
4
# 在做Thinakpad E430电量补丁的时候发现有类型\_SB.PCI0.LPCB.EC.HWAK这样的调用,我用下面的补丁修正
into method label _L43 code_regex \(\\\_SB.PCI0.LPCB.EC.HWAK replaceall_matched begin \(\\_SB.B1B2(\\_SB.PCI0.LPCB.EC.AK00, \\_SB.PCI0.LPCB.EC.AK01) end;
# 理论上不需要上面那个补丁应该都能替换掉所有的,但发现不彻底,原因未知
into ALL code_regex \(\\\_SB.PCI0.LPCB.EC.HWAK replaceall_matched begin \(\\_SB.B1B2(\\_SB.PCI0.LPCB.EC.AK00, \\_SB.PCI0.LPCB.EC.AK01) end;