小華的部落格: SCI v.s SMI 基本概念

搜尋此網誌

星期日, 10月 28, 2007

SCI v.s SMI 基本概念

這邊大概描述一下這兩種東西的不同處(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.

Eric Yao 提到...

是否可以請問一下,那在Windows的環境下,若有SMI發生,BIOS是否收得到呢?

Harrison 提到...

可以! bios可以收的到!

Harrison 提到...

順便註解一下:

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。

Eric Yao 提到...

To Harrison,
謝謝您的回應; 不過, 我目前遇到一個問題, 就是在 post 階段及 DOS 下, 當我以一個 GPI pin來觸發 SMI 後, 執行我所須要的功能, 這是沒有問題的! 但是, 在 WinXP 下, 這個動作卻沒有被執行! 我有嘗試在 SMI handler 那邊加上一段輸出到80port的訊息, 很明顯地, 那段code並沒有被執行; 不知道是否有什麼地方是必須要注意的呢??? 麻煩了..

Harrison 提到...

1.如果你是Ixxel的Chipset,你可以檢查一下GPIO設定,確定一下是Config成SMI

2.SMI Handler是掛哪一種? 你確定你掛對event 嗎?

Eric Yao 提到...

目前已知的問題是..我們使用的該VIA Chipset在進 XP 後..會被重新 program 成 SCI pin .. 所以..就沒有搞頭了..哎..暫時無解..

哲維 提到...
作者已經移除這則留言。
哲維 提到...

版主好,大好家,最近主管要我試著加一個SwSMI到bios code裡面,剛好我的chipset跟eric兄一樣是VIA的,我目前加的這支smi可以在dos和window xp下被呼叫,不知和hardware design有沒有關系。

pdplaza 提到...

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