RehabMan
Moderator
- Joined
- May 2, 2012
- Messages
- 181,015
- Motherboard
- Intel DH67BL
- CPU
- i7-2600K
- Graphics
- HD 3000
- Mac
- Mobile Phone
How to patch DSDT for working battery status
A mechanical transform:
Assuming BATD is split BTD0,BTD1, translate to:
Or(ShiftRight(B1B2(BTD0,BTD1),8), ShiftRight(0xC0,8), BTD1)
Or(B1B2(BTD0,BTD1), 0xC0, BTD0)
or:
Store(ShiftRight(Or(B1B2(BTD0,BTD1),0xC0),8), BTD1)
Store(Or(B1B2(BTD0,BTD1),0xC0), BTD0)
A bit smarter (because we know only BTD0 is being changed):
Or(BTD0, 0xC0, BTD0)
32-bit write, assuming EC field XX broken as XX0,XX1,XX2,XX3:
From:
Store(Arg0, XX)
To:
Store(ShiftRight(Arg0,24), XX3)
Store(ShiftRight(Arg0,16), XX2)
Store(ShiftRight(Arg0,8), XX1)
Store(Arg0, XX0)
Sorry for disturb again.
I meet new problems in other DSDT.
1.
BATD is 16 bit field, I have no idea to handle it. In your last reply, the third param of or(,,,) is a "write". I have no idea about it.HTML:Or (BATD, 0xC0, BATD)
A mechanical transform:
Assuming BATD is split BTD0,BTD1, translate to:
Or(ShiftRight(B1B2(BTD0,BTD1),8), ShiftRight(0xC0,8), BTD1)
Or(B1B2(BTD0,BTD1), 0xC0, BTD0)
or:
Store(ShiftRight(Or(B1B2(BTD0,BTD1),0xC0),8), BTD1)
Store(Or(B1B2(BTD0,BTD1),0xC0), BTD0)
A bit smarter (because we know only BTD0 is being changed):
Or(BTD0, 0xC0, BTD0)
2.
I also have a question. You told me 16 bit write code in last reply. But when I meet a 32 bit write, how the code should be like?
32-bit write, assuming EC field XX broken as XX0,XX1,XX2,XX3:
From:
Store(Arg0, XX)
To:
Store(ShiftRight(Arg0,24), XX3)
Store(ShiftRight(Arg0,16), XX2)
Store(ShiftRight(Arg0,8), XX1)
Store(Arg0, XX0)