You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSPM接收SCI后如何判断事件类型及对应检查的寄存器?

OSPM接收SCI后如何区分固定事件与通用事件?

我正在学习ACPI事件编程模型。根据ACPI 6.5规范,SCI(System Control Interrupt,系统控制中断)由两类事件触发:fixed event(固定事件)和general-purpose event(通用事件)。

ACPI 6.5规范第5.6.1节表5.185中的相关定义:

PM1x_STS位触发固定ACPI事件。当PM1x_STS位被置位时,若对应的PM1x_EN位也被置位,则会触发ACPI SCI事件。
GPEx_STS位触发通用事件。当GPEx_STS位被置位时,若对应的GPEx_EN位也被置位,则会触发通用SCI事件。

核心疑问是:当OSPM(操作系统中负责电源管理和平台配置的子系统)接收到SCI时,如何判断该SCI对应的是哪种事件?这直接影响处理逻辑——固定事件由OSPM自行处理,通用事件则可能需要调用ASL控制方法,但ACPI规范中未明确说明这一点。

换一种表述:OSPM可通过检查PM1x_STS或GPEx_STS寄存器确定触发源,但它如何知晓应检查哪个寄存器?还是会同时检查两者?


实际处理逻辑

OSPM不会提前知晓SCI的触发源类型,而是通过遍历所有已初始化的事件状态寄存器来排查,具体流程如下:

  • 初始化阶段准备:OSPM会从ACPI表(如FADT、GPE块描述表)中获取所有PM1x_STS、GPEx_STS及其对应使能寄存器的地址、位定义等信息,并完成注册。
  • SCI触发后的排查:当SCI中断发生时,OSPM会按照既定优先级(通常先固定事件,后通用事件)逐一检查这些寄存器:
    1. 先读取PM1x_STS寄存器,匹配已置位且对应PM1x_EN位也置位的标志,若找到则判定为固定事件,进入内核级处理流程;
    2. 若PM1x_STS中无有效事件,则依次检查各个GPEx_STS寄存器,找到符合条件的置位标志后,判定为通用事件,进而调用对应的ASL控制方法(如_Lxx/_Exx)处理。
  • 多事件处理:硬件可能同时触发多个事件,OSPM会遍历所有寄存器,处理所有有效事件后才结束本次SCI中断处理。

这种全覆盖检查的逻辑是ACPI实现的通用标准,虽然规范未明确写出遍历顺序,但主流OSPM(如Linux ACPI子系统、Windows ACPI驱动)均采用此方式。


内容的提问来源于stack exchange,提问作者smwikipedia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:42:41