12.1. 嵌入式控制器接口描述
嵌入式控制器是用于支持 OEM 特定实现的一类通用微控制器。ACPI 规范支持任何平台设计中的嵌入式控制器,只要该微控制器符合本节所描述的模型之一即可。嵌入式控制器的一项独特特性在于,它能够通过与主机微处理器的简单接口执行复杂的低层功能。
尽管当今市场上的微控制器种类繁多,但最常用的嵌入式控制器包含一个主机接口,用于将嵌入式控制器连接到主机数据总线,从而实现双向通信。双向中断方案可减少主机处理器与嵌入式控制器通信时的延迟。
目前,集成到微控制器中的最常见主机接口架构是以标准 IA-PC 架构键盘控制器为模型的。该键盘控制器通过系统 I/O 空间中的 0x60 和 0x64 进行访问。端口 0x60 称为数据寄存器,允许主机与嵌入式控制器之间进行双向数据传输。端口 0x64 称为命令/状态寄存器;读取该端口时返回端口状态信息,写入该端口时则向嵌入式控制器生成命令序列。同类控制器还包括第二个解码范围,它通过具有命令/状态寄存器和数据寄存器而共享与键盘接口相同的属性。下图以图形方式描述了该接口。

图 12.1 共享接口
上图描述了 ACPI 嵌入式控制器接口所支持的通用寄存器模型。
第一种方法使用由 OSPM 和系统管理代码共享的嵌入式控制器接口,这需要全局锁信号量开销来仲裁所有权。第二种方法是专用于 OSPM 驱动程序的嵌入式控制器专用解码范围。下图说明了包含专用 ACPI 接口的嵌入式控制器架构。

图 12.2 私有接口
私有接口允许 OSPM 在不使用与全局锁相关的额外软件开销的情况下与嵌入式控制器通信。若干常见系统配置可以提供额外的嵌入式控制器接口:
非共享嵌入式控制器。这将是最常见的情况,即当系统转换到 ACPI 模式时,系统管理处理程序无需与嵌入式控制器通信。OSPM 处理所有正常类型的系统管理事件,而系统管理处理程序无需采取任何动作。
集成键盘控制器和嵌入式控制器。这通过在现有组件(芯片组、I/O 控制器)中包含标准键盘控制器,并添加一个具有两个接口、用于系统管理活动的离散标准嵌入式控制器,来提供前面所述的三个主机接口。
标准键盘控制器和嵌入式控制器。这通过将键盘控制器作为独立组件提供,并在嵌入式控制器中提供两个用于系统管理活动的主机接口,从而提供三个主机接口。
两个嵌入式控制器。这通过使用两个嵌入式控制器提供最多四个主机接口;其中一个控制器用于系统管理活动并提供最多两个主机接口,另一个控制器用于键盘控制器功能并提供最多两个主机接口。
嵌入式控制器且无键盘控制器。未来的平台可能通过完全不同的机制提供键盘功能,这将允许嵌入式控制器中具有两个用于系统管理活动的主机接口。
为了处理通用嵌入式控制器接口(与专用接口模型相对)模型,提供了一种方法,使嵌入式控制器成为在操作系统控制下运行的多个任务与系统管理中断处理程序之间可共享的资源。本节所述的方法需要进行若干更改:
额外的外部硬件
嵌入式控制器固件更改
系统管理中断处理程序固件更改
操作软件更改
对共享嵌入式控制器接口的访问需要额外的软件,以在操作系统使用该接口与系统管理处理程序使用该接口之间进行仲裁。这是通过使用第 6.5.7 节所述的全局锁来完成的,但硬件精简 ACPI 平台不支持此方式。
这种接口共享协议还要求对嵌入式控制器固件进行更改,以确保接口处不会发生冲突。如果一个字节被放入系统输出缓冲区,随后又产生了一个中断,则可能发生冲突。在一个很短的时间窗口内,错误的接收方可能会收到该数据。通过确保嵌入式控制器中的固件在 OSPM 或系统管理处理程序请求之前不将任何数据放入输出缓冲区,可以解决这个问题。
以下各节将提供更详细的算法和说明。