WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH V5 14/14] acpi-piix4: Add Xen hypercall for sleep sta

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 c8733e5..058bd5f 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
 
@@ -168,6 +169,9 @@ static void pm_ioport_writew(void *opaque, uint32_t addr, 
uint32_t val)
                     if (s->cmos_s3) {
                         qemu_irq_raise(s->cmos_s3);
                     }
+                    if (xen_enabled()) {
+                        xen_set_hvm_sleep_state();
+                    }
                 default:
                     break;
                 }
diff --git a/hw/xen.h b/hw/xen.h
index 0261ae6..23796bc 100644
--- a/hw/xen.h
+++ b/hw/xen.h
@@ -38,6 +38,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 fc862cb..11a5911 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -459,6 +459,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


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel