qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [COMMIT d9c3231] Use qemu_irq for system_powerdown


From: Anthony Liguori
Subject: [Qemu-commits] [COMMIT d9c3231] Use qemu_irq for system_powerdown
Date: Mon, 10 Aug 2009 21:48:08 -0000

From: Blue Swirl <address@hidden>

Signed-off-by: Blue Swirl <address@hidden>

diff --git a/hw/acpi.c b/hw/acpi.c
index 056e4c6..37a5d98 100644
--- a/hw/acpi.c
+++ b/hw/acpi.c
@@ -496,6 +496,20 @@ static void piix4_reset(void *opaque)
     }
 }
 
+static void piix4_powerdown(void *opaque, int irq, int power_failing)
+{
+#if defined(TARGET_I386)
+    PIIX4PMState *s = opaque;
+
+    if (!s) {
+        qemu_system_shutdown_request();
+    } else if (s->pmen & PWRBTN_EN) {
+        s->pmsts |= PWRBTN_EN;
+        pm_update_sci(s);
+    }
+#endif
+}
+
 i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
                        qemu_irq sci_irq)
 {
@@ -545,6 +559,8 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t 
smb_io_base,
 
     s->tmr_timer = qemu_new_timer(vm_clock, pm_tmr_timer, s);
 
+    qemu_system_powerdown = *qemu_allocate_irqs(piix4_powerdown, s, 1);
+
     register_savevm("piix4_pm", 0, 1, pm_save, pm_load, s);
 
     s->smbus = i2c_init_bus(NULL, "i2c");
@@ -554,18 +570,6 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t 
smb_io_base,
     return s->smbus;
 }
 
-#if defined(TARGET_I386)
-void qemu_system_powerdown(void)
-{
-    if (!pm_state) {
-        qemu_system_shutdown_request();
-    } else if (pm_state->pmen & PWRBTN_EN) {
-        pm_state->pmsts |= PWRBTN_EN;
-       pm_update_sci(pm_state);
-    }
-}
-#endif
-
 #define GPE_BASE 0xafe0
 #define PCI_BASE 0xae00
 #define PCI_EJ_BASE 0xae08
diff --git a/hw/sun4m.c b/hw/sun4m.c
index 5e47240..abadfd6 100644
--- a/hw/sun4m.c
+++ b/hw/sun4m.c
@@ -451,13 +451,6 @@ static void slavio_timer_init_all(target_phys_addr_t addr, 
qemu_irq master_irq,
 #define MISC_MDM  0x01b00000
 #define MISC_SYS  0x01f00000
 
-static qemu_irq slavio_powerdown;
-
-void qemu_system_powerdown(void)
-{
-    qemu_irq_raise(slavio_powerdown);
-}
-
 static void slavio_misc_init(target_phys_addr_t base,
                              target_phys_addr_t aux1_base,
                              target_phys_addr_t aux2_base, qemu_irq irq,
@@ -494,7 +487,7 @@ static void slavio_misc_init(target_phys_addr_t base,
     }
     sysbus_connect_irq(s, 0, irq);
     sysbus_connect_irq(s, 1, fdc_tc);
-    slavio_powerdown = qdev_get_gpio_in(dev, 0);
+    qemu_system_powerdown = qdev_get_gpio_in(dev, 0);
 }
 
 static void ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version)
diff --git a/hw/sun4u.c b/hw/sun4u.c
index cede477..59bcf64 100644
--- a/hw/sun4u.c
+++ b/hw/sun4u.c
@@ -254,10 +254,6 @@ static void cpu_set_irq(void *opaque, int irq, int level)
     }
 }
 
-void qemu_system_powerdown(void)
-{
-}
-
 typedef struct ResetData {
     CPUState *env;
     uint64_t reset_addr;
diff --git a/sysemu.h b/sysemu.h
index 6af88d8..c7065ac 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -47,14 +47,7 @@ void qemu_system_powerdown_request(void);
 int qemu_shutdown_requested(void);
 int qemu_reset_requested(void);
 int qemu_powerdown_requested(void);
-#ifdef NEED_CPU_H
-#if !defined(TARGET_SPARC) && !defined(TARGET_I386)
-// Please implement a power failure function to signal the OS
-#define qemu_system_powerdown() do{}while(0)
-#else
-void qemu_system_powerdown(void);
-#endif
-#endif
+extern qemu_irq qemu_system_powerdown;
 void qemu_system_reset(void);
 
 void do_savevm(Monitor *mon, const char *name);
diff --git a/vl.c b/vl.c
index fdd4f03..a526cb0 100644
--- a/vl.c
+++ b/vl.c
@@ -4281,6 +4281,8 @@ static int vm_can_run(void)
     return 1;
 }
 
+qemu_irq qemu_system_powerdown;
+
 static void main_loop(void)
 {
     int r;
@@ -4321,8 +4323,9 @@ static void main_loop(void)
             qemu_system_reset();
             resume_all_vcpus();
         }
-        if (qemu_powerdown_requested())
-            qemu_system_powerdown();
+        if (qemu_powerdown_requested()) {
+            qemu_irq_raise(qemu_system_powerdown);
+        }
         if ((r = qemu_vmstop_requested()))
             vm_stop(r);
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]