On Wed, 28 May 2025 12:39:52 -0400 Annie Li <annie...@oracle.com> wrote:
> The GPE event is triggered to notify x86 guest to sleep > itself. The function acpi_send_sleep_event will also > trigger GED events on HW-reduced systems where ACPI GED > sleep event is supported. > > Signed-off-by: Annie Li <annie...@oracle.com> > --- > hw/acpi/core.c | 12 ++++++++++++ > include/hw/acpi/acpi.h | 1 + > include/hw/acpi/acpi_dev_interface.h | 1 + > 3 files changed, 14 insertions(+) > > diff --git a/hw/acpi/core.c b/hw/acpi/core.c > index 58f8964e13..dcabe881bf 100644 > --- a/hw/acpi/core.c > +++ b/hw/acpi/core.c > @@ -359,6 +359,18 @@ int acpi_get_slic_oem(AcpiSlicOem *oem) > return -1; > } > > +void acpi_send_sleep_event(void) > +{ > + bool ambiguous; > + Object *obj = object_resolve_path_type("", TYPE_ACPI_DEVICE_IF, > &ambiguous); > + > + assert(!ambiguous); > + if (obj) { Can it ever be NULL? If not drop condition. > + /* Send sleep event */ > + acpi_send_event(DEVICE(obj), ACPI_SLEEP_STATUS); > + } > +} > + > static void acpi_notify_wakeup(Notifier *notifier, void *data) > { > ACPIREGS *ar = container_of(notifier, ACPIREGS, wakeup); > diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h > index d1a4fa2af8..64d3ff78ed 100644 > --- a/include/hw/acpi/acpi.h > +++ b/include/hw/acpi/acpi.h > @@ -184,6 +184,7 @@ uint32_t acpi_gpe_ioport_readb(ACPIREGS *ar, uint32_t > addr); > > void acpi_send_gpe_event(ACPIREGS *ar, qemu_irq irq, > AcpiEventStatusBits status); > +void acpi_send_sleep_event(void); > > void acpi_update_sci(ACPIREGS *acpi_regs, qemu_irq irq); > > diff --git a/include/hw/acpi/acpi_dev_interface.h > b/include/hw/acpi/acpi_dev_interface.h > index 68d9d15f50..1cb050cd3a 100644 > --- a/include/hw/acpi/acpi_dev_interface.h > +++ b/include/hw/acpi/acpi_dev_interface.h > @@ -13,6 +13,7 @@ typedef enum { > ACPI_NVDIMM_HOTPLUG_STATUS = 16, > ACPI_VMGENID_CHANGE_STATUS = 32, > ACPI_POWER_DOWN_STATUS = 64, > + ACPI_SLEEP_STATUS = 128, > } AcpiEventStatusBits; > > #define TYPE_ACPI_DEVICE_IF "acpi-device-interface"