[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V16 2/4] acpi: add a vm_generation_id_changed me
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [PATCH V16 2/4] acpi: add a vm_generation_id_changed method |
Date: |
Wed, 17 Jun 2015 00:55:50 +0200 |
On Tue, 16 Jun 2015 17:11:01 +0300
Gal Hammer <address@hidden> wrote:
> Add a new method to the AcpiDeviceIfClass interface. The new
> method sends an ACPI notfication when the VM generation id is
> changed.
>
> Signed-off-by: Gal Hammer <address@hidden>
> ---
> hw/acpi/core.c | 8 ++++++++
> hw/acpi/ich9.c | 8 ++++++++
> hw/acpi/piix4.c | 8 ++++++++
> hw/isa/lpc_ich9.c | 1 +
> include/hw/acpi/acpi.h | 2 ++
> include/hw/acpi/acpi_dev_interface.h | 4 ++++
> include/hw/acpi/ich9.h | 2 ++
> 7 files changed, 33 insertions(+)
>
> diff --git a/hw/acpi/core.c b/hw/acpi/core.c
> index 0f201d8..3c8d1eb 100644
> --- a/hw/acpi/core.c
> +++ b/hw/acpi/core.c
> @@ -29,6 +29,8 @@
> #include "qapi-visit.h"
> #include "qapi-event.h"
>
> +#define ACPI_VM_GENERATION_ID_CHANGED_STATUS 1
nowadays this should be a part of AcpiGPEStatusBits enum
> +
> struct acpi_table_header {
> uint16_t _length; /* our length, not actual part of the
> hdr */ /* allows easier parsing for fw_cfg clients */
> @@ -703,3 +705,9 @@ void acpi_update_sci(ACPIREGS *regs, qemu_irq irq)
> (regs->pm1.evt.en &
> ACPI_BITMASK_TIMER_ENABLE) && !(pm1a_sts &
> ACPI_BITMASK_TIMER_STATUS)); }
> +
> +void acpi_vm_generation_id_changed(ACPIREGS *acpi_regs, qemu_irq irq)
> +{
> + acpi_regs->gpe.sts[0] |= ACPI_VM_GENERATION_ID_CHANGED_STATUS;
> + acpi_update_sci(acpi_regs, irq);
replace above 2 with acpi_send_gpe_event()
> +}
> diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
> index 8a64ffb..cab1af7 100644
> --- a/hw/acpi/ich9.c
> +++ b/hw/acpi/ich9.c
> @@ -429,3 +429,11 @@ void ich9_pm_ospm_status(AcpiDeviceIf *adev,
> ACPIOSTInfoList ***list)
> acpi_memory_ospm_status(&s->pm.acpi_memory_hotplug, list);
> }
> +
> +void ich9_vm_generation_id_changed(AcpiDeviceIf *adev)
> +{
> + ICH9LPCState *s = ICH9_LPC_DEVICE(adev);
> + ICH9LPCPMRegs *pm = &s->pm;
> +
> + acpi_vm_generation_id_changed(&pm->acpi_regs, pm->irq);
> +}
> diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> index 3bd1d5a..101a13a 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -580,6 +580,13 @@ static void piix4_ospm_status(AcpiDeviceIf
> *adev, ACPIOSTInfoList ***list)
> acpi_memory_ospm_status(&s->acpi_memory_hotplug, list); }
>
> +static void piix4_vm_generation_id_changed(AcpiDeviceIf *adev)
> +{
> + PIIX4PMState *s = PIIX4_PM(adev);
> +
> + acpi_vm_generation_id_changed(&s->ar, s->irq);
> +}
> +
> static Property piix4_pm_properties[] = {
> DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0),
> DEFINE_PROP_UINT8(ACPI_PM_PROP_S3_DISABLED, PIIX4PMState,
> disable_s3, 0), @@ -618,6 +625,7 @@ static void
> piix4_pm_class_init(ObjectClass *klass, void *data)
> hc->unplug_request = piix4_device_unplug_request_cb; hc->unplug =
> piix4_device_unplug_cb; adevc->ospm_status = piix4_ospm_status;
> + adevc->vm_generation_id_changed = piix4_vm_generation_id_changed;
> }
>
> static const TypeInfo piix4_pm_info = {
> diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
> index b3e0b1f..f240a3a 100644
> --- a/hw/isa/lpc_ich9.c
> +++ b/hw/isa/lpc_ich9.c
> @@ -702,6 +702,7 @@ static void ich9_lpc_class_init(ObjectClass
> *klass, void *data) hc->unplug_request =
> ich9_device_unplug_request_cb; hc->unplug = ich9_device_unplug_cb;
> adevc->ospm_status = ich9_pm_ospm_status;
> + adevc->vm_generation_id_changed = ich9_vm_generation_id_changed;
> }
>
> static const TypeInfo ich9_lpc_info = {
> diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h
> index b20bd55..1a4caf2 100644
> --- a/include/hw/acpi/acpi.h
> +++ b/include/hw/acpi/acpi.h
> @@ -196,4 +196,6 @@ unsigned acpi_table_len(void *current);
> void acpi_table_add(const QemuOpts *opts, Error **errp);
> void acpi_table_add_builtin(const QemuOpts *opts, Error **errp);
>
> +void acpi_vm_generation_id_changed(ACPIREGS *acpi_regs, qemu_irq
> irq); +
> #endif /* !QEMU_HW_ACPI_H */
> diff --git a/include/hw/acpi/acpi_dev_interface.h
> b/include/hw/acpi/acpi_dev_interface.h index f245f8d..757ce60 100644
> --- a/include/hw/acpi/acpi_dev_interface.h
> +++ b/include/hw/acpi/acpi_dev_interface.h
> @@ -28,6 +28,9 @@ typedef struct AcpiDeviceIf {
> * ospm_status: returns status of ACPI device objects, reported
> * via _OST method if device supports it.
> *
> + * vm_generation_id_changed: notify the guest that it generation
> + * id was changed.
> + *
> * Interface is designed for providing unified interface
> * to generic ACPI functionality that could be used without
> * knowledge about internals of actual device that implements
> @@ -39,5 +42,6 @@ typedef struct AcpiDeviceIfClass {
>
> /* <public> */
> void (*ospm_status)(AcpiDeviceIf *adev, ACPIOSTInfoList ***list);
> + void (*vm_generation_id_changed)(AcpiDeviceIf *adev);
> } AcpiDeviceIfClass;
> #endif
> diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h
> index 77cc65c..497c004 100644
> --- a/include/hw/acpi/ich9.h
> +++ b/include/hw/acpi/ich9.h
> @@ -70,4 +70,6 @@ void ich9_pm_device_unplug_cb(ICH9LPCPMRegs *pm,
> DeviceState *dev, Error **errp);
>
> void ich9_pm_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList
> ***list); +
> +void ich9_vm_generation_id_changed(AcpiDeviceIf *adev);
> #endif /* HW_ACPI_ICH9_H */