這邊大概描述一下這兩種東西的不同處(BIOS 觀點):
SMM is entered via the SMI (system management interrupt).
SMI - System Managment interrupt
SCI - System Control interrupt
由上面字義的解釋可以得知幾件事情:
1. SMI pin 觸發後會使CPU 進入SMM Mode,而BIOS會把某些程式碼放在SMM 所在位置(SMRAM)
所以簡單說就是SMI pin 觸發後,CPU會去執行BIOS中的某個程式碼,至於是哪段程式碼,就要看BIOS註冊了哪個Functon。
SMI pin--> CPU SMM Mode --> BIOS routine
2. SCI pin 觸發後是系統OS 接手後面的事情。 所以SCI觸發後,CPU會去執行某個放在中斷描述表中的程式(IDT),一般都是指向某個驅動程式(ACPI.sys )。
所以簡單說就是當SCI pin 觸發後,ACPI driver會通知相關的驅動程式(ACPI EC Driver),然後跟EC BIOS取得一個代碼,而這個代碼就是ASL Code中的Qxx Number ,接著OS 會去執行某一段ASL Code ,一般都是Method(Qxx)。至於Method(Qxx) 內要做什麼事情就要看一些BIOS Features Spec的定義。
SCI pin --> OS Acpi Driver --> ASL Code (Q event) --> ? (看BIOS Spec需求)
結論:
IA32架構中,EC Chipset會連接 2 pins(SCI/SMI)到I/O Control Host ,接著當EC 去拉這兩根pin的電位的時候(Low/High active) 南橋會告知CPU 處理後續動作(進入SMM Mode執行某段BIOS Code或是執行OS內的ACPI Driver),接著後續的動作就如同你們在BIOS 程式碼中看到的部份。
至於詳細設定資料請參考ACPI Spec、ICH Spec與IA32 Spec SMM Mode章節所描述,這部份是屬於經驗累積,江湖一點訣點破就不值錢 ^^b。
另外,為何要用SCI/SMI 則是在IA32 系統發展史中有說明,如果有興趣的人可以從APM/ACPI 歷史開始看。
11 則留言:
SMI的基本設計是來無影去無蹤, 用來欺瞞作業系統. 作業系統只知道有一斷食空瓶空消失了.
通常用來修復系統的缺陷.
SCI, 只是一個IRQ而已, 沒有什麼特別厲害的地方. 只是ACPI OS指定來做house keeping的中斷. 他甚至可以跟他PCI devic分享使用.
主要用於system timer, ACPI GPE0 event.
是否可以請問一下,那在Windows的環境下,若有SMI發生,BIOS是否收得到呢?
可以! bios可以收的到!
順便註解一下:
SMI#訊號被觸發的來源有很多種,我文章中說的只是其中一種(EC去拉某支pin使ICH去觸發SMI#訊號)
只要cpu被告知要進入SMM Mode時,cpu就會切換工作模式。
所以一般cpu工作模式"我自己的分類"就是:
1.Real/Protected mode (CPU正在執行os的程式碼,或是os載入的AP的程式碼)
2.SMM Mode (CPU執行Bios程式碼)
這種"感覺"很像是中斷概念,CPU暫停了os,然後去執行了一段bios code之後又回到os。
To Harrison,
謝謝您的回應; 不過, 我目前遇到一個問題, 就是在 post 階段及 DOS 下, 當我以一個 GPI pin來觸發 SMI 後, 執行我所須要的功能, 這是沒有問題的! 但是, 在 WinXP 下, 這個動作卻沒有被執行! 我有嘗試在 SMI handler 那邊加上一段輸出到80port的訊息, 很明顯地, 那段code並沒有被執行; 不知道是否有什麼地方是必須要注意的呢??? 麻煩了..
1.如果你是Ixxel的Chipset,你可以檢查一下GPIO設定,確定一下是Config成SMI
2.SMI Handler是掛哪一種? 你確定你掛對event 嗎?
目前已知的問題是..我們使用的該VIA Chipset在進 XP 後..會被重新 program 成 SCI pin .. 所以..就沒有搞頭了..哎..暫時無解..
版主好,大好家,最近主管要我試著加一個SwSMI到bios code裡面,剛好我的chipset跟eric兄一樣是VIA的,我目前加的這支smi可以在dos和window xp下被呼叫,不知和hardware design有沒有關系。
SCI interrupt is not only for EC, other resources also generate SCI through ACPI GPE0 block right? In that case how OS handles the SCI interrupt?
@pdplaza in that case it uses _Lxx or _Exx
張貼留言