12.3. 嵌入式控制器命令集
嵌入式控制器命令集允许 OSPM 与嵌入式控制器通信。ACPI 定义了与嵌入式控制器配合使用的命令及其字节编码,如下表所示。
表 12.2 嵌入式控制器命令
| 嵌入式控制器命令 | 命令字节编码 |
|---|---|
| 读取嵌入式控制器(RD_EC) | 0x80 |
| 写入嵌入式控制器(WR_EC) | 0x81 |
| 嵌入式控制器突发使能(BE_EC) | 0x82 |
| 嵌入式控制器突发禁用(BD_EC) | 0x83 |
| 查询嵌入式控制器(QR_EC) | 0x84 |
12.3.1. 读取嵌入式控制器,RD_EC (0x80)
该命令字节允许 OSPM 读取嵌入式控制器地址空间中的一个字节。该命令字节保留供 OSPM 独占使用,并指示嵌入式控制器针对相关事务(即 EC 状态寄存器中的 IBF=0 或 OBF=1)生成 SCI 响应,而不是 SMI。该命令由一个写入嵌入式控制器命令寄存器(EC_SC)的命令字节组成,后跟一个写入嵌入式控制器数据寄存器(EC_DATA)的地址字节。随后嵌入式控制器返回被寻址位置处的字节。在 OBF 标志被置位后,于数据端口读取该数据。
12.3.2. 写入嵌入式控制器,WR_EC (0x81)
该命令字节允许 OSPM 向嵌入式控制器地址空间中的一个字节写入数据。该命令字节保留供 OSPM 独占使用,并指示嵌入式控制器针对相关事务(即 EC 状态寄存器中的 IBF=0 或 OBF=1)生成 SCI 响应,而不是 SMI。该命令允许 OSPM 向嵌入式控制器地址空间中的一个字节写入数据。它由一个写入嵌入式控制器命令寄存器(EC_SC)的命令字节组成,后跟一个写入嵌入式控制器数据寄存器(EC_DATA)的地址字节,再后跟一个写入嵌入式控制器数据寄存器(EC_DATA)的数据字节;该数据字节会被写入被寻址的位置。
12.3.3. 嵌入式控制器突发使能,BE_EC (0x82)
该命令字节允许 OSPM 请求嵌入式控制器的专用关注,并且(关键事件除外)阻止嵌入式控制器执行除接收来自主机处理器(系统管理中断处理程序或 OSPM)的命令和数据之外的任务。该命令是一种优化,它允许主机处理器背靠背地发出多个命令,以降低嵌入式控制器接口处的延迟。当控制器处于突发模式时,如果主机未在以下指导原则规定的时间内发出命令,则其应转换到突发禁用状态:
首次访问 - 400 微秒
后续访问 - 每次 50 微秒
突发总时间 - 1 毫秒
此外,嵌入式控制器可以随时脱离突发模式以处理关键事件。如果嵌入式控制器出于突发禁用命令之外的任何原因禁用了突发模式,则应向 OSPM 生成一个 SCI 以指示该变化。
在突发模式下,嵌入式控制器针对 OSPM 驱动程序遵循以下指导原则:
SCI 按正常方式生成,包括 IBF=0 和 OBF=1。
访问应在 50 微秒内得到响应。
突发模式按以下方式进入:
OSPM 驱动程序写入嵌入式控制器突发使能 BE_EC (0x82) 命令字节,然后嵌入式控制器将准备进入突发模式。这包括处理任何常规活动,从而使其应能够在约 1 微秒内保持专用于 OSPM 接口。
嵌入式控制器设置嵌入式控制器状态寄存器的突发位,将突发确认字节(0x90)放入 SCI 输出缓冲区,设置 OBF 位,并生成一个 SCI,以向 OSPM 发出其处于突发模式的信号。
突发模式按以下方式退出:
OSPM 驱动程序写入嵌入式控制器突发禁用 BD_EC (0x83) 命令字节,然后嵌入式控制器将通过清除嵌入式控制器状态寄存器中的突发位并生成一个 SCI 信号(由于 IBF=0)来退出突发模式。
嵌入式控制器清除嵌入式控制器状态寄存器的突发位。
12.3.4. 嵌入式控制器突发禁用,BD_EC (0x83)
该命令字节将嵌入式控制器从先前的突发使能命令中释放出来,并允许其恢复正常处理。OSPM 或系统管理中断处理程序在其已完成向嵌入式控制器发送的整个排队命令序列之后发送此命令。
12.3.5. 查询嵌入式控制器,QR_EC (0x84)
当 EC_SC 寄存器中的 SCI_EVT 标志被置位时,OSPM 驱动程序发送该命令。当嵌入式控制器检测到必须传达给 OSPM 的系统事件时,它首先在 EC_SC 寄存器中设置 SCI_EVT 标志,生成一个 SCI,然后等待 OSPM 发送查询(QR_EC)命令。OSPM 检测到嵌入式控制器 SCI,看到 SCI_EVT 标志被置位,并向嵌入式控制器发送查询命令。在接收到 QR_EC 命令字节后,嵌入式控制器放置一个值介于 0-255 之间的通知字节,以指示该通知的原因。该通知字节指示 OSPM 应执行哪一个中断处理程序操作来处理嵌入式控制器 SCI。查询值 0 保留用于表示伪查询结果,并表示“没有未决事件”。