14.1. 平台通信通道表
表 14.1 平台通信通道表(PCCT)
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 头部 | |||
| 签名 | 4 | 0 | 平台通信通道表的 ‘PCCT’ 签名。 |
| 长度 | 4 | 4 | 整个 PCCT 的长度,以字节为单位。 |
| 修订版本 | 1 | 8 | 2 |
| 校验和 | 1 | 9 | 整个表相加必须为零。 |
| OEMID | 6 | 10 | OEM ID |
| OEM 表 ID | 8 | 16 | 对于 PCCT,表 ID 是制造商型号 ID。 |
| OEM 修订版本 | 4 | 24 | 所提供 OEM 表 ID 对应的 PCCT 的 OEM 修订版。 |
| 创建者 ID | 4 | 28 | 创建该表的工具的供应商 ID。对于包含定义块的表,这是 ASL 编译器的 ID。 |
| 创建者修订版本 | 4 | 32 | 创建该表的工具的修订版。对于包含定义块的表,这是 ASL 编译器的修订版。 |
| 标志 | 4 | 36 | 平台通信通道全局标志,见平台通信通道全局标志。 |
| 保留 | 8 | 40 | 保留 |
| PCC 子空间结构[n](n = 子空间 ID) | – | 48 | 此平台的平台通信通道子空间结构列表。该结构在下一节中描述。最多支持 256 个子空间。 |
14.1.1. 平台通信通道全局标志
表 14.2 平台通信通道全局标志
| PCC 全局标志 | 位长度 | 位偏移 | 描述 |
|---|---|---|---|
| 平台中断 | 1 | 0 | 如果置位,则平台能够生成一个中断来指示命令完成。 |
| 保留 | 31 | 1 | 必须为零。 |
14.1.2. 平台通信通道子空间结构
PCC 子空间由 PCCT 表中的 PCC 子空间结构描述。PCC 子空间的子空间 ID 是其在子空间结构数组中的索引,从子空间 0 开始。所有子空间都有一个公共头,后跟一组特定于类型的字段:
表 14.3 通用 PCC 子空间结构
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 子空间的类型。 |
| 长度 | 1 | 1 | 子空间结构的长度,以字节为单位。下一个子空间结构从该结构起始位置之后 length 个字节处开始。 |
| 类型特定字段 | 可变 | 2 | 更多细节见具体子空间类型 |
本规范定义了以下子空间:
类型 0,通用通信子空间,
类型 1 到 2,硬件精简 通信子空间,
类型 3 和 4,扩展 PCC 子空间。
类型 5,基于硬件寄存器的 PCC 子空间。
所有其他子空间类型均保留。
14.1.3. 通用通信子空间结构(类型 0)
表 14.4 PCC 子空间结构类型 0(通用通信子空间)
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0(通用通信子空间) |
| 长度 | 1 | 1 | 62 |
| 保留 | 6 | 2 | 保留 |
| 基地址 | 8 | 8 | 共享内存范围的基地址,见通用通信通道共享内存区域。 |
| 内存长度 | 8 | 16 | 内存范围的长度。必须 > 8。 |
| 门铃寄存器 | 12 | 24 | 包含 PCC 门铃的处理器相对地址,以通用地址结构格式表示。注:对于 Address_Space_I D,只有系统 I/O 空间和系统内存空间是有效值。 |
| 门铃保留 | 8 | 36 | 包含在写入门铃寄存器时要保留的位掩码。 |
| 门铃写入 | 8 | 44 | 包含在写入门铃寄存器时要置位的位掩码。 |
| 标称延迟 | 4 | 52 | 处理命令的预期延迟,以微秒为单位。 |
| 最大周期性访问速率 | 4 | 56 | 子空间通道可支持的周期性请求的最大数量,以每分钟命令数报告。0 表示无限制。 |
| 最小请求周转时间 | 2 | 60 | OSPM 在一个命令完成后发出下一个命令之前必须等待的最短时间,以微秒为单位。 |
注
最大周期性访问速率和最小请求周转时间字段的值不准确,可能会给依赖 PCC 接口的功能带来惩罚性副作用。平台应报告准确的值,以在保持最大通道稳定性的同时实现最大通道效率。
OSPM 使用最大周期性访问速率来确定命令周期性求值的最大速率。不频繁的事件驱动命令不受最大周期性访问速率的限制。
14.1.4. 硬件精简 通信子空间结构(类型 1)
硬件精简 通信子空间定义见表 14.5。它旨在用于 硬件精简 ACPI 平台,这些平台不支持 SCI。除中断变化以及允许门铃寄存器使用 Functional Fixed HW 地址空间之外,该子空间与第 14.2 节和第 14.5 节中描述的通用通信子空间相同。
表 14.5 PCC 子空间结构类型 1(硬件精简 通信子空间)
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 1(硬件精简 通信子空间) |
| 长度 | 1 | 1 | 62 |
| 平台中断 | 4 | 2 | 用于该子空间的 PCC 平台中断的中断 GSIV。 |
| 平台中断标志 | 1 | 6 | 位 [2-7] 保留 位 [1] 平台中断模式 1:中断为边沿触发 0:中断为电平触发 位 [0] 平台中断极性 1:中断为低电平有效 0:中断为高电平有效 |
| 保留 | 1 | 7 | 保留 |
| 基地址 | 8 | 8 | 共享内存范围的基地址,见通用通信通道共享内存区域。 |
| 内存长度 | 8 | 16 | 内存范围的长度。必须 > 8。 |
| 门铃寄存器 | 12 | 24 | 包含 PCC 门铃的处理器相对地址,以通用地址结构格式表示。注:对于 Address_Space_I D,只有系统 I/O、系统内存和 Functional Fixed Hardware 空间是有效值。 |
| 门铃保留 | 8 | 36 | 包含在写入门铃寄存器时要保留的位掩码。 |
| 门铃写入 | 8 | 44 | 包含在写入门铃寄存器时要置位的位掩码。 |
| 标称延迟 | 4 | 52 | 处理命令的预期延迟,以微秒为单位。 |
| 最大周期性访问速率 | 4 | 56 | 子空间通道可支持的周期性请求的最大数量,以每分钟命令数报告。0 表示无限制。 |
| 最小请求周转时间 | 2 | 60 | OSPM 在一个命令完成后发出下一个命令之前必须等待的最短时间,以微秒为单位。 |
注
最大周期性访问速率和最小请求周转时间字段的值不准确,可能会给依赖 PCC 接口的功能带来惩罚性副作用。平台应报告准确的值,以在保持最大通道稳定性的同时实现最大通道效率。
OSPM 使用最大周期性访问速率来确定命令周期性求值的最大速率。不频繁的事件驱动命令不受最大周期性访问速率的限制。
类型 1 子空间不支持电平触发的平台中断,因为未提供清除该中断的方法。在需要电平中断的情况下,应使用类型 2 或类型 3 子空间。
14.1.5. 硬件精简 通信子空间结构(类型 2)
硬件精简 通信子空间定义如下表 14.6 所示。它旨在用于需要通过读-改-写序列来确认平台中断的 硬件精简 ACPI 平台。除表底部的三个平台确认字段外,该子空间与上文描述的 硬件精简 通信子空间结构(类型 1)相同。
表 14.6 PCC 子空间结构类型 2(硬件精简 通信子空间)
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 2(硬件精简通信子空间) |
| 长度 | 1 | 1 | 90 |
| 平台中断 | 4 | 2 | 用于此子空间的 PCC 平台中断的 GSIV。 |
| 平台中断标志 | 1 | 6 | 位 [2-7] 保留 位 [1] 平台中断模式 1:中断为边沿触发 0:中断为电平触发 位 [0] 平台中断极性 1:中断为低电平有效 0:中断为高电平有效 |
| 保留 | 1 | 7 | 保留 |
| 基地址 | 8 | 8 | 共享内存范围的基地址,如“通用通信信道共享内存区域”中所述。 |
| 内存长度 | 8 | 16 | 内存范围的长度。必须 > 8。 |
| 门铃寄存器 | 12 | 24 | 包含 PCC 门铃的处理器相对地址,以通用地址结构格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效。 |
| 门铃保留 | 8 | 36 | 包含在写入门铃寄存器时要保留的位掩码。 |
| 门铃写入 | 8 | 44 | 包含在写入门铃寄存器时要置位的位掩码。 |
| 标称延迟 | 4 | 52 | 处理一个命令的预期延迟,单位为微秒。 |
| 最大周期性访问速率 | 4 | 56 | 子空间信道所能支持的最大周期性请求数,以每分钟命令数报告。0 表示无限制。 |
| 最小请求周转时间 | 2 | 60 | OSPM 在一个命令完成之后、发出下一个命令之前必须等待的最短时间,单位为微秒。 |
| 平台中断确认寄存器 | 12 | 62 | 包含平台中断确认寄存器的处理器相对地址,以通用地址结构格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效。 |
| 平台中断确认保留 | 8 | 74 | 包含在写入平台中断确认寄存器时要保留的位掩码。 |
| 平台中断确认写入 | 8 | 82 | 包含在写入平台中断确认寄存器时要置位的位掩码。 |
注
最大周期性访问速率和最小请求周转时间字段的不准确取值,可能会对依赖 PCC 接口的特性产生惩罚性副作用。平台应报告准确的值,以便在保持最大信道稳定性的同时实现最大的信道效率。
OSPM 使用最大周期性访问速率来确定周期性求值命令的最大速率。非频繁的、事件驱动的命令不受最大周期性访问速率限制。
14.1.6. 扩展 PCC 子空间(类型 3 和 4)
扩展 PCC 通信子空间有两种类型:
类型 3 主子空间:由 OSPM 用于与平台通信。
类型 4 从子空间:由平台用于向 OSPM 发送异步通知。
主子空间与类型 0、1 或 2 子空间并无实质性差异,最显著的不同之处在于类型 3 主子空间不支持异步通知。类型 4 的从子空间提供这些通知,并且不能由 OSPM 用于向平台发送消息。主从成对时,会在 OSPM 与平台之间创建一个双向接口。
描述主(类型 3)和从(类型 4)子空间的 PCCT 项格式如下表所示。
表 14.7 PCC 子空间结构类型 3 和类型 4
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 3 - 主子空间 4 - 从子空间 |
| 长度 | 1 | 1 | 164 |
| 平台中断 | 4 | 2 | 由平台触发的中断的 GSIV:对于主子空间(类型 3),当此子空间上的命令完成时会触发该中断。对于从子空间(类型 4),当平台发送通知时会触发该中断。对于主子空间,如果表 14.2 中的平台中断标志设置为零,则忽略此字段。如果 PCCT 中存在从子空间,则平台中断标志必须设置为 1。请注意,如果中断为边沿触发,则每个子空间都必须具有其自己唯一的中断。如果中断为电平触发,则多个子空间可以共享一个 GSIV,但每个子空间都必须具有唯一的 Platform interrupt Ack preserve 和 Ack Set 掩码。 |
| 平台中断标志 | 1 | 6 | 位 7:2 保留 位 1:平台中断模式 - 设置为 1 表示中断为边沿触发 - 设置为 0 表示中断为电平触发 位 0:平台中断极性 - 设置为 1 表示中断为低电平有效 - 设置为 0 表示中断为高电平有效 |
| 保留 | 1 | 7 | 保留,必须为零 |
| 基地址 | 8 | 8 | 共享内存范围的基地址,如“主从通信信道共享内存区域”中所述。 |
| 内存长度 | 4 | 16 | 内存范围的长度。必须 >= 16。 |
| 门铃寄存器 | 12 | 20 | 包含 PCC 门铃的处理器相对地址,以通用地址结构 (GAS) 格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间是有效值。对于从子空间,此字段是可选的;如果不存在,该字段应仅包含零。 |
| 门铃保留 | 8 | 32 | 包含在写入门铃寄存器时要保留的位掩码。 |
| 门铃写入 | 8 | 40 | 包含在写入门铃寄存器时要置位的位掩码。 |
| 标称延迟 | 4 | 48 | 处理一个命令的预期延迟,单位为微秒。此字段仅与主子空间相关。 |
| 最大周期性访问速率 | 4 | 52 | 子空间子空间所能支持的最大周期性请求数,以每分钟命令数报告。0 表示无限制。此字段仅与主子空间相关。 |
| 最小请求周转时间 | 4 | 56 | OSPM 在一个命令完成之后、发出下一个命令之前必须等待的最短时间,单位为微秒。此字段仅与主子空间相关。 |
| 平台中断确认寄存器 | 12 | 60 | 包含平台中断确认寄存器的处理器相对地址,以通用地址结构 (GAS) 格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效。如果子空间不支持中断或者中断为边沿触发,则该寄存器可以省略。GAS 结构的全部 12 个字节均为 0x0 表示该寄存器不存在。如果子空间支持中断且这些中断为电平触发,则必须提供该寄存器。并且通过读-修改-写序列使用该寄存器来清除中断。 |
| 平台中断确认保留 | 8 | 72 | 包含在写入平台中断确认寄存器时要保留的位掩码。 |
| 平台中断确认置位 | 8 | 80 | 包含在写入平台中断确认寄存器时要置位的位掩码。 |
| 保留 | 8 | 88 | 保留,必须为零 |
| 命令完成检查寄存器地址 | 12 | 96 | 包含命令完成检查寄存器的处理器相对地址,以通用地址结构 (GAS) 格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效 |
| 命令完成检查掩码 | 8 | 108 | 用于使用命令完成检查寄存器判断命令是否完成的掩码。如果寄存器的值与此掩码进行逻辑与后的结果为非零值,则命令已完成 |
| 命令完成更新寄存器地址 | 12 | 116 | 包含命令完成更新寄存器的处理器相对地址,以通用地址结构 (GAS) 格式表示。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效 |
| 命令完成更新保留掩码 | 8 | 128 | 在此子空间中更新命令完成状态时,命令完成更新寄存器中要保留的位掩码。 |
| 命令完成更新置位掩码 | 8 | 136 | 在此子空间中更新命令完成状态时,命令完成更新寄存器中要置位的位掩码。对于主子空间,该掩码必须指示如何清除命令完成位。对于从子空间,该掩码必须指示如何设置命令完成位。 |
| 错误状态寄存器 | 12 | 144 | 包含错误状态寄存器的处理器相对地址,以通用地址结构 (GAS) 格式表示。OSPM 在从信道上会忽略此字段。注:对于 Address_Space_I D,仅 System I/O、System Memory 和 Functional Fixed Hardware 空间的值有效。注:该寄存器可以与命令完成检查寄存器相同。 |
| 错误状态掩码 | 8 | 156 | 此处包含的掩码可与错误状态寄存器的内容进行逻辑与,以确定通过该子空间传输命令时是否发生错误。该掩码的逻辑非用于清除错误。将反转后的掩码与错误状态寄存器的内容进行逻辑与,并将结果写回该寄存器。此字段在从信道中被忽略。 |
注
最大周期性访问速率和最小请求周转时间字段的不准确取值,可能会对依赖 PCC 接口的特性产生惩罚性副作用。平台应报告准确的值,以便在保持最大信道稳定性的同时实现最大的信道效率。
从子空间可由平台用于向 OSPM 发送异步通知。PCCT 中的从子空间项与主子空间共享相同的格式,但有以下修改:
Type 设置为 4 - 从子空间
门铃可以为零,如果为零,OSM 必须忽略它。如果存在,平台可以请求 OSPM 在其处理完通知后写入该门铃。
从子空间与一个主子空间相关联,也就是说,主/从对会将 OSPM 连接到平台中的同一处理实体。
如果 PCCT 中包含从子空间,则全局 Plaform Interrupt 标志(见表 14.2)必须设置为 1。
14.1.7. 基于 HW 寄存器的通信子空间结构(类型 5)
表 14.8 基于 HW 寄存器的通信子空间结构(类型 5)
| 字段 | 长度(以字节计) | 偏移量 | 值 |
|---|---|---|---|
| 类型 | 1 | 0 | 5 |
| 长度 | 1 | 1 | 长度(包括厂商定义区域) |
| 版本 | 2 | 2 | 0x0001(此 PCC 定义的版本 1) |
| 基地址 | 8 | 4 | 共享内存范围的基地址,见第 14.4 节 |
| 共享内存范围长度 | 8 | 12 | 表 14.14 中描述的共享内存范围长度。如果该长度为零,则忽略基地址。 |
| 门铃寄存器 | 12 | 20 | 包含 PCC 门铃的处理器相对地址,以 Generic Address Structure 格式表示。注意:Address_Space_ID 的有效值仅限于系统 I/O 空间和系统内存空间。 |
| 门铃保留 | 8 | 32 | 包含在写入门铃寄存器时需要保留的位掩码 |
| 门铃写入 | 8 | 40 | 包含在写入门铃寄存器时需要置位的位掩码。这用于向平台发送特定命令。 |
| 命令完成检查寄存器 | 12 | 48 | 包含命令完成检查寄存器的处理器相对地址,以 Generic Address Structure 格式表示。注意:Address_Space_ID 的有效值仅限于系统 I/O 空间和系统内存空间。 |
| 命令完成检查掩码 | 8 | 60 | 包含用于从命令完成状态寄存器查询先前发出命令完成状态的位掩码。OS 应对命令完成检查寄存器的值执行 AND 操作。OS 在为下一条命令写入门铃寄存器之前必须检查完成状态。如果计算值为 0,则表示前一次操作已经完成。如果未实现完成状态,则该掩码应为 0。在这种情况下,OS 只需等待最小请求周转时间。注意:在写入门铃寄存器之前需要执行命令完成检查,以避免与先前使用门铃寄存器发生任何竞争条件。此外,在写入门铃寄存器之后以及从错误状态寄存器读取状态之前,也需要执行命令完成检查。 |
| 错误状态寄存器 | 12 | 68 | 包含错误状态寄存器的处理器相对地址,以 Generic Address Structure 格式表示。注意:Address_Space_ID 的有效值仅限于系统 I/O 空间和系统内存空间。 |
| 错误状态掩码 | 8 | 80 | 包含用于从错误状态寄存器获取前一条命令请求错误状态的位掩码。OS 应对错误状态寄存器的值执行 AND 操作。如果该掩码值为 0,则忽略错误状态寄存器。应在完成状态表明已发出的命令完成后检查错误状态。如果未实现命令完成检查(即命令完成检查掩码为 0),则等待最小请求周转时间。如果计算值为零,则表示成功。任何其他值均表示失败。 |
| 标称延迟 | 4 | 88 | 处理一条命令的预期延迟,单位为微秒。 |
| 最小请求周转时间 | 4 | 92 | OSPM 在一条命令完成后、发出下一条命令之前必须等待的最短时间,单位为微秒。 |