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

    • 总览
    • 18.1. 硬件错误和错误源
    • 18.2. OSPM 与系统固件之间的关系
    • 18.3. 错误源发现
      • 18.3.1. 启动错误源
      • 18.3.2. ACPI 错误源
    • 18.4. 固件优先错误处理
    • 18.5. 错误串行化
    • 18.6. 错误注入
    • 18.7. GHES_ASSIST 错误报告

18.3.2. ACPI 错误源

硬件错误源描述了一种标准化机制,平台可使用该机制来描述其错误源。使用此接口是平台描述其错误源的首选方式,因为它独立于平台和处理器体系结构,并允许平台描述与错误源相关的运行参数。

此机制允许平台详细描述错误源;在必要时向 OSPM 传达运行参数(即严重性级别、屏蔽位和阈值)。它还允许平台报告那些 OSPM 通常不会实现支持的错误源(例如,芯片组特定错误寄存器)。

硬件错误源表 (HEST) 为平台固件提供了一种向 OSPM 描述系统硬件错误源的方法。HEST 格式如下表所示。

表 18.2 硬件错误源表 (HEST)

字段字节长度字节偏移描述
Header Signature40“HEST”。硬件错误源表的签名。
Length44整个 HEST 的长度,以字节计。整个表必须是连续的。
Revision181
Checksum19整个表的总和必须为零。
OEMID610OEM ID。
OEM Table ID816制造商模型 ID。
OEM Revision424针对所提供 OEM 表 ID 的 HEST 的 OEM 修订版本。
Creator ID428创建该表的工具的供应商 ID。
Creator Revision432创建该表的工具的修订版本。
Error Source Count436错误源描述符的数量。
Error Source Structure[n]

| 40 | 一系列错误源描述符项。

注

错误源类型 3、4 和 5 由于遗留原因被保留,且不得使用。

以下各节详细说明了每一种特定的错误源描述符。

18.3.2.1. IA-32 体系结构机器检查异常

实现 IA-32 指令集体系结构的处理器采用机器检查异常机制,以向 OSPM 警示存在未纠正的硬件错误条件。此表中的信息由 OSPM 用于为系统中的每个处理器配置机器检查异常机制。

HEST 中只允许一个此类型的项。OSPM 将此项中指定的信息应用于所有处理器。

表 18.3 IA-32 体系结构机器检查异常结构

字段字节长度字节偏移描述
类型200 - IA-32 架构机器检查异常结构。
源 ID22此值用于在平台报告的其他错误源中唯一标识该错误源。
保留24保留。
标志16位 [0] - FIRMWARE_FIRST:如果置位,该位向 OSPM 指示系统固件将首先处理来自此源的错误。位 [2] - GHES_ASSIST:如果置位,该位指示尽管 OSPM 负责直接处理该错误(如同未设置 FIRMWARE_FIRST 时的预期一样),系统固件仍可在硬件报告的错误上下文中报告附加信息。附加信息将在具有匹配相关源 ID 的通用硬件错误源结构中报告。参见第 18.7 节、GHES_ASSIST 错误报告。注意:如果设置了 FIRMWARE_FIRST,则该位为保留。所有其他位均为保留。
已启用17指定是否启用 MCE。如果设置为 1,则此字段表示应启用该错误源。如果设置为 0,则此字段表示不应启用该错误源。
预分配的记录数量48指示要为该错误源预分配的错误记录数量。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。
全局能力初始化数据816指示机器检查全局能力寄存器的值。
全局控制初始化数据824指示要写入机器检查全局控制寄存器的值。
硬件 Bank 数量132指示硬件错误报告库的数量。
保留733保留。
机器检查 Bank 结构[n]

| 40 | 由 IA-32 架构机器检查 Bank 结构 定义的机器检查 Bank 结构列表

18.3.2.1.1. IA-32 架构机器检查 Bank 结构

此表描述特定 IA-32 架构机器检查硬件错误库的属性。

表 18.4 IA-32 架构机器检查错误库结构

字段字节长度字节偏移描述
Bank 编号10从零开始的索引,用于标识机器检查错误库。
初始化时清除状态11如果置位,表示该机器检查库中的状态信息应在系统初始化期间按如下方式清除:0 - 清除 1 - 不清除
状态数据格式12标识状态寄存器中数据的格式:0 - IA-32 MCA 1 - Intel® 64 MCA 2 - AMD64MCA 所有其他值均为保留
保留13保留。
控制寄存器 MSR 地址44硬件库的控制 MSR 的地址。如果为零则忽略。
控制初始化数据88这是 OSPM 将编程到机器检查库控制寄存器中的值。
状态寄存器 MSR 地址416硬件库的 MCi_STAT MSR 的地址。如果为零则忽略。
地址寄存器 MSR 地址420硬件库的 MCi_ADDR MSR 的地址。如果为零则忽略。
杂项寄存器 MSR 地址424硬件库的 MCi_MISC MSR 的地址。如果为零则忽略。

18.3.2.2. IA-32 架构已更正机器检查

实现 IA-32 指令集架构的处理器可以向 OSPM 报告已更正的处理器错误。此表中的信息使平台固件能够向 OSPM 传达已更正处理器错误报告机制的关键参数,包括是否应启用 CMC 处理。

HEST 中仅允许有一个此类型的条目。OSPM 将此条目中指定的信息应用于所有处理器。

表 18.5 IA-32 架构已更正机器检查结构

字段字节长度字节偏移描述
类型201 - IA-32 架构已更正机器检查结构。
源 ID22唯一标识该错误源。
保留24保留
标志16位 [0] - FIRMWARE_FIRST:如果置位,该位向 OSPM 指示系统固件将首先处理来自此源的错误。位 [2] - GHES_ASSIST:如果置位,该位指示尽管 OSPM 负责直接处理该错误(如同未设置 FIRMWARE_FIRST 时的预期一样),系统固件仍可在硬件报告的错误上下文中报告附加信息。附加信息将在具有匹配相关源 ID 的通用硬件错误源结构中报告。参见第 18.7 节、GHES_ASSIST 错误报告。注意:如果设置了 FIRMWARE_FIRST,则该位为保留。所有其他位都必须设置为零。
已启用17如果该字段值为 1,表示应启用该错误源。如果该字段值为 0,表示不应启用该错误源。如果在标志字段中设置了 FIRMWARE_FIRST,则 OSPM 忽略已启用字段。
预分配的记录数量48指示要为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
通知结构2816如“硬件错误通知结构”中定义的硬件错误通知结构。
硬件 Bank 数量144硬件错误报告库的数量。
保留345保留。
机器检查 Bank 结构[n]

| 48 | 在 IA-32 架构机器检查 Bank 结构 中定义的机器检查 Bank 结构列表。

18.3.2.3. IA-32 架构不可屏蔽中断

未更正的平台错误通常使用不可屏蔽中断(NMI)向量(例如,INT 2)进行报告。此表允许平台固件传达有关 NMI 错误条件的配置和处理参数。

HEST 中仅允许有一个此类型的条目。

表 18.6 IA-32 架构 NMI 错误结构

字段字节长度字节偏移描述
类型202 - IA-32 架构 NMI 结构。
源 ID22唯一标识该错误源。
保留44必须为零。
预分配的记录数量48指示要为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
最大原始数据长度416NMI 错误数据的字节大小。

18.3.2.4. PCI Express Root Port AER 结构

PCI Express(PCIe)Root Port 可以实现 PCIe 高级错误报告(AER)支持。此表包含平台固件为在给定 Root Port 上配置 AER 支持而提供给 OSPM 的信息。

如果所有条目中都没有设置 GLOBAL 标志,则 HEST 可为每个 PCI Express Root Port 包含一个此类型的条目。如果设置了 GLOBAL 标志,则只能有一个此类型的条目,并且该条目中包含的信息将应用于所有 PCIe Root Port。

表 18.7 PCI Express Root Port AER 结构

字段字节长度字节偏移描述
类型206 - AER Root Port。
源 ID22唯一标识该错误源。
保留24保留。
标志16位 [0] - FIRMWARE_FIRST:如果置位,该位向 OSPM 指示系统固件将首先处理来自此源的错误。此标志既不授予也不拒绝对 AER 寄存器的访问。OSPM 应评估 PCI 层级结构的 _OSC 以确定 AER 寄存器所有权。位 [1] - GLOBAL:如果置位,表示此结构中包含的设置全局适用于所有 PCI Express 设备。所有其他位都必须设置为零。
已启用17如果该字段值为 1,表示应启用该错误源。如果该字段值为 0,表示不应启用该错误源。如果在标志字段中设置了 FIRMWARE_FIRST,则 OSPM 忽略已启用字段。
预分配的记录数量48指示要为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
总线416标识 Root Port 的 PCI Bus 和 Segment。Bus 编码在位 [7:0] 中。对于公开多个 PCI 段组的系统,段编号编码在位 [23:8] 中,位 [31-24] 必须为零。对于不公开多个 PCI 段组的系统,位 [31:8] 必须为零。如果指定了 GLOBAL 标志,则忽略此字段。
设备220标识 Root Port 的 PCI 设备号。如果指定了 GLOBAL 标志,则忽略此字段。
功能222标识 Root Port 的 PCI 功能号。如果指定了 GLOBAL 标志,则忽略此字段。
设备控制224用于初始化设备的设备控制位。
保留226必须为零。
不可更正错误屏蔽428要写入 Root Port 的不可更正错误屏蔽寄存器的值。
不可更正错误严重性432要写入 Root Port 的不可更正错误严重性寄存器的值。
可更正错误屏蔽436要写入 Root Port 的可更正错误屏蔽寄存器的值。
高级错误能力和控制440要写入 Root Port 的高级错误能力和控制寄存器的值。
Root Error Command444要写入 Root Port 的 Root Error Command 寄存器的值。

注意

对于 PCI Express 高级错误报告(AER)资源,AER 寄存器的所有权和控制由对 PCI _OSC() 方法的求值来确定,如 PCI Firmware Specification 的最新修订版中所述。标志字段中的 FIRMWARE_FIRST 位不用于授予或拒绝对该结构所描述的 PCI Express 设备中的 AER 寄存器的访问。

18.3.2.5. PCI Express Device AER 结构

PCI Express 设备可以实现 AER 支持。此表包含平台固件为在给定 PCI Express 设备上配置 AER 支持而提供给 OSPM 的信息。

如果所有条目中都没有设置 GLOBAL 标志,则 HEST 可为每个 PCI Express 端点设备包含一个此类型的条目。如果设置了 GLOBAL 标志,则只能有一个此类型的条目,并且该条目中包含的信息将应用于所有 PCI Express 端点设备。

表 18.8 PCI Express Device AER 结构

字段字节长度字节偏移描述
类型207 - AER 端点。
源 ID22唯一标识该错误源。
保留24保留。
标志16位 [0] - FIRMWARE_FIRST:如果置位,该位向 OSPM 指示系统固件将首先处理来自该源的错误。该标志既不授予也不拒绝对 AER 寄存器的访问。OSPM 应对 PCI 层次结构求值 _OSC 以确定 AER 寄存器所有权。位 [1] - GLOBAL:如果置位,表示该结构中包含的设置全局适用于所有 PCI Express 设备。所有其他位都必须置零。
已启用17如果该字段值为 1,表示应启用该错误源。如果该字段值为 0,表示不应启用该错误源。如果在标志字段中设置了 FIRMWARE_FIRST,则 OSPM 忽略已启用字段。
预分配的记录数48指示为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
总线416标识设备的 PCI 总线和段。总线编码在位 [7:0] 中。对于公开多个 PCI 段组的系统,段号编码在位 [23:8] 中,且位 [31:24] 必须为零。对于不公开多个 PCI 段组的系统,位 8-31 必须为零。如果指定了 GLOBAL 标志,则忽略该字段。
设备220标识设备的 PCI 设备号。如果指定了 GLOBAL 标志,则忽略该字段。
功能222标识设备的 PCI 功能号。如果指定了 GLOBAL 标志,则忽略该字段。
设备控制224用于初始化设备的设备控制位。
保留226必须为零。
不可校正错误屏蔽428要写入根端口的不可校正错误屏蔽寄存器的值。
不可校正错误严重性432要写入根端口的不可校正错误严重性寄存器的值。
可校正错误屏蔽436要写入根端口的可校正错误屏蔽寄存器的值。
高级错误能力和控制440要写入根端口的高级错误能力和控制寄存器的值。

注

对于 PCI Express 高级错误报告(AER)资源,AER 寄存器的所有权和控制由对 PCI _OSC() 方法的求值来确定,如 PCI 固件规范的最新修订版所述。Flags 字段中的 FIRMWARE_FIRST 位并不用于授予或拒绝对结构所描述的 PCI Express 设备中的 AER 寄存器的访问。

18.3.2.6. PCI Express/PCI-X 桥 AER 结构

实现 AER 支持的 PCI Express/PCI-X 桥实现了用于控制错误如何跨桥报告的字段。

如果所有条目中都没有设置 GLOBAL 标志,则 HEST 可以为每个 PCI Express/PCI-X 桥包含一个此类型的条目。如果设置了 GLOBAL 标志,则此类型只能有一个条目,并且该条目中包含的信息将应用于所有 PCI Express/ PCI-X 桥。

表 18.9 PCI Express/PCI-X 桥 AER 结构

字段字节长度字节偏移描述
类型208 - AER 桥。
源 ID22唯一标识该错误源。
保留24保留。
标志16位 [0] - FIRMWARE_FIRST:如果置位,该位向 OSPM 指示系统固件将首先处理来自该源的错误。该标志既不授予也不拒绝对 AER 寄存器的访问。OSPM 应对 PCI 层次结构求值 _OSC 以确定 AER 寄存器所有权。位 [1] - GLOBAL:如果置位,表示该结构中包含的设置全局适用于所有 PCI Express 设备。所有其他位都必须置零。
已启用17如果该字段值为 1,表示应启用该错误源。如果该字段值为 0,表示不应启用该错误源。如果在标志字段中设置了 FIRMWARE_FIRST,则 OSPM 忽略已启用字段。
预分配的记录数48指示为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
总线416标识桥的 PCI 总线和段。总线编码在位 [7:0] 中。对于公开多个 PCI 段组的系统,段号编码在位 [23:8] 中,且位 [31:24] 必须为零。对于不公开多个 PCI 段组的系统,位 8-31 必须为零。如果指定了 GLOBAL 标志,则忽略该字段。
设备220标识桥的 PCI 设备号。如果指定了 GLOBAL 标志,则忽略该字段。
功能222标识桥的 PCI 功能号。如果指定了 GLOBAL 标志,则忽略该字段。
设备控制224用于初始化设备的设备控制位。
保留226该值必须为零。
不可校正错误屏蔽428要写入桥的不可校正错误屏蔽寄存器的值。
不可校正错误严重性432要写入桥的不可校正错误严重性寄存器的值。
可校正错误屏蔽436要写入桥的可校正错误屏蔽寄存器的值。
高级错误能力和控制440要写入桥的高级错误能力和控制寄存器的值。
辅助不可校正错误屏蔽444要写入桥的辅助不可校正错误屏蔽寄存器的值。
辅助不可校正错误严重性448要写入桥的辅助不可校正错误严重性寄存器的值。
辅助高级能力和控制452要写入桥的辅助高级能力和控制寄存器的值。

注

对于 PCI Express 高级错误报告(AER)资源,AER 寄存器的所有权和控制由对 PCI _OSC() 方法的求值来确定,如 PCI 固件规范的最新修订版所述。Flags 字段中的 FIRMWARE_FIRST 位并不用于授予或拒绝对结构所描述的 PCI Express 设备中的 AER 寄存器的访问。

18.3.2.7. 通用硬件错误源

平台可以使用通用硬件错误源结构向 OSPM 描述一个通用硬件错误源。通用硬件错误源是指使用非标准通知机制向 OSPM 通知错误存在,或者报告以非标准格式编码的错误信息的错误源。

使用通用硬件错误源结构中的信息,OSPM 配置错误处理程序,从错误状态块读取错误数据——这是平台预留用于记录错误状态信息的一段内存范围。

由于通用硬件错误源是非标准的,OSPM 不实现用于配置和控制操作的内建支持。该错误源必须由系统固件在启动期间进行配置。

某些平台可能会描述具有不同通知类型的多个通用硬件错误源结构,如表 18.10 所定义。例如,平台可以描述一个用于处理同步错误(例如 MCE 或 SEA)的错误源,以及第二个用于处理异步错误(例如 SCI 或 External Interrupt)的错误源。

表 18.10 通用硬件错误源结构

字段字节长度字节偏移描述
类型209 - 通用硬件错误源结构。
源 ID22唯一标识该错误源。
相关源 ID24该字段表示一个备用错误源的 Source ID,对于该备用错误源,平台:(a) 要求 Firmware-First 处理(备用错误源上设置了 FIMWARE_FIRST 标志)。参见第 18.4 节。(b) 在硬件报告的错误上下文中提供附加信息(备用错误源上设置了 GHES_ASSIST 标志)。参见第 18.7 节。如果该通用错误源不表示备用源,则该字段必须设置为 0xFFFF。
标志16保留。
已启用17如果该字段值为 1,表示应启用该错误源。如果该字段值为 0,表示不应启用该错误源。
预分配的记录数48指示为该错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于该错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
最大原始数据长度416指示该错误源记录的错误数据的字节大小。
错误状态地址1220如第 5.2.3.2 节所定义的 Generic Address Structure。该字段指定一个寄存器的位置,该寄存器包含保存该错误源错误状态数据的内存块的物理地址。该内存范围必须位于固件保留内存中。OSPM 将该范围映射到系统地址空间中,并从映射后的地址读取错误状态信息。
通知结构2832如表 18.14 所定义的 Hardware Error Notification Structure。该结构指定该错误源如何通知 OSPM 已发生错误。
错误状态块长度460标识错误状态数据块的字节长度。

错误状态地址字段指定一个 8 字节内存映射寄存器的位置,该寄存器保存错误状态块的物理地址。该错误状态块必须位于向 OSPM 报告为固件保留的一段内存范围中。OSPM 将错误状态缓冲区映射到系统地址空间中,以便读取错误数据。

18.3.2.7.1. 通用错误数据

错误状态块包含给定通用错误源的错误状态信息。OSPM 提供一个错误处理程序,根据特定操作系统的需要,将一个或多个此类块格式化。

通用错误状态块包括两级信息。顶层是下表定义的 Generic Error Status Block 结构。下一层是一个或多个 Generic Error Data Entry 结构,定义见下方第二个表。

表 18.11 通用错误状态块

字段字节长度字节偏移说明
Block Status40指示错误包中报告的错误信息类型:位 [0] - 不可校正错误有效:如果置为一,表示存在不可校正错误状态。位 [1] - 可校正错误有效:如果置为一,表示存在可校正错误状态。位 [2] - 多个不可校正错误:如果置为一,表示已检测到一个以上的不可校正错误。位 [3] - 多个可校正错误:如果置为一,表示已检测到一个以上的可校正错误。位 [13:4] - 错误数据项计数:该值指示在数据部分中找到的错误数据项数量。位 [31:14] - 保留
Raw Data Offset44从 Error Status Block 起始处到原始错误数据的字节偏移。原始数据必须位于所有通用错误数据项之后。
Raw Data Length48原始错误数据的字节长度。
Data Length412通用错误数据的字节长度。
Error Severity416标识所报告错误的严重性:0 - 可恢复 1 - 致命 2 - 已校正 3 - 无。注:这是整个事件的错误严重性。每个通用错误数据项也包括其自身的 Error Severity 字段。
Generic Error Data EntriesData Length20此字段中包含的信息是零个或多个通用错误数据项的集合。

可以在 Generic Error Status Block 结构的 Generic Error Data Entries 字段中记录一个或多个通用错误数据项结构。这使平台能够为与给定错误事件相关的多个硬件组件累积信息。例如,如果通用错误源表示发生在 PCI Express / PCI-X Bridge 次级侧某设备上的错误,则记录来自 PCI Express Bridge 和 PCI-X 设备的错误信息会很有用。利用两个通用错误数据项结构即可实现这一点——见下文表 18.12。

有关下表所描述字段的更多细节,请参见 UEFI Specification 附录中“通用平台错误记录”的节描述符定义。

表 18.12 通用错误数据项

字段字节长度字节偏移说明
Section Type160标识此项中错误数据的类型。参见 UEFI Specification 中节描述符的 Section Type 字段。
Error Severity416标识所报告错误的严重性。0 - 可恢复 1 - 致命 2 - 已校正 3 - 无
Revision220修订号为 0x300。参见 UEFI Specification 中节描述符的 Revision 字段。
Validation Bits122标识某些字段是否填充了有效数据。此字段指示以下字段的有效性:位 0 - 如果为 1,则 FRUId 字段包含有效信息。位 1 - 如果为 1,则 FRUString FRU Text 字段包含有效信息。位 2 - 如果为 1,则 TimeStamp 字段包含有效信息。位 7:3 - 保留,必须为零。
Flags123描述错误数据的标志。参见 UEFI Specification 附录标题为 “Common Platform Error Record” 的 Flags 字段。
Error Data Length424通用错误数据的字节长度。Data Length 为零是有效的。例如,这可用于固件优先错误处理,其中平台使用 NMI 向 OSPM 报告错误。
FRU Id1628标识现场可更换单元。参见 UEFI Specification 附录标题为 “Common Platform Error Record” 的 FRU Id 字段。
FRU Text2044描述现场可更换单元的文本字段。参见 UEFI Specification 附录标题为 “Common Platform Error Record” 的 FRU Text 字段。
Timestamp864如果根据 validation bits 字段被标记为有效,则该字段对应于系统软件收集错误信息时的时间,而不一定表示错误事件发生的时间。该时间戳包含 BCD 格式的本地时间。参见 EFI Specification 附录标题为 “Common Platform Error Record “ 的错误记录头部分中的 Timestamp 字段。
DataError Data Length64通用错误数据。此字段中包含的信息必须匹配 UEFI Specification 附录“Common Platform Error Record”中定义的某一种错误记录节类型。

18.3.2.7.2. 用于通用错误源的事件通知

对于已校正错误,建议使用事件通知,因为处理错误报告的延迟对于系统正常运行并不关键。事件通知的实现要求平台在 ACPI 命名空间中定义一个 PNP ID 为 PNP0C33 的设备,称为错误设备。该设备用于通知 OSPM 某个通用错误源正在报告错误。由于多个通用错误源都可以使用事件通知,因此 OSPM 有责任扫描这些通用错误源的列表,并检查块状态字段(Generic Error Status Block),以识别报告错误的源。

平台负责提供一个控制方法,该方法对错误设备(PNP0C33)发出 NOTIFY,通知代码类型为 0x80。

对于传统 ACPI 平台,事件信号遵循将匹配的控制方法排队执行中描述的模型。平台为错误通知实现一个通用事件(GPE),并且该 GPE 具有关联的控制方法。

错误通知的 GPE 控制方法示例如下:

Method (\_GPE._L08) { // GPE 8 level error notification
  Notify (error_device, 0x80)
}

对于 HW-reduced ACPI 平台,事件信号遵循GPIO 发信号的 ACPI 事件和中断发信号的 ACPI 事件中描述的模型。平台通过中断或 GPIO 引脚实现错误事件通知。在这两种情况下,它们都与一个 _EVT 控制方法相关联。

基于 GPIO 的错误通知的 _EVT 控制方法示例如下:

Method (\_EVT) { // GPIO pin 300 error notification
  Switch (Arg1) {
    Case (300) {
      Notify (error_device, 0x80)
    }
  }
}

当平台使用事件通知时,整体流程如下:

  • 平台使用 Generic Hardware Error Source Structure 和 Generic Error Status Block 中的格式,将带有事件作为通知方法的错误源进行枚举。

  • 平台向 OSPM 提供一个错误设备,PNP ID 为 PNP0C33

  • 当平台准备报告错误时,平台填充错误状态块,包括块状态字段(Generic Error Status Block)。

传统 ACPI 平台使用 SCI 在适当的 GPE 上发出错误信号:

  • OSPM 按照将匹配的控制方法排队执行中的说明,求值与该事件关联的 GPE 控制方法

  • OSPM 通过检查所有使用 SCI 通用通知类型的通用错误源的错误状态块,来识别报告该错误的源,并响应此通知

硬件精简 ACPI 平台使用 GPIO 中断或在通用事件设备下声明的其他中断发出错误信号(中断发信号的 ACPI 事件)。对于 GPIO 发信号事件,由 _AEI 对象列出相应的 GPIO 引脚;对于中断发信号事件,则使用 _CRS 对象列出中断:

  • OSPM 按照处理 GPIO 发信号事件的事件方法和处理中断发信号事件的事件方法中的说明,求值与该事件关联的控制方法。

  • OSPM 通过检查所有使用 GPIO 发信号通知或中断发信号通知类型的通用错误源的错误状态块,来识别报告该错误的源,并响应此通知。

18.3.2.8. 通用硬件错误源版本 2(GHESv2 - Type 10)

这是对 Generic Hardware Error source 结构(第 18.3.2.7 节)的扩展,用于依赖 RAS 控制器生成通用错误记录的硬件精简平台。RAS 控制器可以是硬件实体或固件实体,并且可以与 OS 并行执行(例如,RAS 控制器可以是在独立微控制器上运行的固件,或者也可以是运行在某个应用处理器上的平台固件)。具有 RAS 控制器的平台必须防止对 Error Status Block 的并发访问(即,在 OS 完成读取之前,RAS 控制器不得覆盖 Error Status Block)。下表提供了 RAS 控制器可能如何与 OS 交互的高级示例。

../_images/ACPI_PLatform_Error_Interfaces-2.png

图 18.1 带外部 RAS 控制器的 APEI 错误流示例

对于 GHESv2 错误源,OSPM 必须通过写入 GHESv2 结构中列出的“Read Ack Register”来确认已使用 Error Status Block(如下表所述)。对于描述多个 Generic Hardware Error Source 的平台,平台必须为每个错误源的 Error Status Block 提供唯一的内存区域。

表 18.13 通用硬件错误源版本 2(GHESv2)结构

名称字节长度字节偏移说明
Type2010 - 通用硬件错误源(版本 2)结构
Table 18.10 中的等效字段622与表 18.10 中的字段格式相同,从 Source Id 开始,到 Error Status Block Length 结束(含)。
Read Ack Register1264如表 18.10 中定义的 Generic Address Structure。此字段指定 Read Ack Register 的位置,用于通知 RAS 控制器 OSPM 已处理完 Error Status Block。OSPM 写入 Read Ack Write 指定的位,同时保留 Read Ack Preserve 指定的位。
Read Ack Preserve876包含写入 Read Ack register 时要保留的位掩码。
Read Ack Write884包含写入 Read Ack register 时要置位的位掩码。

一旦从特定 GHESv2 错误源检测到错误,OS 必须执行以下步骤:

  • OSPM 检测到错误(通过中断/异常或轮询块状态)

  • OSPM 复制错误状态块

  • OSPM 清除错误状态块的块状态字段

  • OSPM 通过 Read Ack register 确认该错误。例如:

    • OSPM 读取 Read Ack register –> X

    • OSPM 写入 –> (( X & ReadAckPreserve) | ReadAckWrite)

18.3.2.9. 硬件错误通知

此表描述了与硬件错误源关联的通知机制。

表 18.14 硬件错误通知结构

字段字节长度字节偏移描述
类型10标识通知类型:0 - 轮询 1 - 外部中断 2 - 本地中断 3 - SCI 4 - NMI 5 - CMCI 6 - MCE 7 - GPIO 信号 8 - ARMv8 SEA 9 - ARMv8 SEI 10 - 外部中断 - GSIV 11 - 软件委托异常 - 请参见 ACPI 相关文档链接(http://uefi.org/acpi)中标题为“SDEI 规范”的内容。所有其他值均保留
长度11该结构的总长度(以字节为单位)。
配置写使能22此字段指示配置参数是否可以由 OSPM 修改。如果与关联参数对应的位被设置,则该参数可由 OSPM 写入:位 [0]:类型 位 [1]:轮询间隔 位 [2]:切换到轮询阈值数值 位 [3]:切换到轮询阈值窗口 位 [4]:错误阈值数值 位 [5]:错误阈值窗口 所有其他位均保留。
轮询间隔44指示 OSPM 应使用的轮询间隔(毫秒),以定期检查错误源是否存在错误状态。
向量48中断向量。对于类型 10“外部中断 - GSIV”,此字段指定由错误源触发的 GSIV。
切换到轮询阈值数值412在 OSPM 将错误源切换到轮询模式之前,必须在切换到轮询阈值时间间隔内发生的错误中断次数。
切换到轮询阈值窗口416指示在 OSPM 将错误源切换到轮询模式之前,必须在其中发生切换到轮询阈值数值个中断的时间间隔(毫秒)。
错误阈值数值420指示在 OSPM 将该事件作为错误状态处理之前,必须在错误阈值时间间隔内发生的错误事件数。
错误阈值窗口424指示在 OSPM 将该事件作为错误状态处理之前,错误阈值数值个错误必须在其中发生的时间间隔(毫秒)。

18.3.2.10. IA-32 架构延迟机器检查

实现 IA-32 指令集架构的处理器可以向 OSPM 报告延迟错误。这些错误表明数据已损坏但尚未被使用。此表中的信息使平台固件能够向 OSPM 传达延迟处理器错误报告机制的关键参数,包括是否应启用延迟机器检查(DMC)处理。

HEST 中仅允许有一个此类型的条目。OSPM 将此条目中指定的信息应用于所有处理器。

表 18.15 IA-32 架构延迟机器检查结构

字段字节长度字节偏移描述
类型2011 - IA-32 架构延迟机器检查结构。
源 ID22此值用于在平台报告的其他错误源中唯一标识此错误源。
保留24保留。
标志16位 [0] - FIRMWARE_FIRST:如果置位,此位向 OSPM 指示系统固件将首先处理来自该源的错误。位 [2] - GHES_ASSIST:如果置位,此位指示尽管 OSPM 负责直接处理该错误(如同在未设置 FIRMWARE_FIRST 时所预期的那样),系统固件仍可以在硬件报告的错误上下文中报告附加信息。附加信息在具有匹配相关源 ID 的通用硬件错误源结构中报告。参见第 18.7 节、GHES_ASSIST 错误报告。注意:如果设置了 FIRMWARE_FIRST,则此位保留。所有其他位必须设为零。
已启用17如果该字段值为 1,表示应启用此错误源。如果该字段值为 0,表示不应启用该错误源。如果在 flags 字段中设置了 FIRMWARE_FIRST,则 OSPM 忽略 Enabled 字段。
要预分配的记录数48指示要为此错误源预分配的错误记录数量。必须 >= 1。
每条记录的最大节数412指示由于此错误源报告的错误而创建的错误记录中包含的错误节的最大数量。必须 >= 1。
通知结构2816硬件错误通知结构,如表 18.14 所定义。
硬件库数量144指示硬件错误报告库的数量。
保留345保留。
机器检查库结构[n]

| 48 | IA-32 架构机器检查库结构 中定义的 Machine Check Bank 结构列表。

Prev
18.3.1. 启动错误源