Commit d9c32310 authored by Blue Swirl's avatar Blue Swirl
Browse files

Use qemu_irq for system_powerdown



Signed-off-by: default avatarBlue Swirl <blauwirbel@gmail.com>
parent b2b6f6ec
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -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
+1 −8
Original line number Diff line number Diff line
@@ -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)
+0 −4
Original line number Diff line number Diff line
@@ -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;
+1 −8
Original line number Diff line number Diff line
@@ -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);
+5 −2
Original line number Diff line number Diff line
@@ -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);
    }