18.4. 固件优先错误处理
平台可能有必要在将控制权交给 OSPM 进行进一步错误处理之前,先在固件中处理某些类别的错误。勘误管理和错误遏制是固件优先错误处理具有优势的两个示例。通用硬件错误源通过相关源 ID 支持此模型。
平台通过硬件错误源表(HEST)向 OSPM 报告原始错误源,并为该错误源设置 FIRMWAREFIRST 标志。此外,平台还必须报告一个通用错误源,并将其相关源 ID 设置为原始源 ID。此通用错误源用于在固件优先处理之后,将原始源上的错误及其状态通知给 OSPM。
在固件优先处理中可以使用不同的通知策略;平台可使用以下选项:
传统 ACPI 平台可以使用 NMI 向 OSPM 通知给定错误源上的已更正错误和未更正错误
传统 ACPI 平台可以使用 NMI 报告未更正错误,并使用 SCI 报告已更正错误
传统 ACPI 平台可以使用 NMI 报告未更正错误,并使用轮询向 OSPM 通知已更正错误
精简硬件 ACPI 平台可以使用 GPIO 信号事件、中断信号事件或轮询来报告已更正错误。
18.4.1. 示例:使用 NMI 通知的固件优先处理
如果平台选择使用 NMI 报告错误,这也是针对未更正错误的推荐方法,则平台执行以下步骤:
系统固件配置平台,以便在错误发生时触发固件处理程序
系统固件通过设置 FIRMWARE_FIRST 标志,经由错误源枚举接口标识它将处理其错误的错误源
系统固件描述通用错误源及其关联的错误状态块,如通用硬件错误源中所述。系统固件通过在通用硬件错误源结构的 related source ID 中使用原始源 ID 来标识通用错误源与原始错误源之间的关系。
当发生由该错误源报告的硬件错误时,系统固件获得控制权并按要求处理错误状态。完成后,系统固件应执行以下操作:
从错误源中提取错误信息,并将错误信息填入其在步骤 3 中标识为替代源的通用错误源的数据块中。错误信息格式遵循通用错误数据中的规范
在块状态字段(通用错误状态块)中设置适当的位,以向 OSPM 指示存在有效的错误状态。
从硬件中清除错误状态。
生成一个 NMI。
此时,OSPM 的 NMI 处理程序会扫描通用错误源列表,以找到报告该错误的错误源,并处理该错误报告