http://root.public.blog.163.com/blog/static/31428336200871102434887/
ACPI 體系中的重要名詞
DSDT: DSDT 稱做 Differentiated Definition Block,存在於 BIOS 中,並與當前的硬件平台兼容,提供了系統的硬件特性(例如某些設備的內部暫存器和儲存器)的應用策略和配置,在系統初始化的時候,DSDT 被當前系統啟動時初始化到namespace中。
FADT:Fixed ACPI Description table,FADT 中包含了 ACPI 的硬件寄存器組(GPE)的應用和配置(包含它們的硬件地址)也包括DSDT表的硬件地址。
ACPI Namespace: 對ACPI層來說,記憶體維持了一個目錄形式,指向每個設備及 GPE 的 namespace,這個 namespace structure 在初始化的時候由 DSDT 創建,namespace structure 可以透過 loadtable 方法從 BIOS 中載入 DSDT 改變,而每個設備在 ACPI 層中都被描述成一個對象,包含有對這個設備特性和操作策略的描述列表,系統所有類型設備都是保存在同一個 namespace structure 下。在 ACPI OS 層上調用 _ADR 來獲得 Namesapce 的設備名,Namespace 的例子見例 1-1:
OSPM(OS-directed Power Management):OSPM 操作系統支援 ACPI 的一個部分,操作系統(OS)可以從操作系統下驅動程序的角度控制 ACPI 子模組,同時支持 ACPI 包括 SCI 中斷,設備事件,系統事件模式,這些事件模式可以充分支持 Hot-plug 方式。
SCI 中斷:(System Control Interrupt) 系統控制中斷,SCI 中斷是一種源自 ACPI 相容晶片系統中斷,系統映射不同的 ACPI 事件中斷向量以便共享此中斷,當底層硬體產生 SCI 中斷的時候(例如設備插入事件引發中斷),根據通知 OSPM 層處理相對應的 ACPI 事件,OSPM 層會調用預先安裝的中斷。
GPE Block Device 和 GPE 事件:GPE Block Device 是平台設計者可按照 FADT(Fixed ACPI Descriptor Table) 描述表中對應 GPE 的暫存器組及 GPE 的輸入 pin。GPE 設備描述塊中的地址存在於 FADT 中,每個 GPE Block Device 可以容納 128 個 GPE 事件,ACPI 層上提供兩個通用目標暫存器組–GPE0_BLK 和 GPE1_BLK,(也就是說可以響應 256 個 GPE 事件)每個暫存器組中包含兩個等長度的暫存器 GPEx_STS,GPEx_EN,他們的系統地址(硬體地址)都保存在 FADT 中,作為 GPE Blocks 的行為(或者是操作),描述部分存在 ACPI name space 中,用於指示當前的設備的事件,例如設備插入/拔除事件發生的時候,相關的狀態(GPEx_STS中,硬件設計的時候相關設備的事件信號會連接到對應的狀態位置)會被外部的事件所設,生成 SCI,讓 OSPM 層運行相關的 control method 通知 ACPI 層;GPEx_EN 表示每個事件是否可用,一般說來在南橋(ICH4)中有這幾個暫存器,它們的硬體位址保存在 FADT 中。
GPE 事件就是通過 GPE 暫存器組引發 SCI 中斷後,通知 OSPM 層有關設備的事件,例如下面介紹 Hot-Plug 的時候會詳細或者簡略地介紹到總線枚舉,設備檢查,設備喚醒,設備彈出幾個事件。
ACPI” Source Language(ASL):ASL 語言是 ACPI 層描述特定的 ACPI 對象的 ACPI 專用語言,並且包括了 ACPI 對象的控制方法(Control method),OEM 廠商和 BIOS 設計者在 BIOS 中使用 ASL 定義所有的設備為 ACPI 對象,並且可以生成 ASL 格式的專門的控制方法,1-1 例就是關于 ASL 的例子:
ASL 的語法規參看 ACPI Specification Revision 2.0
AML 和 AML 分析器:AML 是 ACPI 控制方法的虛擬機器語言,AML 執行過程也就是 ACPI 核心驅動層,ACPI 控制方法使用 AML 來進行編寫,但是通常而言對編寫者來說是寫成 ASL 的方式,通過 AML 翻譯器進行翻譯,AML 翻譯器不但具備 ASL 的翻譯的功能,而且可以執行 AML 方法,當用 ASL 編寫的 DSDT 表被載入到名字空間的時候,將會被 AML 翻譯器翻譯成執行時候可以辨別的機器碼,例如關鍵字 SCOPE 在進入 AML 編譯器之前中是以一個 ACSII 編碼保存在 DSDT 中,但 DSDT 被載入名字空間之后將變成 0×10 的單字節數值(AML 操作值為 ScopeOP)。對 AML 的編譯過程和轉換方式,ASL 中的關鍵字可以參看 ACPI Specification Revision 2.0 中 section 17 。
沒有留言:
張貼留言