日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACPI知识学习笔记

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 Model
SCI_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知识学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。