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.4.6.1. 声明 GenericSerialBus 字段

与其他区域一样,GenericSerialBus 操作区域只能通过 Field 术语访问。每个字段元素都分配有一个唯一的命令值,并代表目标 GenericSerialBus 设备上的虚拟寄存器。

字段术语的语法(参见第 19.6.47 节)如下所述:

Field(
  RegionName,    // NameString=>OperationRegion
  AccessType,    // AccessTypeKeyword
  LockRule,      // LockRuleKeyword - ignored for Hardware-reduced ACPI platforms
  UpdateRule     // UpdateRuleKeyword - ignored
) {FieldUnitList}

其中:

  • RegionName 指定之前为设备定义的操作区域名称。

  • AccessType 必须设置为 BufferAcc。这表明对字段元素的访问将使用区域特定的数据缓冲区来完成。对于这种访问类型,字段处理程序不知道数据缓冲区的内容可能是任何大小。当这种类型的字段用作操作中的源参数时,它的计算结果只是一个缓冲区。然而,当用作目标时,缓冲区会双向传递,以允许从写入操作返回数据。修改后的缓冲区将成为该操作的执行结果。这与执行结果与写入目标的值相同的正常情况略有不同。请注意,源永远不会更改,因为它可能是只读对象(请参阅声明和使用 GenericSerialBus 数据缓冲区)。

    • LockRule 指示访问该操作区域是否需要获取全局锁以进行同步。在具有可以访问 GenericSerialBus 的固件的系统上,应将该字段设置为 Lock,否则应设置为 NoLock。在硬件缩减的ACPI平台上,没有全局锁定,因此该参数被忽略。

    • UpdateRule 不适用于 GenericSerialBus 操作区域,因为每个虚拟寄存器都是完整访问的。所有 GenericSerialBus 字段定义都会忽略此字段。

GenericSerialBus 操作区域要求以命令值粒度声明所有字段元素。这意味着每个虚拟寄存器不能分解为字段定义中的各个位。

对虚拟寄存器的子部分的访问只能在字段定义之外进行。施加此限制是为了简化 GenericSerialBus 接口。

使用字段定义中的 AccessAs 术语将 GenericSerialBus 协议分配给字段元素。该术语的语法(来自 ASL 根术语和次要术语)描述如下:

AccessAs(
  AccessType, //AccessTypeKeyword
  AccessAttribute //Nothing \| ByteConst \| AccessAttribKeyword
)

其中:

  • AccessType 必须设置为 BufferAcc。

  • AccessAttribute 指示分配给该术语后面的命令值的 GenericSerialBus 协议。有关 GenericSerialBus 协议的列表,请参阅:ref:using-the-genericserialbus-protocols。

AccessAs 术语必须出现在字段定义中,才能为后面的字段元素设置初始 GenericSerialBus 协议。可以为每个字段元素定义最多一个通用串行总线协议。支持单个命令值的多个协议的设备可以通过指定具有相同偏移量(命令值)的多个字段元素来建模,其中每个字段元素前面都有指定备用协议的 AccessAs 术语。

对于 GenericSerialBus 操作区域,必须为每组字段元素定义连接属性。使用字段定义中的连接术语将 GenericSerialBus 资源分配给字段元素。该术语的语法(来自连接(声明字段连接属性)“连接(声明字段连接属性)”)描述如下:

Connection (ConnectionResourceObj)

其中:

  • ConnectionResourceObj 指向串行总线资源连接描述符(请参阅 GenericSerialBus 连接描述符 了解有效类型),或指定包含连接资源信息的缓冲区字段的命名对象。

每个字段定义引用操作区域定义中指定的初始命令偏移量。针对相应字段中定义的每个后续字段元素迭代偏移量。如果在同一个Field定义中描述了新的连接,则偏移量将不会返回到其初始值,并且必须定义新的Field以从操作区域定义继承初始命令值偏移量。下面的例子说明了这一点。

OperationRegion (TOP1, GenericSerialBus, 0x00, 0x100)  //Initial offset is 0
Field (TOP1, BufferAcc, NoLock, Preserve)
{
    Connection (I2CSerialBusV2 (0x5a,,100000,,"\\_SB.I2C",,,,,RawDataBuffer(){1,6})),
    Offset (0x0),
    AccessAs(BufferAcc, AttribBytes (4)),
    TFK1, 8, //TFK1 at command value offset 0
    TFK2, 8, //TFK2 at command value offset 1
    Connection(I2CSerialBusV2(0x5c,,100000,,"\\_SB.I2C",,,,,RawDataBuffer(){3,1})),
    AccessAs(BufferAcc, AttribBytes (12)),
    TS1, 8 //TS1 at command value offset 2
}

Field (TOP1, BufferAcc, NoLock, Preserve)
{
    Connection(I2CSerialBusV2(0x5b,,100000,,"\\_SB.I2C",,,,,RawDataBuffer(){2,9})),
    AccessAs(BufferAcc, AttribByte),
    TM1, 8 //TM1 at command value offset 0
}
Next
5.5.2.4.6.2. 声明和使用 GenericSerialBus 数据缓冲区