On Tue, Jan 25, 2011 at 02:29:20PM +0000, anthony.perard@xxxxxxxxxx wrote:
> From: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
> hw/acpi_piix4.c | 4 ++++
> hw/xen.h | 2 ++
> xen-all.c | 7 +++++++
> xen-stub.c | 4 ++++
> 4 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
> index 5bbc2b5..ea94bf9 100644
> --- a/hw/acpi_piix4.c
> +++ b/hw/acpi_piix4.c
> @@ -23,6 +23,7 @@
> #include "acpi.h"
> #include "sysemu.h"
> #include "range.h"
> +#include "xen.h"
>
> //#define DEBUG
>
> @@ -181,6 +182,9 @@ static void pm_ioport_write(IORange *ioport, uint64_t
> addr, unsigned width,
> if (s->cmos_s3) {
> qemu_irq_raise(s->cmos_s3);
> }
> + if (xen_enabled()) {
> + xen_set_hvm_sleep_state();
> + }
> default:
> break;
> }
Why not utilize cmos_s3 callback?
Something like
- cmos_s3 = qemu_allocate_irqs(pc_cmos_set_s3_resume, rtc_state, 1);
+ cmos_s3 = qemu_allocate_irqs(xen_cmos_set_s3_resume, rtc_state, 1);
smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
isa_reserve_irq(9), *cmos_s3, *smi_irq,
kvm_enabled());
xen_cmos_set_s3_resume()
pc_cmos_set_s3_resume()
xen_set_hvm_sleep_state()
thanks,
> diff --git a/hw/xen.h b/hw/xen.h
> index dd3fb68..8920550 100644
> --- a/hw/xen.h
> +++ b/hw/xen.h
> @@ -44,6 +44,8 @@ int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
> void xen_piix3_set_irq(void *opaque, int irq_num, int level);
> void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int
> len);
>
> +void xen_set_hvm_sleep_state(void);
> +
> int xen_init(int smp_cpus);
>
> #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)
> diff --git a/xen-all.c b/xen-all.c
> index c2d37d6..86ebfcb 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -464,6 +464,13 @@ static void xen_main_loop_prepare(XenIOState *state)
> }
>
>
> +/* ACPI */
> +
> +void xen_set_hvm_sleep_state(void)
> +{
> + xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 3);
> +}
> +
> /* Initialise Xen */
>
> static void xen_vm_change_state_handler(void *opaque, int running, int
> reason)
> diff --git a/xen-stub.c b/xen-stub.c
> index c9f477d..d22f475 100644
> --- a/xen-stub.c
> +++ b/xen-stub.c
> @@ -28,6 +28,10 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size)
> {
> }
>
> +void xen_set_hvm_sleep_state(void)
> +{
> +}
> +
> int xen_init(int smp_cpus)
> {
> return -ENOSYS;
> --
> 1.7.1
>
>
--
yamahata
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|