Hi Igor,
On 6/3/2025 8:34 AM, Igor Mammedov wrote:
> On Wed, 28 May 2025 12:39:52 -0400
> Annie Li <annie.li@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.li@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"