Hi Igor,

On 6/3/2025 8:34 AM, Igor Mammedov wrote:
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.

assert happens earlier if it is NULL.

will drop it.

Thanks

Annie


+        /* 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"

Reply via email to