9.11. GPE 块设备
GPE 块设备是一个可选设备,它允许系统设计者描述超出 FADT 中所描述的两个 GPE 块之外的 GPE 块。与 GPE 块设备的 GPE 引脚相关联的控制方法是 GPE 块设备的子对象,而不是位于 \_GPE 命名空间中。由于 GPE 块设备旨在作为 FADT 中定义的 GPE 块的扩展,而 FADT 的该部分在硬件精简 ACPI 中应被忽略,因此硬件精简 ACPI 不支持 GPE 块设备。
GPE 块设备占用 I/O 或内存地址空间,具体由其子对象 _PRS 或 _CRS 指定。GPE 块使用的中断向量不需要与 SCI_INT 字段相同。GPE 块设备使用的中断由与该 GPE 块相关联的 _CRS 和 _PRS 方法指定。GPE 块设备的 _CRS 只能指定单个寄存器地址范围,可以是 I/O 或内存。该范围包含两个寄存器:GPE 状态寄存器和使能寄存器。每个寄存器的长度定义为 _CRS 所定义寄存器地址范围长度的一半。
GPE 块设备必须具有值为 “ACPI0006” 的 _HID 或 _CID。
注
系统设计者必须将系统引导所必需的 GPE 块在 FADT 中描述为 GPE0/GPE1 块。GPE 块设备不能用于实现这些 GPE 输入。*
GPE 块设备必须包含使用和编程该块所需的 _Lxx、_Exx、_Wxx、_CRS、_PRS 和 _SRS 方法。
为了表示与 FADT 相关联的 GPE 块,系统设计者应在命名空间中包含一个 _HID 为 ACPI0006 的 Device 对象,该对象不包含 _CRS、_PRS、_SRS、_Lxx、_Exx 或 _Wxx 方法。OSPM 假定第一个这样的 ACPI0006 设备就是与 FADT GPE 相关联的 GPE 块设备。(见下面的示例)。
// ASL example of a standard GPE block device
Device(\_SB.PCI0.GPE1) {
Name(_HID, "ACPI0006")
Name(_UID, 2)
Name(_CRS, Buffer () {
IO(Decode16, FC00, FC03, 4, 4,)
IRQ( Level, ActiveHigh, Shared,) { 5 }
})
Method(_L02) { ... }
Method(_E07) { ... }
Method(_W04) { ... }
}
// ASL example of a GPE block device that refers to the FADT GPEs.
// Cannot contain any \_Lxx, \_Exx, \_Wxx, \_CRS, \_PRS, or. \_SRS methods.
Device(\_SB.PCI0.GPE0) {
Name(_HID,"ACPI0006")
Name(_UID,1)
}
请注意,如果寄存器是内存映射的,则可以合法地用 Memory 描述符替换 I/O 描述符。
如果系统必须运行某些 GPE 才能引导系统(例如,当需要 Embedded Controller 事件时),则相关的 GPE 块必须在 FADT 中描述。该寄存器块不可重定位,并且在操作系统引导的整个生命周期内始终可用。
与 ACPI0006 _HID 相关联的 GPE 块可以被停止、弹出、重新编程,等等。系统也可以具有多个这样的 GPE 块。
9.11.1. GPE 块设备中事件的匹配控制方法
当 GPE 设备触发中断时,OSPM 执行相应的控制方法(参见将匹配的控制方法加入执行队列)。这些用于 GPE 设备的控制方法(形式为 _Lxx、_Exx 和 _Wxx)不在 _GPE 命名空间中。它们是 GPE 块设备的子对象。
例如:
Device(GPE5) {
Name(_HID, "ACPI0006")
Method(_L02) { ... }
Method(_E07) { ... }
Method(_W04) { ... }
}