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.5.2.2. 方法调用约定

控制方法的调用约定可以最好地描述为“按引用调用常量”。在此约定中,作为参数传递的对象通过“引用”传递,这意味着它们在传递给被调用的控制方法时不会复制到新对象(在调用期间复制对象或对象包装器的调用约定称为按值调用或按复制调用)。

这种按引用常量调用约定允许在每个方法调用之间共享内部对象,从而减少必须执行的对象复制数量以及必须复制的缓冲区数量。此调用约定适合主机操作系统内核中ACPI子系统的低级性质,其中非分页动态内存通常非常宝贵。 ASL程序员必须了解调用约定和相关的副作用。

然而,与纯粹的引用调用约定不同,被调用的控制方法修改参数的能力极其有限。这可以减少别名问题,例如当被调用的方法意外修改调用者作为参数传递的对象或变量时。实际上,传递给控制方法的参数作为常量传递,除非在特定的受控环境下,否则无法修改这些常量。

通常,通过 ArgX 术语传递给控制方法的对象不能由被调用的方法直接写入或修改。换句话说,当 ArgX 项用作ASL语句中的目标操作数时,现有的 ArgX 对象不会被修改。相反,新对象会替换现有对象,并且 ArgX 术语实际上成为 LocalX 术语。

只读参数规则的唯一例外是 ArgX 术语包含通过 RefOfASL 运算符创建的对象引用。在这种情况下,使用 ArgX 项作为目标操作数将导致存储在 RefOf 操作引用的ACPI名称中的任何现有对象被覆盖。

在某些有限的情况下,可能会创建一个新的可写对象,该对象将允许控制方法更改 ArgX 对象的值。这些情况仅限于 Buffer 和 Package 对象,其中对象的“值”是间接表示的。对于缓冲区,可以创建一个可写索引或字段来引用原始缓冲区数据,并允许被调用的方法读取或修改数据。对于包,可以创建可写索引以允许被调用的方法修改包的各个元素的内容。

Prev
5.5.2.1. 论点
Next
5.5.2.3. 局部变量和本地创建的数据对象