[BIOS][ACPI] GPE.asl 的 _Lxx , _Exx
現在還是處於BIOS初學者的階段
之前一直很困惑 acpi code 中
在GPE.asl 中 有一個 _Lxx 的功能
看起來像是GPO控制,但是又對不起來,常常搞混
今天終於搞懂了
其實 xx 指的就是 南橋設計的 GPE0_STS bit
_L01 指的就是 GPE0_STS.bit0
_L21 指的就是 GPE0_STS.bit21
_L81 指的就是 GPE0_STS.bit81
至於為什麼會跟GPIO搞混呢?
其實也不算搞混
在GPE0_STS通常會有一些bit是定義南橋的GPIO
如果定義在bit0~bit96 , 剛好就會是 _L00 ~ _L60 (十六進位)
所以會有以為,數字就是表示GPIO位置的意思
其實並不然
而 _L , _E zp 則是分別表示 level/Edge trigger的意思
_Lxx 就是表示 某個 bit 突然被set 1的意思
有時會跟device 的 wake 搭配
在 pch.asl定義的device(以LAN為例) ,通常會在 裏頭定義 _PRW
會定義在device 在 Sx state 可以由 GPIO yy喚醒
假設LAN支援S3 wake from gpio13好了
他就會這樣寫
Device(LAN) {
................
Method(_PRW, 0) { Return(GPRW(0x0D, 3)) } // can wakeup from S3 state
................
}
而在wake up時
就會call _L0D method ,
裏頭就可以
設定一些 如果被wake up的話 ,要做的事
method(_L0D){
...........
}
之前一直很困惑 acpi code 中
在GPE.asl 中 有一個 _Lxx 的功能
看起來像是GPO控制,但是又對不起來,常常搞混
今天終於搞懂了
其實 xx 指的就是 南橋設計的 GPE0_STS bit
_L01 指的就是 GPE0_STS.bit0
_L21 指的就是 GPE0_STS.bit21
_L81 指的就是 GPE0_STS.bit81
至於為什麼會跟GPIO搞混呢?
其實也不算搞混
在GPE0_STS通常會有一些bit是定義南橋的GPIO
如果定義在bit0~bit96 , 剛好就會是 _L00 ~ _L60 (十六進位)
所以會有以為,數字就是表示GPIO位置的意思
其實並不然
而 _L , _E zp 則是分別表示 level/Edge trigger的意思
_Lxx 就是表示 某個 bit 突然被set 1的意思
有時會跟device 的 wake 搭配
在 pch.asl定義的device(以LAN為例) ,通常會在 裏頭定義 _PRW
會定義在device 在 Sx state 可以由 GPIO yy喚醒
假設LAN支援S3 wake from gpio13好了
他就會這樣寫
Device(LAN) {
................
Method(_PRW, 0) { Return(GPRW(0x0D, 3)) } // can wakeup from S3 state
................
}
而在wake up時
就會call _L0D method ,
裏頭就可以
設定一些 如果被wake up的話 ,要做的事
method(_L0D){
...........
}
留言
關於這行 "_L21 指的就是 GPE0_STS.bit21"
_Lxx中的xx,應該是 16進制,
而 bit的表示方式,我看到都是用十進制表示
所以 _L21 指的應該是 GPE0_STS.bit33
這樣寫會不會比較恰當@@