mirror of https://github.com/proxmox/mirror_qemu
docs/specs: Add ACPI GED documentation
Documents basic concepts of ACPI Generic Event device(GED) and interface between QEMU and the ACPI BIOS. Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Message-Id: <20190918130633.4872-10-shameerali.kolothum.thodi@huawei.com> Acked-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>master
parent
1962f31b86
commit
e86fba5009
|
@ -0,0 +1,70 @@
|
||||||
|
==================================================
|
||||||
|
QEMU and ACPI BIOS Generic Event Device interface
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
The ACPI *Generic Event Device* (GED) is a HW reduced platform
|
||||||
|
specific device introduced in ACPI v6.1 that handles all platform
|
||||||
|
events, including the hotplug ones. GED is modelled as a device
|
||||||
|
in the namespace with a _HID defined to be ACPI0013. This document
|
||||||
|
describes the interface between QEMU and the ACPI BIOS.
|
||||||
|
|
||||||
|
GED allows HW reduced platforms to handle interrupts in ACPI ASL
|
||||||
|
statements. It follows a very similar approach to the _EVT method
|
||||||
|
from GPIO events. All interrupts are listed in _CRS and the handler
|
||||||
|
is written in _EVT method. However, the QEMU implementation uses a
|
||||||
|
single interrupt for the GED device, relying on an IO memory region
|
||||||
|
to communicate the type of device affected by the interrupt. This way,
|
||||||
|
we can support up to 32 events with a unique interrupt.
|
||||||
|
|
||||||
|
**Here is an example,**
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
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 IO interface (4 byte access)
|
||||||
|
--------------------------------
|
||||||
|
**read access:**
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[0x0-0x3] Event selector bit field (32 bit) set by QEMU.
|
||||||
|
|
||||||
|
bits:
|
||||||
|
0: Memory hotplug event
|
||||||
|
1: System power down event
|
||||||
|
2-31: Reserved
|
||||||
|
|
||||||
|
**write_access:**
|
||||||
|
|
||||||
|
Nothing is expected to be written into GED IO memory
|
|
@ -12,3 +12,4 @@ Contents:
|
||||||
|
|
||||||
ppc-xive
|
ppc-xive
|
||||||
ppc-spapr-xive
|
ppc-spapr-xive
|
||||||
|
acpi_hw_reduced_hotplug
|
||||||
|
|
Loading…
Reference in New Issue