討論區快速選單
知識庫快速選單
討論區最近新進100則主題 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
SCI 的問題
更改我的閱讀文章字型大小
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/8 下午 04:15:00
ACPI SPEC 的System Events裡面有一段說:
當一個Event發生的時候Event Status bit會被設定成1, 如果此時對應的Enable Register 也設定成1的時候,Core Logic 會發出了一個SCI訊號給OS,當OS接收到這個中斷的時候會去執行對應於Event Status Register bit 的Control Method,而這個Control Method會使用Notify()指令通知OS是什麼Event 發生了!

我已經知道他說的Status跟Event Register指的是南橋裡面的暫存器,而且每個bit都是對應的,但是有幾個觀念我搞不清楚:

1. GPE Events
    OS接收到SCI 中斷的時候會去執行對應於Event Status Register bit 的Control Method,就是Method(_Lxx),而Scope(_GPE)是幹麻用的 ???
 
2. 我看電路圖,南橋上面只有一隻GPIO 接腳是接到EC去當作產生SCI中斷用途(SMI又是另一隻),而EC偵測到的Event都是透過這支GPIO告訴南橋去產生SCI(例如KBC的User HotKey讓EC發出Q event) ,那其他沒接到EC上面的Device如果產生Event又是透過什麼方式產生SCI ?

3. 南橋產生SCI,OS如何知道SCI產生??? OS是去南橋讀取暫存器的值嗎?
    因為我看南橋的接腳,如果DEVICE發出SMI訊號,DEVICE也只是將連接到南橋的接腳電位改變而已,南橋也只是將接腳狀態儲存在SMI_STS暫存器中,假如對應的SMI_EN=1則南橋發出SMI#訊號,這個SMI#訊號透過SMI#接腳接到CPU上面,所以會讓CPU進入SMM Mode,但是SCI並沒有,所以我不懂的是什麼叫做 【南橋產生SCI 訊號給OS】他透過什麼方式把訊號送給OS?
    
     我問過EC Enginner 他們說如果是Q Event ,EC只是將QXX(一個QXX的值,從Q00h~QFFh)放到固定的EC RAM裡面,然後接著把接到南橋的GPIO那隻接腳的電位改變,EC就只做這兩個動作而已,而EC改變了SCI電位只會使南橋的GPE0_STS對應的bit被設定成1 (bit 16~bit 31其中一隻,看使用了那一隻GPIO接到EC),如果對應的GPE0_EN bit也是被設定成1的時候,南橋就會產生一個SCI訊號,但是我找不到誰會去設定 GPE0_EN bit,且南橋SCI訊號發出去之後OS如何知道?

4. ASL 有宣告EC Command Port的位址, OS是透過他去得到EC RAM裡面的QXX嗎?
     如果是Q event, OS應該會去EC RAM裡面讀取QXX,然後執行Method(_QXX),所以我自己猜測OS應該會透過"某種管道"去EC RAM讀取資料, 對嗎?

 小弟初學ACPI 希望有前輩能夠指點我,謝謝!
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/9 上午 09:42:27
ACPI是包含HW & SW的規格. HW是邏輯, SW是應用. 研究的時候要把最基本的原則掌握住.


>1. GPE Events
> OS接收到SCI 中斷的時候會去執行對應於Event Status Register bit 的Control Method,就是Method(_Lxx),而Scope(_GPE)是幹麻用的 ???
>
_GPE是ACPI 定義的一個name space. 是定義general event的區域, 也就是說在HW的 GP register裡面的對應,就是落在 _GPE的scope裡面, _L00就是代表 bit 0, 以此類推.
至於event的硬體反應就是 level & edge兩種. 至於_Qxx是針對EC的quary code.跟_Lxx 和_Txx意義是不同的.


>2. 我看電路圖,南橋上面只有一隻GPIO 接腳是接到EC去當作產生SCI中斷用途(SMI又是另一隻),而EC偵測到的Event都是透過這支GPIO告訴南橋去產生SCI(例如KBC的User HotKey讓EC發出Q event) ,那其他沒接到EC上面的Device如果產生Event又是透過什麼方式產生SCI ?
上面說過了 _Qxx 是GPE針對EC的特殊應用. 對其他的裝置而言是跟EC是平等, EC產生SCI的方式, 也就是其他device產生SCI的方式. 至於ACPI定義的fix hardware feature就是固定的控制跟gernal event無關.

>
>3. 南橋產生SCI,OS如何知道SCI產生??? OS是去南橋讀取暫存器的值嗎?
> 因為我看南橋的接腳,如果DEVICE發出SMI訊號,DEVICE也只是將連接到南橋的接腳電位改變而已,南橋也只是將接腳狀態儲存在SMI_STS暫存器中,假如對應的SMI_EN=1則南橋發出SMI#訊號,這個SMI#訊號透過SMI#接腳接到CPU上面,所以會讓CPU進入SMM Mode,但是SCI並沒有,所以我不懂的是什麼叫做 【南橋產生SCI 訊號給OS】他透過什麼方式把訊號送給OS?
>
在PC, SCI可以設定連接到8259. 去產生IRQ. 我想不需要說明OS如何處理IRQ了吧?
請花一點時間去看一下Intel SB的EDS.



> 我問過EC Enginner 他們說如果是Q Event ,EC只是將QXX(一個QXX的值,從Q00h~QFFh)放到固定的EC RAM裡面,然後接著把接到南橋的GPIO那隻接腳的電位改變,EC就只做這兩個動作而已,而EC改變了SCI電位只會使南橋的GPE0_STS對應的bit被設定成1 (bit 16~bit 31其中一隻,看使用了那一隻GPIO接到EC),如果對應的GPE0_EN bit也是被設定成1的時候,南橋就會產生一個SCI訊號,但是我找不到誰會去設定 GPE0_EN bit,且南橋SCI訊號發出去之後OS如何知道?
>
OS會去設 enable bit. 參考就是上面提到的_GPE or 或device的_PRW



>4. ASL 有宣告EC Command Port的位址, OS是透過他去得到EC RAM裡面的QXX嗎?
> 如果是Q event, OS應該會去EC RAM裡面讀取QXX,然後執行Method(_QXX),所以我自己猜測OS應該會透過'某種管道'去EC RAM讀取資料, 對嗎?
>
EC我沒用過, 應該請教你們EC 的firmware工程師.
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/9 上午 09:54:17

> 我問過EC Enginner 他們說如果是Q Event ,EC只是將QXX(一個QXX的值,從Q00h~QFFh)放到固定的EC RAM裡面,然後接著把接到南橋的GPIO那隻接腳的電位改變,EC就只做這兩個動作而已,而EC改變了SCI電位只會使南橋的GPE0_STS對應的bit被設定成1 (bit 16~bit 31其中一隻,看使用了那一隻GPIO接到EC),如果對應的GPE0_EN bit也是被設定成1的時候,南橋就會產生一個SCI訊號,但是我找不到誰會去設定 GPE0_EN bit,且南橋SCI訊號發出去之後OS如何知道?
>
補充一下, EC的device裡面有個叫_GPE就是通知OS, EC的GPE event是對應GPE register哪一個bit.
至於NB的EC不像DT的8042只負責處理KB & MS. 妳應該問你們EC工程師的是, 傳 Qxx,這個值
的意義是什麼? 比如說是溫度過高? LID的偵測? 還是AC插入要充電的通知?
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/10 下午 05:32:48
前面幾點 H 已經回答的很清楚了,所以我對第4點作個說明

>4. ASL 有宣告EC Command Port的位址, OS是透過他去得到EC RAM裡面的QXX嗎?
> 如果是Q event, OS應該會去EC RAM裡面讀取QXX,然後執行Method(_QXX),所以我自>己猜測OS應該會透過'某種管道'去EC RAM讀取資料, 對嗎?

所謂的 Qxx event 是 OS 在收到 EC 的 SCI 後, 會下 84h 到 Port66h, 然後從 Port62h,
得到一個值, 這個值就叫作 Q event 的 number, 也就是你在 EC 的 asl code 堿搢鴘
_Qxx(), 那何時會發 Q event呢, 例如 AC 的插拔, 各 hot key 按下, Lid 被按下等, 至於
EC RAM 的資料要放什麼是由 EC 和 BIOS 自己作決定, 例如現在 battery status, Lid
status等, 若你要將 Q event 放到 EC RAM 也可以, 不過對 OS 來說沒有任何幫助
至於你提到 EC engineer 將一個 number 放到 EC RAM , 他指的 EC RAM 和 ACPI
指的 EC RAM 應該不是同一個地方, 當 EC 要發 SCI 時, 是將 Q event 的號碼放到
EC 自己身上的 RAM 的某一個位置後, EC 的 code 就會主動作後績的動作了

作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/10 下午 05:38:50
>我問過EC Enginner 他們說如果是Q Event
>,EC只是將QXX(一個QXX的值,從>Q00h~QFFh)
>放到固定的EC RAM裡面,然後接著把接到南橋的GPIO那隻接腳的電位改變
>EC就只做這兩個動作而已,而EC改變了SCI電位只會使南橋的GPE0_STS
>對應的bit被設定成1 (bit 16~bit 31其中一隻,看使用了那一隻GPIO接到EC)
>,如果對應的GPE0_EN bit也是被設定成1的時候,南橋就會產生一個SCI訊號
>,但是我找不到誰會去設定 GPE0_EN bit,且南橋SCI訊號發出去之後OS如何知道?

另一個問題誰會去設定 GPE0_EN bit, 在你的 EC asl code ,
一定會宣告一個 Name (\_GPE, 0x??), 這奡N告訴 OS 你的 EC 是用
那根 GPIO 和 OS 用 SCI 作溝通, 所以你也不用手動去把它 enable
OS 會自己去把它 enable

作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/21 上午 08:08:33
我大致整理了一下前輩所說的重點:

_GPE是ACPI 定義的一個name space. 是定義general event的區域, 也就是說在HW的 GP register裡面的對應,就是落在 _GPE的scope裡面, _L00就是代表 bit 0, 以此類推. 至於event的硬體反應就是 level & edge兩種. 至於_Qxx是針對EC的query code.跟_Lxx 和_Txx意義是不同的.

所謂的 Qxx event 是 OS 在收到 EC 的 SCI 後, 會下 84h 到 Port 66h, 然後從 Port 62h,得到一個值, 這個值就叫作 Q event 的 number, 也就是你在 EC 的 asl code 堿搢鴘滿A_Qxx()

那何時會發 Q event呢, 例如 AC 的插拔, 各 hot key 按下, Lid 被按下等, 至於EC RAM 的資料要放什麼是由 EC 和 BIOS 自己作決定

另一個問題誰會去設定 GPE0_EN bit, 在你的 EC asl code ,一定會宣告一個 Name (\_GPE, 0x??), 這奡N告訴 OS 你的 EC 是用,那根 GPIO 和 OS 用 SCI 作溝通, 所以你也不用手動去把它 enable,OS 會自己去把它 enable。

在PC, SCI可以設定連接到8259. 去產生IRQ.

這邊我還有一個問題就是當產生了IRQ後會跳到OS ACPI Driver處理Event code的地方來判斷是目前是哪一種Event觸發了SCI,然後去執行相對應的ASL Method,所以我的問題是:

HW觸發 SCI 接腳(接在南橋可以產生SCI的pin 上面)-->南橋產生 IRQ--> CPU 處理IRQ Service--> 這個Service也就是 OS ACPI Driver,用來處理相關Event ,像是執行ASL Code之中的某個Method
 
那麼GPE0_EN bit應該是OS載入ACPI Table(Ex:DSDT)的階段就要去設定好的(ACPICA文獻上說OS載入階段會去分析ACPI Table),這樣說對嗎? 因為GPE0_EN bit=1才會讓南橋發出SCI,才會產生IRQ…所以應該是屬於OS 載入階段就有去分析ASL Code然後把該要設定的Enable bit就設定起來了,例如EC裡面宣告Name(_GPE,0x??)我這樣說對嗎? 如果我的說法是對的,那麼對於其他的GPE bit x 所對應的Enable bit 也是相同道理,應該是OS載入階段去參考PM1x_BLK...等裡面的設定去把它(EN_bit)設定起來的囉?

這樣問好像有點雞生蛋蛋生雞的問題@@ ,因為ICH8 EDS 說: 對應的Enable bit=1才會使南橋發SCI , 而ASL code 是OS去分析與執行,所以應該是OS先知道有人經由SCI要OS處理一些服務(經由SCI產生IRQ),才會去處理ASL Method,而不是OS 處理ASL code時,看到宣告成Name(_GPE,0x??)才去設定EN_bit, 希望前輩能為我解惑,感恩喔!
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/24 下午 06:34:19
\_GPE 至少有二種解釋(因為我只熟這二種,其它的就有勞另外的高手來說明了),

1. Wake up的使用,
當有 device 宣告 _PRW 時, 就需要宣告相對應的 \_GPE method 來處理 resume
的事宜, 例如 Device(SLPB) 下, 有個 Name(_PRW,package(2) { 1, 4}),
代表這個 device 可以透過 GPE0 bit 1 從 S4 wake up,因此就要有 Method(L01) 這個
method 宣告在 \_GPE 的 scope 之下, 因為這個 GPE 是拿來 wake up 用的, 所以在
平時 enable bit 並不會打開,而是當系統要進入 suspend 時, 會 check 所有宣告 _PRW
的 device 後,再打開需要打開的 GPE,所以當你在 windows 下去看這個 bit 會是關掉的.


2. 一般的使用,
就是例如 EC 或其它的 device 在 runtime 也要和 os 作溝通的話, 就宣告一個 Name(\_GPE, 0x05), 這個 object, 如此 OS 的 ACPI driver 在分析完所有的 ASL code 後,
就會自己去打開對應的 enable bit.


任何一個 GPE 正常情況下只能作一種用途,也就是你的 _PRW 有用到的 GPE bit 不可拿來
給其它 device 宣告成 \_GPE, 若相衝的話, 嘿嘿, 自己試試看囉
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/25 下午 04:11:37
>\_GPE 至少有二種解釋(因為我只熟這二種,其它的就有勞另外的高手來說明了),
其實用法還有很多, 以前產生SMI做的事情, 很多其實也可以改成用SCI來做, 只是有些東西需要靠driver來搞定. 所以就台灣廠商而言, 幾乎沒辦法做.
靠MS內建driver, 我只知道thermal zone. 這個也是run-time的, 包括 shutdown, FAN control . thermal throttling, 如果要及時反應.都是要依靠SCI然後去notify _TZ

>1. Wake up的使用,
>當有 device 宣告 _PRW 時, 就需要宣告相對應的 \_GPE method 來處理 resume
>的事宜, 例如 Device(SLPB) 下, 有個 Name(_PRW,package(2) { 1, 4}),
>代表這個 device 可以透過 GPE0 bit 1 從 S4 wake up,因此就要有 Method(L01) 這個
>method 宣告在 \_GPE 的 scope 之下, 因為這個 GPE 是拿來 wake up 用的, 所以在
>平時 enable bit 並不會打開,而是當系統要進入 suspend 時, 會 check 所有宣告 _PRW
>的 device 後,再打開需要打開的 GPE,所以當你在 windows 下去看這個 bit 會是關掉的.
>
其實, _Lxx跟_PRW 應該在DSDT ot SSDT 載入時, OS就已經紀錄好了. 只是什麼時候要去設定enable bit的問題. 至於這兩個在Windows下,不一定要同時存在才會設enable. 也就是說有_PRW不一定要有對應的_Lxx. 基本上我發現有 _Lxx, enable bit會永遠設著.
這跟你提到的狀況有些不同, 剛好最近有新案子, _GPE這邊寫的很有問題. 我會再檢查看看.
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/27 上午 10:04:35
>其實, _Lxx跟_PRW 應該在DSDT ot SSDT 載入時, OS就已經紀錄好了. 只是什麼時候要去設定enable bit的問題. 至於這兩個在Windows下,不一定要同時存在才會設enable. 也就是說有_PRW不一定要有對應的_Lxx. 基本上我發現有 _Lxx, enable bit會永遠設著.
>這跟你提到的狀況有些不同, 剛好最近有新案子, _GPE這邊寫的很有問題. 我會再檢查看看.
>
沒錯, _PRW 不一定要有對應的 _Lxx, 但若沒有的話, 當你在 OS suspend resume 後,可能會發生一個情況,就是系統雖然回來了,但是螢幕不會亮,要按個鍵或動個滑鼠後螢幕才會點亮,通常大部份的人都是直接在 _WAK 堨[個 notify power button 的方式來解決, 但若你的系統設成 1分鐘S3, 2分鐘S4 的話,在 S3 睡1分鐘後,系統會自動 wakeup, 但是卻不會進 S4, 因為 OS 並不知道此次 wakeup 是由 RTC 回來的, 在 _WAK 埵 notify power button 的動作, OS 會永遠以為是由 power button 來 wakeup 系統的,自然就不會作下個 S4 的動作了, 當然若你的系統不需要支援 1分鐘S3,2分鐘S4的功能的話, 直接加個 notify power button 是最簡單的方法
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/27 下午 04:21:56
>沒錯, _PRW 不一定要有對應的 _Lxx, 但若沒有的話, 當你在 OS suspend resume 後,可能會發生一個情況,就是系統雖然回來了,但是螢幕不會亮,要按個鍵或動個滑鼠後螢幕才會點亮,通常大部份的人都是直接在 _WAK 堨[個 notify power button 的方式來解決, 但若你的系統設成 1分鐘S3, 2分鐘S4 的話,在 S3 睡1分鐘後,系統會自動 wakeup, 但是卻不會進 S4, 因為 OS 並不知道此次 wakeup 是由 RTC 回來的, 在 _WAK 埵 notify power button 的動作, OS 會永遠以為是由 power button 來 wakeup 系統的,自然就不會作下個 S4 的動作了, 當然若你的系統不需要支援 1分鐘S3,2分鐘S4的功能的話, 直接加個 notify power button 是最簡單的方法


我們的作法是只有RTC wake 不做 notify power button. 這樣就可以兩全其美了.
其實monitor不會亮,這是正常的behaior, MS在WinHEC 2004, ACPI和WinHEC 2006,Vista ACPI裡面, 一直提到BIOS不應該做notify power button來點亮螢幕.只可惜這跟一般user習慣不同. 唉......
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/28 上午 09:27:10
>我們的作法是只有RTC wake 不做 notify power button. 這樣就可以兩全其美了.
>其實monitor不會亮,這是正常的behaior, MS在WinHEC 2004, ACPI和WinHEC 2006,Vista ACPI裡面, 一直提到BIOS不應該做notify power button來點亮螢幕.只可惜這跟一般user習慣不同. 唉......

MS 的建議歸建議, 實際上測試部門在測試時看到這個問題一定列 bug, 即使搬出 MS 也說服不了, 大家都是鼻子摸摸作就對了

謎之聲:怎麼討論半天變成我和 H 大在討論, 樓主都沒聲音了...........
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/30 下午 08:31:32
最近看到一個問題,就是EC 設定的那一隻GPIO (假設是GPIO1)的Enable bit設定的問題

理論上EC 的ASL Code宣告成Name(_GPE,0x11) 就是指向GPIO1 也就是說當OS分析完ASL Code之後會自動設定南橋暫存器 GPE.EN[16]=1,然後當Hot key or LID 有改變狀態時,EC改變這隻GPIO1 的狀態,此時GPE.STS[16]=1 ,然後南橋就會發出SCI然後ACPI Driver就會得到相關的Q Event Number然後去執行相關的Q Method,但是.................我利用SE 工具在WinXP底下把 GPE.EN[16]清除為0,然後一樣Hoy key or LID讓EC去改變GPIO pin狀態(GPE.STS[16]=1),理論上這個時候南橋不是應該不會發SCI嗎? 如果SCI沒發,OS也就不會去執行Q Method...但是結果是...........OS會去執行Q Method ,而且還會把我原本清除掉的GPE.EN[16]=0 設定成 GPE.EN[16]=1....所以跟前輩之前說的有點不一樣??? 所以想請問一下問題出在哪裡???
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/1 上午 08:10:00
筆誤....GPIO1 應該是GPE.EN[17] 跟GPE.STS[17] ....GPIO0 才是bit 16

作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/1 下午 04:28:35

>最近看到一個問題,就是EC 設定的那一隻GPIO (假設是GPIO1)的Enable bit設定的問題
>
>理論上EC 的ASL Code宣告成Name(_GPE,0x11) 就是指向GPIO1 也就是說當OS分析完ASL Code之後會自動設定南橋暫存器 GPE.EN[16]=1,然後當Hot key or LID 有改變狀態時,EC改變這隻GPIO1 的狀態,此時GPE.STS[16]=1 ,然後南橋就會發出SCI然後ACPI Driver就會得到相關的Q Event Number然後去執行相關的Q Method,但是.................我利用SE 工具在WinXP底下把 GPE.EN[16]清除為0,然後一樣Hoy key or LID讓EC去改變GPIO pin狀態(GPE.STS[16]=1),理論上這個時候南橋不是應該不會發SCI嗎? 如果SCI沒發,OS也就不會去執行Q Method...但是結果是...........OS會去執行Q Method ,而且還會把我原本清除掉的


妳要不要確認一下, 我以前試過,在XP下幾使用SE 把enable bit清掉. 放著一陣子OS還是會設enable bit起來.
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/5 下午 06:13:48
我重新確認過了,XP下把GPE.EN清除(填00清除),還有GPE.STS(ICH8說填FF是清除STS)掉過了一段時間後系統並不會把它們設定回去,而進去S3再把他Wakeup後,GPE.EN會被設定起來。
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/8 下午 04:25:30
追蹤的結果是
當任何 event 發了之後, ACPI 的 driver 會先收到, 接著把 EC 的 sci enable bit 設為 disable, 再來是 ACPI 的 EC driver 去 get 是什麼 event, 最後再把 EC 的 sci enable 設為 enable, 另外 ACPI 的 driver 看來每一段時間就會去 polling 是否有 event 發生,所以即使 EC 的 sci 被 disable 了, 但 ACPI 的 driver 還是 polling 的到, 並且在 service 完後,自動將 EC's SCI 打開,
因對 driver 不熟,所以沒繼續深入研究
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/11 下午 01:36:37
前輩可以教我如何像你一樣去追蹤嗎?
作者 : jc_23(掌握文武半邊天)
[ 貼文 119 | 人氣 7450 | 評價 530 | 評價/貼文 4.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/13 上午 10:16:34

用 softice 去追, 我是用 XP SP2 + DriverSuite 3.2
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/19 下午 06:22:25
嗯嗯感謝前輩教導,我會去試試看的,謝謝!
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/11 下午 06:50:37
最近發現一個奇怪的問題,想請教一下前輩

ICH8 PMBASE+04h bit0 是SCI Enable bit
0=SMI#
1=SCI

我們目前EC有接了 2 個GPIO pin 到南橋,分別config 成SCI跟SMI#
但是我發現在Windows底下的時候,EC如果透過GPIO pin(config成SMI#的那一隻)發出SMI的時候SMI還是有作用(寫了一個應用程式透過KBC Command叫EC發SMI,因為要做一些事情),但是我在Windows底下用SE去看PMBASE+04h bit 0=1.

所以請問一下前輩,那個SCI_EN bit 是不是控制全部的SCI/SMI# ? 如果是,那為什麼明明是SCI但是SMI還是有作用?
作者 : shortor_z(shortor)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/13 下午 12:01:04
好像ACPI模式下,SWSMI是可以用的。
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 上午 10:18:22
SW SMI可以用是因為它有使用了IO Trap 方式,但是我說的是HW SMI ...所以我覺得很奇怪,明明ICH8 Spec內說SCI_EN bit控制HW要發SCI/SMI 那為什麼在Windows下HW SMI 還是會發???
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 上午 10:48:29

>最近發現一個奇怪的問題,想請教一下前輩
>
>ICH8 PMBASE+04h bit0 是SCI Enable bit
>0=SMI#
>1=SCI
>
>我們目前EC有接了 2 個GPIO pin 到南橋,分別config 成SCI跟SMI#
>但是我發現在Windows底下的時候,EC如果透過GPIO pin(config成SMI#的那一隻)發出SMI的時候SMI還是有作用(寫了一個應用程式透過KBC Command叫EC發SMI,因為要做一些事情),但是我在Windows底下用SE去看PMBASE+04h bit 0=1.
>
>所以請問一下前輩,那個SCI_EN bit 是不是控制全部的SCI/SMI# ? 如果是,那為什麼明明是SCI但是SMI還是有作用?


這個問題一點不奇怪, SCI 和SMI輸出本來就是兩條不同的路, SCI_EN bit只是打開 SCI的總開關, 打開它只是確定最終的SCI會發出去.但是不代表源頭要發SCI. 這是兩碼子事.
以ICH8來說GPI 是可以自由選擇SCI or SMI, 一但選擇源頭是發SMI, chipset 的SCI開與不開根本不關這個GPI的事.


作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 上午 10:48:48

>最近發現一個奇怪的問題,想請教一下前輩
>
>ICH8 PMBASE+04h bit0 是SCI Enable bit
>0=SMI#
>1=SCI
>
>我們目前EC有接了 2 個GPIO pin 到南橋,分別config 成SCI跟SMI#
>但是我發現在Windows底下的時候,EC如果透過GPIO pin(config成SMI#的那一隻)發出SMI的時候SMI還是有作用(寫了一個應用程式透過KBC Command叫EC發SMI,因為要做一些事情),但是我在Windows底下用SE去看PMBASE+04h bit 0=1.
>
>所以請問一下前輩,那個SCI_EN bit 是不是控制全部的SCI/SMI# ? 如果是,那為什麼明明是SCI但是SMI還是有作用?


這個問題一點不奇怪, SCI 和SMI輸出本來就是兩條不同的路, SCI_EN bit只是打開 SCI的總開關, 打開它只是確定最終的SCI會發出去.但是不代表源頭要發SCI, 也不代表SMI完全被SCI取代. 這是兩碼子事.
以ICH8來說GPI 是可以自由選擇SCI or SMI, 一但選擇源頭是發SMI, chipset 的SCI開與不開根本不關這個GPI的事.
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 下午 12:30:37

>SW SMI可以用是因為它有使用了IO Trap 方式,但是我說的是HW SMI ...所以我覺得很奇怪,明明ICH8 Spec內說SCI_EN bit控制HW要發SCI/SMI 那為什麼在Windows下HW SMI 還是會發???

澄清一下
第一, SW SMI跟I/O trap是不同的東西, SW SMI 有實體的暫存器空間儲存資料. I/O trap 是個解碼觸發線路.
第二, 所有的HW都有源頭和終點. SCI_EN 設定完成,只有表示SCI的開/關完成, 不代表 SMI 的輸出被切換成 SCI. 理由就是 SW SMI 會動. 代表終點的SMI 還是能發出信號通知CPU. 就像台中往台北, 和台中往高雄是不一樣的方向. 今天台北的路就算是封閉了, 對於我台中出發要去高雄的人一點影響也沒有. 不是嗎?
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 下午 04:55:59
感謝前輩回答,受益良多!

我一直以為SW SMI 是經由IO Trap方式觸發(IO port 800h),因為我們的Code裡面可以用兩種方式去觸發SW SMI,一種是P廠商說的方式(就是前輩說的方式,不過我沒用過)另一種就是IO Trap方式(寫一個值到IO觸發),所以我一直以為SW SMI都是經由"寫一個值"到IO的方式來觸發,差別只在於是寫到B2h還是IO Trap Range(目前我看ASL Code裡面是定義在800h~8xxh)...而這兩種方式都可以透過記憶體來傳遞參數,所以我一直以為他們是一樣的......看樣子我要回去好好重新研究一下了 >.<....
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/15 下午 04:57:21
忘記問前輩一個問題,"SW SMI 有實體的暫存器空間儲存資料"指的是什麼意思? 是ICH8內的暫存器嗎?
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/1/16 上午 08:00:19
SMI 的"來源"不少...對於ACPI command port寫一個值就會產生 SMI;使用IO trap的方式也會觸發SMI(假如條件成立...);硬體也會發SMI;系統在sleep時也可以請南橋轉發一個SMI...很多的 source,但結果只有一個 : 造成 SMI(有一條 訊號, SMI#)直接通知CPU (在 intel platform)

所以,一旦 SMI 發生而進入SMM後,首要便是 check "誰造成的 SMI" (查源頭),之後便是 dispatch...最後 離開 SMI...

所謂的:"SW SMI 有實體的暫存器空間儲存資料" 指的是:這一種 SMI是由 IO write 所產生的,既然是 write,就一定有 write data ! 這個 data就可以備用來當作 task ID !也有 register可以取得這 ID ! (應該是這個意思...)
作者 : laichischang(落山風)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/22 下午 09:13:54
小弟有個疑問
_GPE是ACPI 定義的一個name space. 是定義general event的區域, 也就是說在HW的 GP register裡面的對應,就是落在 _GPE的scope裡面, _L00就是代表 bit 0, 以此類推.
至於event的硬體反應就是 level & edge兩種. 至於_Qxx是針對EC的quary code.跟_Lxx 和_Txx意義是不同的.
===================================================

L00代表bit0,這裡指的是GPIO的state bit嗎?
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/23 上午 08:01:17
不是GPIO的state bit....
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/23 上午 10:17:28

>L00代表bit0,這裡指的是GPIO的state bit嗎?
指的是 general-purpost event register的 status bit 0.
至於是否為GPIO的status bits.你必須根據FADT 裡面的 GPE0_Base or X_GPE0_Base所指到的暫存器位址, 再去查找 chipset的資料手冊才能確定是否為GPIO. 如果GPE0_Base指到的是GPIO status register, 那_L00就是GPIO 0 的status bit0. 反之則否.
作者 : laichischang(落山風)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/23 下午 12:41:31
了解,我再試試,感謝您的回答
 板主 : 徵求中
 > 組合語言 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 組合語言 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
組合語言
1 H 2220 
2 liaoo 990 
3 青衫 970 
4 牧童哥 940 
5 史努比 920 
6 qq 480 
7 GHOST-JACKY 330 
8 ]CALL-151 310 
9 harrison 300 
10 掌握文武半邊天 280 
組合語言
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.1401367