12.11. 在 ACPI 命名空间中定义嵌入式控制器设备
嵌入式控制器设备使用命名设备对象创建。嵌入式控制器的设备对象需要以下元素:
表 12.19 嵌入式控制器设备对象控制方法
| 对象 | 描述 |
|---|---|
| _CRS | 返回嵌入式控制器当前资源设置的命名对象。嵌入式控制器被视为静态资源;因此只返回其定义的资源。嵌入式控制器仅驻留在系统 I/O 或内存空间中。返回的第一个地址区域是数据端口,返回的第二个地址区域是嵌入式控制器的状态/命令端口。如果 EC 用于 硬件精简 ACPI 平台,则需要第三种资源,即用于 EC 的 SCI 中断的 GPIO Interrupt Connection 资源。CRS 是在 _CRS (Current Resource Settings) 中定义的标准设备配置控制方法。 |
| _HID | 提供嵌入式控制器即插即用标识符的命名对象。该值设置为 PNP0C09。_HID 是在 _HID (Hardware ID) 中定义的标准设备配置控制方法。 |
| _GPE | 求值结果为整数或 package 的命名对象。如果 _GPE 求值为整数,则该值是嵌入式控制器将触发的、由 FADT 描述的某个 GPE 块中的 GPEx_STS 寄存器内 SCI 中断的位分配。如果 _GPE 求值为 package,则该 package 包含两个元素。第一个元素是对 GPE Block 设备的对象引用,该设备包含将由嵌入式控制器触发的 GPE 寄存器。第二个元素是数值(整数),用于指定 package 中第一个元素所引用的 GPE Block 设备的 GPEx_STS 寄存器内 SCI 中断的位分配。此控制方法特定于嵌入式控制器。在硬件精简 ACPI 平台上不需要此方法。 |
12.11.1. 示例:EC 定义 ASL 代码
下面显示了定义嵌入式控制器设备的 ASL 代码示例:
Device(EC0) {
// PnP ID
Name(_HID, EISAID("PNP0C09"))
// Returns the "Current Resources" of EC
Name(_CRS,
ResourceTemplate(){ // port 0x62 and 0x66
IO(Decode16, 0x62, 0x62, 0, 1),
IO(Decode16, 0x66, 0x66, 0, 1)
/* For 硬件精简 ACPI Platforms, include a GPIO Interrupt Connection resource,
e.g. GPIO controller #2, pin 43.
GpioInt(Edge, ActiveHigh, ExclusiveAndWake,PullUp 0, "\\_SB.GPI2"){43}
*/
}
)
// Define that the EC SCI is bit 0 of the GP_STS register
Name(_GPE, 0) // Not required for 硬件精简 ACPI platforms
OperationRegion(ECOR, EmbeddedControl, 0, 0xFF)
Field(ECOR, ByteAcc, Lock, Preserve) {
// Field definitions go here
}
}