ACPI知识学习笔记
ACPI table之FACP(Fixed ACPI Description Table).
在代碼里面:Resources\AcpiTables\Fadt\Fadt3.0.act 定義了EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt.
列舉出比較重要且常用的幾項:
INT_MODEL, //System Interrupt ModelSCI_INT_VECTOR, //System Vector of SCI interrupt
SMI_CMD_IO_PORT, //Port Address of SMI command port
ACPI_ENABLE, //Value to write to port SMI_CMD to enable ACPI
ACPI_DISABLE, //Value to write to port SMI_CMD to disable ACPI
這些items會在AcpiPlatform.h中定義:
#define INT_MODEL 0x01#define SCI_INT_VECTOR 0x0009
#define SMI_CMD_IO_PORT 0x00B0 //For AMD
#define ACPI_ENABLE 0xA0
#define ACPI_DISABLE 0xA1
如果研究ACPI的規范,就會發現,當ACPI_EN起來,系統就會發SCI而不是SMI。那為什么?具體的流程是什么樣子的?
其實,讓ACPI ENABLE起來的動作是最后一號SMI來做的。通過向B0 端口下0xA0,就會調用到一個SMI的Callback function,這個函數最后把SCI enable。
接著又有一個問題,SCI的產生,OS是怎么知道的呢?CPU怎么會去執行SCI呢?
插入一個概念,當一個SMI發出來,CPU上的一個關于SMI的pin會被觸發,CPU會進入SMM。而SCI其實是通過配置成APIC,產生IRQ。我的理解是,在上面所述的Callback函數里面,會將SCI對應到IRQ 9。之后SCI INT的信息就被存在ACPI FADT table里面,即定義的SCI_INT_VECTOR。這樣OS就可以通過FADT獲得SCI所使用的中斷號碼,這樣就能在SCI產生時處理該中斷。
這里插入一段我對Qxx的大概理解:
? 當AC IN/OUT, LID CLOSE/OPEN, HOTKEY PRESS等事件發生時,KBC/EC會偵測到。隨即,它會觸發南橋的EC_SCI pin(這邊可以解釋為什么OS知道這是EC發出的SCI),南橋就會觸發一個SCI,OS會收到這個SCI,并且去查詢Qxx的number(通過向EC下達84h命令,讀取EC RAM某個地方的value,這個value就是number),最后asl code會調用相關的Qxx執行。
轉載于:https://www.cnblogs.com/cffx-chu/archive/2011/08/09/2132119.html
總結
以上是生活随笔為你收集整理的ACPI知识学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE6下z-index犯癫不起作用bug
- 下一篇: 高级SQL注入拿shell,一般黑客不知