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
  • 第 14 章

    • 总览
    • 14.1. 平台通信通道表
    • 14.2. 通用通信通道共享内存区域
    • 14.3. 扩展 PCC 子空间共享内存区域
    • 14.4. 精简 PCC 子空间共享内存区域
    • 14.5. 门铃协议
    • 14.6. 平台通知
    • 14.7. 引用 PCC 地址空间

14.5. 门铃协议

除从子空间外,门铃由 OSPM 用于通知平台:共享内存区域包含一个有效命令,并且该命令已准备好处理。门铃由一个硬件寄存器组成,该寄存器通过 I/O 或内存映射 I/O 访问,并在 PCC 子空间结构的门铃字段中抽象表示。OSPM 通过对指定寄存器执行一次读取/修改/写入周期来触发门铃,同时保留并设置 PCC 子空间结构中的保留和写入掩码所指定的位。

../_images/Platform_Comm_Channel-2.png

图 14.1 门铃协议的通信流程

上图说明了 OPSM 通过 PCC 子空间向平台发送消息时所采取的步骤。

  1. 首先,OSPM 检查该子空间上是否没有待完成的命令,以表明该子空间可供使用。这通过检查该子空间状态字段中的命令完成位是否已置位来完成。如果该位置位,则该子空间可供使用,并且与该子空间关联的共享内存由 OSPM 独占拥有。

  2. OSPM 将一条命令放入该子空间的共享内存中,以更新标志、长度、命令和有效负载字段(见通用通信通道共享内存区域)。如果平台在 PCCT 中指示支持平台中断(见平台通信通道全局标志),则 OSPM 可以请求平台在完成该命令处理后生成一个中断。这是通过在标志中设置完成时通知位来请求的(见平台通信通道全局标志和主从通信通道标志)。

  3. 然后,OSPM 清除命令完成位。此步骤将共享内存的所有权转移给平台。

  4. OSPM 通过对指定寄存器执行读取/修改/写入周期来触发门铃,同时保留并设置 PCC 子空间结构中的保留和写入掩码所指定的位。

命令完成位的管理方式在 0-2 类型子空间与 3 类型子空间之间略有不同。对于前者,命令完成位位于遵循“通用通信通道状态字段”中所述特定格式的状态寄存器中。3 类型子空间仍然使用单个命令完成位,但允许平台决定保存该位的寄存器的位置和格式。因此,描述 3 类型子空间的 PCCT 结构使用掩码和地址来描述如何设置该位。同样,也使用掩码来描述如何清除该位。对于这些子空间,要检查命令完成位是否已置位,OSPM 将命令完成检查寄存器的内容与命令完成检查掩码进行按位 AND。非零值表示命令完成位已置位。

清除命令完成位通过命令完成更新寄存器完成,该寄存器的地址可以不同于命令完成检查寄存器。在这种情况下,更新寄存器的内容通过按位 AND 与保留掩码组合,然后将结果通过按位 OR 与置位掩码组合,并将该结果写回更新寄存器。

对于 1-3 类型子空间,在 OSPM 发送命令之前,命令完成位必须初始化为 1,即命令完成已置位。对于 0 类型通道,当子空间初始化时平台是否设置命令完成由实现定义。在这些子空间上,OSPM 在发送第一条命令之前不必检查命令完成是否已置位。

上面的图“门铃协议的通信流程”说明了平台在接收到命令时所采取的步骤:

  1. 为了增强健壮性,平台可以选择性地检查命令完成位是否为清零状态

  2. 处理命令

  3. 设置命令完成位

  4. 触发由子空间 PCCT 条目的 GSIV 指示的平台中断(见表 14.7)。只有当在步骤 2 中已请求中断且平台支持中断时,才会发生这种情况。平台可以通过平台中断标志指示对中断的支持(见表 14.2)

OSPM 可以通过轮询命令完成位或通过平台中断来检测命令完成。当 OSPM 检测到命令已完成时,它继续执行以下步骤:

  1. 如有必要,清除平台中断。此步骤适用于以下情况:

    • 平台在命令完成时支持平台中断(见表 14.2)。

    • 中断由 OSPM 通过完成时通知标志请求(见表 14.9 和主从通信通道标志)。

    • 该中断通过平台中断标志被描述为电平触发,并且子空间 PCCT 条目提供了平台中断确认寄存器地址及相关掩码(见 2 型和 3 型的表项)。

  2. 如果通过中断检测命令完成,可以选择性地检查命令是否完成。

  3. 处理命令响应。

为确保正确操作,必须保证 OSPM 在步骤 2 中执行的所有内存更新,在步骤 3 完成之前对平台可见。同样,平台在步骤 6 中执行的所有内存更新,必须在步骤 7 完成之前对 OSPM 可见。

注意

对于 0 到 2 类型子空间,共享子空间的双方对状态字段的所有访问都必须使用互锁操作。3-4 类型避免了这一要求。作为未来规范修订中弃用平台异步通知的一部分,该要求将针对 0 到 2 类型子空间被移除(见下面的平台通知部分)。

Prev
14.4. 精简 PCC 子空间共享内存区域
Next
14.6. 平台通知