Annie Li <annie...@oracle.com> writes:

> The GPE event is triggered to notify x86 guest to suppend
> 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                       | 10 ++++++++++
>  include/hw/acpi/acpi.h               |  1 +
>  include/hw/acpi/acpi_dev_interface.h |  1 +
>  3 files changed, 12 insertions(+)
>
> diff --git a/hw/acpi/core.c b/hw/acpi/core.c
> index 58f8964e13..00a9d226f0 100644
> --- a/hw/acpi/core.c
> +++ b/hw/acpi/core.c
> @@ -359,6 +359,16 @@ int acpi_get_slic_oem(AcpiSlicOem *oem)
>      return -1;
>  }
>  
> +void acpi_send_sleep_event(void)
> +{
> +    Object *obj = object_resolve_path_type("", TYPE_ACPI_DEVICE_IF,
> NULL);

Is it a fair assumption there will only ever be one QOM object that
provides the TYPE_ACPI_DEVICE_IF interface on a system?

> +
> +    if (obj) {
> +        /* 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"

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro

Reply via email to