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.9. 中断信号ACPI事件

ACPI 6.1 引入了在 OSPM 接收到中断时生成 ACPI 事件的支持,并且该中断列在通用事件设备 (GED) _CRS 对象中。 OSPM声明所有此类中断,并将它们映射到ACPI事件模型所需的适当事件方法。

5.6.9.1. 声明通用事件设备

通用事件设备 (GED) 被建模为命名空间中的设备,其 _HID 定义为 ACPI0013。 GED还必须提供一个 _CRS 和 _EVT 对象,用于声明中断并将其映射到ACPI事件,如下节所述。平台声明支持GED,并通过_OSC方法查询OS是否支持,参见第6.2.11.2节。

5.6.9.2. _CRS 中断信号事件对象

_CRS 对象将那些应由OSPM处理的中断指定为ACPI事件。该对象出现在GED的范围内,其中断源将用作中断信号事件。

参数:

无

返回值:

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

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

示例:

Device (\_SB.GED1)
{
  Name(_HID,"ACPI0013")
  Name(_CRS, ResourceTemplate ()
  {
    Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {41}
    Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {42}
    Interrupt(ResourceConsumer, Level, ActiveHigh, ExclusiveAndWake) {43}
  })
  …
} //End of Scope

5.6.9.3. 用于处理中断信号事件的事件 (_EVT) 方法

平台分配给ACPI事件信号的中断列在GED设备下的_CRS 对象中。由于中断描述符还提供与事件关联的中断模式,因此它为OSPM提供了调用事件处理程序方法所需的所有信息。该方法的单个实例处理给定GED的所有ACPI事件。

  • 请参阅第 5.6.4 节OSPM处理事件的要求(步骤 1-5)。

对于中断信号事件,使用事件 (_EVT) 方法。

_EVT 定义如下:

参数:(1)

Arg0 - 事件编号。一个整数,指示当前事件的事件编号(GSIV编号)。必须在 0x00000000 - 0xffffffff 范围内。

返回值:

无

描述

_EVT 方法处理中断信号事件。它必须出现在GED的范围内,其中断用于发出事件信号。

OSPM 按如下方式处理中断信号事件:

  • 中断由OSPM处理,因为它列在GED下的_CRS 对象中。

  • 当事件触发时,OSPM 根据其模式处理中断并调用 _EVT 方法,并向其传递事件的中断号。对于电平中断,_EVT 方法中的ASL必须负责清除设备上的中断。

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

例子 :

设备(_SB.GED1) { Name(_HID,"ACPI0013") Name(_CRS, ResourceTemplate () { Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) {41} Interrupt(ResourceConsumer, Edge, ActiveHigh, Shared) {42} Interrupt(ResourceConsumer, Level, ActiveHigh, ExclusiveAndWake) {43} } Method (_EVT,1) { // Handle all ACPI Events signaled by the Generic Event Device(GED1) Switch (Arg0) // Arg0 = GSIV of the interrupt { Case (41) { // interrupt 41 Store(One, ISTS) // clear interrupt status register at device X // which is mapped via an operation region Notify (_SB.DEVX, 0x0) // insertion request } Case (42) { // interrupt 42 Notify (_SB.DEVX, 0x3) // ejection request } Case (43) { // interrupt 43 Store(One, ISTS) // clear interrupt status register at device X // which is mapped via an operation region Notify (_SB.DEVX, 0x2) // wake event } } } //End of Method } //End of GED1 Scope Device (_SB.DEVX) { … Name(_PRW,Package() { Package(2){ // EventInfo \_SB.GED1, // device reference 0x2 // event (zero-based CRS index) = 2 (maps to interrupt 43) }, 0x03, // Can wake up from S3 state PWRA // PWRA must be ON for DEVX to wake system }) … } //End of DEVX Scope

5.6.9.4. GED 唤醒事件

中断信号事件的一个重要用途是实现设备唤醒事件。基于中断的唤醒事件在第 4.1.1.2 节中描述。请注意,与该唤醒事件关联的中断必须能够根据 _CRS 对象下列出的扩展中断资源描述符进行唤醒。

考虑上一节中的ASL示例,请注意映射到DEVX唤醒事件的中断是可唤醒的。中断信号ACPI事件编程模型的组件按以下方式交互:

  • 当设备断言其唤醒信号并且中断已被GED驱动程序启用时,中断将被断言。

  • 如果系统正在睡眠,这将导致硬件(如果可能)将系统转换为S0状态。

  • 一旦系统运行,OSPM将调度GED中断服务程序。

*GED需要确定哪个中断已被断言,并且可以对已断言唤醒的相应设备对象执行通知命令。

  • 反过来,OSPM将通知每个设备的OSPM本机驱动程序,该驱动程序将唤醒其设备以提供服务。

唤醒事件必须专门与GED中断关联(例如,一个中断不能由多个唤醒事件共享),以便正确处理系统使用的语义

请注意,任何ACPI平台都可以利用GPIO信号和/或中断信号ACPI事件(即,它们不限于硬件简化的ACPI平台)。

Prev
5.6.8. 对象、方法和资源的预定义ACPI名称
Next
5.6.10. 使用设备 _PRW 对象管理唤醒事件