SMI#、SCI#信號在OS、BIOS、EC中的中斷方式(Linux)


EC資料有個很好的CSDN博客推薦去看看:zhao_longwei的專欄

EC固件代碼架構:https://blog.csdn.net/zhao_longwei/article/details/51010544

PCI/PCIE MSI#中斷:https://blog.csdn.net/pwl999/article/details/78208151

Linux內核推薦:https://blog.csdn.net/pwl999/article/details/78817899#comments

關於SMI、MSI、SCI、INTx各種中斷小結:https://blog.csdn.net/huangkangying/article/details/11178425

http://www.aiuxian.com/article/p-1103653.html

推薦博客:我所知道的EC====>KBSMI&KBSCI:http://www.aiuxian.com/article/p-1090092.html

小弟是學硬件的,苦苦修行中,

SCI VS SMI

SCI:System Control Interrupt, 系統控制中斷。專門用於ACPI電源管理的一個IRQ,需要OS支持。

SMI:System Management Interrupt, 系統管理中斷,使用系統進入SMM的特殊中斷。

 

兩者區別:

SMI是CPU級別的,ACPI和非ACPI模式下都可以使用,而SCI是OS級別的,只有在ACPI support的OS中才能見到。比如說DOS下觸發的中斷肯定不是SCI,但有可能是SMI。

 

兩者聯系:

兩者可以用於電源管理,但SMI不限於電源管理。

 

觸發過程:

SMI:  (硬件方式)

SMI Pinassert -> CPU SMM mode -> BIOS SMI handler

SMI:(軟件方式)

WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler

SCI:

SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?

 http://www.aiuxian.com/relative/p-1103656.html

http://bbs.javaee.cc/post/289740_1_1.html

https://www.cnblogs.com/jyaray/p/7127316.html

http://www.chinafix.com/thread-1035371-1-4.html

https://blog.csdn.net/huangkangying/article/details/7918179

 

中斷信號。也可以走LPC。但是有些對時效性有要求的,就走SCI/SMI了。SMI極少用到。主要是SCI比較多。 system management interrupt 系統管理中斷 在繁忙中 請求停下來 先處理某個請求 中斷有優先權 某個級別比較高的中斷

 

 

管理信息結構SMI(structure of management information) 
  它是簡單網絡管理協議(SNMP)的一部分,指定了在 SNMP 的 MIB 中用於定義管理目標的規則。 
SMI: 系統管理中斷 System Management Interrupt 

 

SMI#:System Management Interrupt,系統管理中斷
An OS-transparent interrupt generated by interrupt events on legacy systems. By
contrast, on ACPI systems, interrupt events generate an OS-visible interrupt that is
shareable (edge-style interrupts will not work). Hardware platforms that want to
support both legacy operating systems and ACPI systems must support a way of remapping
the interrupt events between SMIs and SCIs when switching between ACPI
and legacy models.


SCI:beyond compare,系統控制中斷
A system interrupt used by hardware to notify the OS of ACPI events. The SCI is an
active, low, shareable, level interrupt.


大師說:SCI主要是在進入ACPI后,ACPI用的中斷信號。SMI一般在ACPI狀態之前使用的用來做后台中斷的東西。在ACPI后 ,SMI就自動關閉,切換到SCI的方式。
SMI少量的會在ACPI的狀態下還可以正常工作。主要是用來執行 一些超脫操作系統的特殊的代碼。
聯想當年的被美國禁用的主要原因就是SMI的問題。他的權限超過操作系統。超脫在操作系統之外

總之,功能一切正常,就是不能正常關機的。刷了BIOS換了橋還不好,查查這些吧。


PME:PCI Express Native Power Management Events control
The firmware sets this bit to 1 to grant control over control over PCI Express native power
management event interrupts (PMEs). If firmware allows the OS control of this feature, then
in the context of the _OSC method it must ensure that all PMEs are routed to root port
interrupts as described in the PCI Express Base Specification. Additionally, after control is
transferred to the OS, firmware must not update the PME Status field in the Root Status
register or the PME Interrupt Enable field in the Root Control register. If control of this
feature was requested and denied or was not requested, firmware returns this bit set to 0. 


電源管理的中斷。因為在休眠狀態下,設備的其他中斷是關閉的,只能通過這個通知系統來喚醒設備用的。設備休眠了,沒有這個信號,系統就不知道什么時候要喚醒他。就一直睡下去了。可能會整個系統都停了。

SCI與SMI的區別與聯系

SMI: System Management Interrupt,系統管理中斷,進入SMM的方法,包含(但不限於)電源管理功能,對OS透明的;

                    SMI pin觸發后,CPU進入SMM Mode,轉去執行BIOS中的SMI Handler。

                    SMI pin--> CPU SMM Mode --> BIOS routine

SCI: System Control Interrupt,系統控制中斷,是ACPI定義的,專用於ACPI電源管理的一個IRQ,需要OS支持的。

                    SCI pin觸發后,CPU去執行某個放在中斷描述表(IDT)中的程式,一般都是指向某個驅動程式(ACPI.sys),ACPI driver會通知相關的驅動程式(ACPI EC Driver),然后跟EC BIOS取得一個代碼,而這個代碼就是ASL code中的Qxx Number,接着OS會去執行相應的ASL Code,一般都是Method(Qxx)。

                   SCI pin --> OS Acpi Driver --> ASL Code (Q event) --> ? (看BIOS Spec需求)

聯系:都可以用於電源管理功能
區別:SMI是CPU級別的,ACPI和非ACPI模式下都可以用;SCI是OS級別的,只有在ACPI模式才可以用。

 
SCI只能在ACPI的OS下發出來,如果在DOS下能觸發的中斷,那肯定不是SCI,那可能是SMI。SMI同樣可以在OS下發出來。在進入ACPI的OS后,Bios把CPU的控制權交給OS,SMI還是可以發出來的。SMI大部分由硬件來issue,也可以發soft SMI,一般是在port 0B2h下command,然后在SMI Handle中加入對cmd的動作即可。

 

SCI_INT

FADT的Offset46為SCI_INT field。

它記錄了在PIC Mode下,SCI連接到8259的哪個pin(通常都是IRQ9);在APIC Mode下,它記錄了SCI interrupt的Global System interrupt number。

如果在PIC Mode下SCI連接到IRQ9,而在APIC Mode下IRQ9連接到INTIN11,則在FADT中SCI_INT為9, MADT中interrupt resource override entry mapping 將IRQ9 mapping到INTIN11。

 

如何把SCI_INT從IRQ9改成IRQ11?

三個地方要改:

1. SCI IRQ Select(D31:F0:R44h bit[2:0])由000h(IRQ9)改成010h(IRQ11)

2. FADT中SCI_INT 由9改成11

3. MADT中interrupt resource override entry, Source 0x09; GSI:由0x09改成0x0B

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM