QEMU 与 ACPI BIOS 通用事件设备接口
ACPI 通用事件设备 (GED)在 ACPI v6.1 引入,面向硬件精简平台, 处理包括热插拔在内的全部平台事件。GED 在命名空间中建模为设备, _HID 为 ACPI0013。本文描述 QEMU 与 ACPI BIOS 的接口。
GED 允许硬件精简平台在 ACPI ASL 中处理中断,方式类似 GPIO 事件的 _EVT。 全部中断列在 _CRS,处理程序写在 _EVT。 不过 QEMU 为 GED 仅使用一个中断,通过 I/O 内存区域传递受影响的设备类型, 从而可用一个中断支持最多 32 种事件。
示例如下:
Device (\_SB.GED)
{
Name (_HID, "ACPI0013")
Name (_UID, Zero)
Name (_CRS, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, )
{
0x00000029,
}
})
OperationRegion (EREG, SystemMemory, 0x09080000, 0x04)
Field (EREG, DWordAcc, NoLock, WriteAsZeros)
{
ESEL, 32
}
Method (_EVT, 1, Serialized)
{
Local0 = ESEL // ESEL = IO memory region which specifies the
// device type.
If (((Local0 & One) == One))
{
MethodEvent1()
}
If ((Local0 & 0x2) == 0x2)
{
MethodEvent2()
}
...
}
}
GED I/O 接口(4 字节访问)
读取:
[0x0-0x3] QEMU 设置的 32 位事件选择器位域。
位:
0: 内存热插拔事件
1: 系统关机事件
2: NVDIMM 热插拔事件
3: CPU 热插拔事件
4-31: 保留
写入:
不应向 GED I/O 内存写入任何内容。