ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 5 章

    • 总览
    • 5.1. 系统描述表架构概述
    • 5.2. ACPI 系统描述表
      • 5.2.1. 保留位和字段
      • 5.2.2. 兼容性
      • 5.2.3. 地址格式
      • 5.2.4. 通用唯一标识符 (UUID)
      • 5.2.5. 根系统描述指针 (RSDP)
      • 5.2.6. 系统描述表头
      • 5.2.7. 根系统描述表 (RSDT)
      • 5.2.8. 扩展系统描述表 (XSDT)
      • 5.2.9. 固定 ACPI 描述表 (FADT)
      • 5.2.10. 固件 ACPI 控制结构 (FACS)
      • 5.2.11. 定义块
      • 5.2.12. 多个APIC描述表(MADT)
      • 5.2.13. 全局系统中断
      • 5.2.14. 智能电池表 (SBST)
      • 5.2.15. 嵌入式控制器启动资源表 (ECDT)
      • 5.2.16. 系统资源关联表 (SRAT)
      • 5.2.17. 系统局部性信息表 (SLIT)
      • 5.2.18. 更正平台错误轮询表 (CPEP)
      • 5.2.19. 最大系统特性表 (MSCT)
      • 5.2.20. ACPI RAS 功能表 (RASF)
      • 5.2.21. 内存电源状态表 (MPST)
      • 5.2.22. 启动图形资源表 (BGRT)
      • 5.2.23. 固件性能数据表 (FPDT)
      • 5.2.24. 通用定时器描述表 (GTDT)
      • 5.2.25. NVDIMM 固件接口表 (NFIT)
      • 5.2.26. 安全设备 (SDEV) ACPI 表
      • 5.2.27. 异构内存属性表(HMAT)
      • 5.2.28. 平台调试触发器表 (PDTT)
      • 5.2.29. 处理器属性拓扑表 (PPTT)
      • 5.2.30. 平台健康评估表 (PHAT)
    • 5.3. ACPI 命名空间
    • 5.4. 定义块编码
    • 5.5. 控制方法和 ACPI 源语言 (ASL)
      • 5.5.1. ASL 报表
      • 5.5.2. 控制方法执行
        • 5.5.2.1. 论点
        • 5.5.2.2. 方法调用约定
        • 5.5.2.3. 局部变量和本地创建的数据对象
        • 5.5.2.4. 进入运营区域
          • 5.5.2.4.1. 运营地区
          • 5.5.2.4.2. CMOS 协议
          • 5.5.2.4.3. PCI 设备 BAR 目标协议
          • 5.5.2.4.4. 声明IPMI运营区域
          • 5.5.2.4.5. 声明 GeneralPurposeIO 操作区域
          • 5.5.2.4.6. 声明 GenericSerialBus 操作区域
            • 5.5.2.4.6.1. 声明 GenericSerialBus 字段
            • 5.5.2.4.6.2. 声明和使用 GenericSerialBus 数据缓冲区
            • 5.5.2.4.6.3. 使用通用串行总线协议
          • 5.5.2.4.7. 声明PCC运营区域
    • 5.6. ACPI 事件编程模型
      • 5.6.1. ACPI 事件编程模型组件
      • 5.6.2. ACPI 事件类型
      • 5.6.3. 固定事件处理
      • 5.6.4. 通用事件处理
      • 5.6.5. GPIO 信号 ACPI 事件
      • 5.6.6. 设备对象通知
      • 5.6.7. 设备类特定对象
      • 5.6.8. 对象、方法和资源的预定义ACPI名称
      • 5.6.9. 中断信号ACPI事件
      • 5.6.10. 使用设备 _PRW 对象管理唤醒事件
    • 5.7. 预定义对象
    • 5.8. 系统配置对象

5.6.5. GPIO 信号 ACPI 事件

在硬件缩减的 ACPI 平台上,当 OSPM 接收到 GPIO 中断时,可以发出 ACPI 事件信号,并且 GPIO 中断连接列在 GPIO 控制器设备的 _AEI 对象中。 OSPM声明所有此类GPIO中断,并将它们映射到ACPI事件模型所需的适当事件方法。

5.6.5.1. 声明GPIO 控制器设备

GPIO控制器被建模为命名空间中的设备,至少具有 _HID 或 _ADR 和 _CRS 对象。 (可选)GPIO控制器设备范围可以包括 GeneralPurposeIO OpRegion 声明(第 5.5.2.4.5 节)和GPIO中断到ACPI事件映射(第 5.6.5.2 节)。请注意,对于 GPIO 信号的 ACPI 事件,相应的事件方法(例如 _Exx、_Lxx 或 _EVT)也必须出现在目标 GPIO 控制器的作用域中。对于大于 255 (0xFF) 的 GPIO 事件编号,使用 _EVT 方法。

GPIO控制器上的每个引脚都有一个配置(例如电平敏感中断、去抖输入、高驱动输出等),这些配置在GPIO中断中的OSPM或GPIO、IO中描述为外围设备占用或在操作区域访问中使用的连接资源。

5.6.5.2. GPIO 信号事件的 _AEI 对象

_AEI 对象将那些应由OSPM处理的GPIO中断指定为ACPI事件(参见第 5.6.5 节)。该对象出现在GPIO控制器设备的范围内,其引脚将用作GPIO信号事件。

参数:

无

返回值:

仅包含GPIO中断连接描述符的资源模板缓冲区。

示例:

Device (\_SB.GPI2)
{
  Name(_HID, "XYZ0003")
  Name(_UID, 2)                     //Third instance of this controller on the platform
  Name(_CRS, ResourceTemplate ()
  {                                 //Register Interface
    MEMORY32FIXED(ReadWrite, 0x30000000, 0x200, )  //Interrupt line (GSIV 21)
    Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {21}
  })
  Name(_AEI, ResourceTemplate ()
  {                                 //Thermal Zone Event
    GpioInt(Edge, ActiveHigh, Exclusive, PullDown, , " \\\_SB.GPI2") {14}
                                    //Power Button
    GpioInt(Edge, ActiveLow, ExclusiveAndWake, PullUp, , " \\\_SB.GPI2") {36}
  })
}

5.6.5.3. 用于处理 GPIO 信号事件的事件 (_EVT) 方法

GPIO 中断连接描述符为GPIO 引脚分配一个与控制器相关的、基于 0 的引脚编号。 GPIO 引脚编号可以大至 65、535。 GPIO 平台分配用于发送 ACPI 事件信号的中断连接列在 GPIO 控制器下的 _AEI 对象中。由于GPIO中断连接描述符还提供了与事件关联的中断模式,因此它为OSPM提供了调用该事件的处理程序方法所需的所有信息。无需命名约定即可对事件的模式和引脚号进行编码。相反,GPIO信号事件的处理程序只需具有众所周知的名称并将事件的引脚号作为参数即可。该方法的单个实例处理给定GPIO控制器设备的所有ACPI事件。

对于 GPIO 信号事件,使用事件 (_EVT) 方法。 _EVT 定义如下:

参数(1):

Arg0 - 事件编号。一个整数,指示当前事件的事件编号(控制器相对于零的GPIO引脚编号)。必须在 0x0000 - 0xffff 范围内。

返回值:

无

描述:

_EVT 方法处理 GPIO 信号事件。它必须出现在GPIO控制器设备的范围内,该设备的引脚用于发出事件信号。

OSPM 处理 GPIO 信号事件,如下所示:

  • GPIO中断由OSPM处理,因为它列在GPIO控制器下的_AEI对象中。

  • 当事件触发时,OSPM 根据其模式处理中断并调用 _EVT 方法,向其传递事件的引脚号。

  • 从此时起,处理与 GPE 的处理完全相同。 _EVT 方法在适当的设备上执行 Notify(),并使用 OS 特定的机制来通知驱动程序该事件。

  • 对于小于 255 的事件编号,可以使用 _Exx 和 _Lxx 方法代替。在这种情况下,它们优先,并且 _EVT 将不会被调用。

注意事项

对于小于 255 的事件号,可以使用 _Exx 和 _Lxx 方法。在这种情况下,它们优先,并且 _EVT 将不会被调用。

示例:

Scope (\_SB.GPI2)
{
  Method (_EVT,1) { // Handle all ACPI Events signaled by GPIO Controller GPI2
    Switch (Arg0)
    {
      Case (300) {
        …
        Notify (\_SB.DEVX, 0x80)
      }
      Case (1801) {
        …
        Notify (\_SB.DEVY, 0x80)
      }
      Case (14…) {
        …
        Notify (\_SB.DEVZ, 0x80)
      }
      …
    }
  } //End of Method
} //End of Scope
Prev
5.6.4. 通用事件处理
Next
5.6.6. 设备对象通知