天天看點

ACPICA User Guide and Programmer Reference 翻譯6

3.設計詳述

          本小節包含适用于ACPICA子系統兩大部分的概念,資料類型和資料結構。

3.1 ACPI命名空間基礎

        ACPI命名空間是一個大的資料結構,它是由ACPICA子系統建立和管理的。它是根據DSDT表建立的,命名空間是一個由ACPI對象組成的分層結構。

3.1.1 對象

        每一個在命名空間中的對象都有一個4位元組長的名字。根節點使用反斜杠作為路徑名的第一個字元。路徑名是以多個4位元組長的對象名組成,這些對象名字使用“.”作為分隔符。

3.1.2Scopes

        Scope這個概念直接與ASL相關,ASL會對對象進行定義和描述。對象的Scope被定義為緊跟着對象後的花括号内的内容。換句話說,一個對象的Scope是這個對象的子對象的容器。

        在ACPICA的很多接口中,定義一個表示這一個容器的Scope參數會很友善。比如說,當将一個ACPI名字轉換為對象handle的時候需要兩個參數,名字本身和包含名字的Scope。當在Scope中發現比對到名字的對象,這個對象的handle将會被傳回。

3.1.2.1命名空間的Scopes、名字和對象的例子

        下面的ASL代碼中,對象_GPE的scope包含對象_L08和_L0A

Scope (\_GPE)

{

         Method (_L08)

         {

                 Notify (\_SB.PCI0.DOCK, 1)

         }

         Method (_L0A)

        {

                 Store (0, \_SB.PCI0.ISA.EC0.DCS)

        }

}

        在本例中存在三個ACPI命名空間對象,詳細說明如下:

                三個對象的名字是_GPE,_L08和_L0A.

                父對象_GPE的子對象為_L08和_L0A.

                對象_L08的絕對路徑名(完整的路徑名)是“\_GPE._L08”.

               對象_GPE的scope包含對象_L08和_L0A.

              控制方法_L08和_L0A的scope中包含可執行的AML代碼.

              包含對象_L08的scope為_GPE的scope.

              對象_GPE為對象_L08和_L0A的父對象。

              對象_L08和_L0A的類型都是ACPI_TYPE_METHOD.

              對象_L08的下一個對象(兄弟對象)是對象_L0A.在本例的_GPE的scope中對象_L0A後沒有其他的對象.

        由于對象_GPE是處于根這一層下的一個命名空間對象(如對象名字前的斜杠所示),它的父對象是根對象,包含它的scope是根的scope。

3.1.3預定義對象

        在初始化ACPICA子系統内部命名空間的時候,有幾個預定義的對象,它們總是會被注冊并被安裝到命名空間中,不管它們出現在哪一個被裝載的ACPI表中。這些對象和它們所屬的類型如下所示。

“_GPE”, ACPI_TYPE_ANY // General Purpose Event block

“_PR_”, ACPI_TYPE_ANY // Processor block

“_SB_”, ACPI_TYPE_ANY // System Bus block

“_SI_”, ACPI_TYPE_ANY // System Indicators block

“_TZ_”, ACPI_TYPE_ANY // Thermal Zone block

“_REV”, ACPI_TYPE_NUMBER // Supported ACPI specification revision

“_OS_”, ACPI_TYPE_STRING // OS Name

“_GL_”, ACPI_TYPE_MUTEX // Global Lock

“_OSI”, ACPI_TYPE_METHOD // Query OS Interfaces

3.1.4命名空間的邏輯分布

        下圖表示預定義對象和_GPE的scope被加入後,命名空間的邏輯分布。

ACPICA User Guide and Programmer Reference 翻譯6