diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/acpi.c | 28 | ||||
-rw-r--r-- | hw/sun4m.c | 9 | ||||
-rw-r--r-- | hw/sun4u.c | 4 |
3 files changed, 17 insertions, 24 deletions
@@ -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 5e47240af3..abadfd6ffe 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 cede477cc7..59bcf64ebe 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; |