mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
cpu: Pass CPUState to cpu_interrupt()
Move it to qom/cpu.h to avoid issues with include order. Change pc_acpi_smi_interrupt() opaque to X86CPU. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
@@ -1309,7 +1309,7 @@ void qmp_inject_nmi(Error **errp)
|
||||
|
||||
for (env = first_cpu; env != NULL; env = env->next_cpu) {
|
||||
if (!env->apic_state) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_NMI);
|
||||
cpu_interrupt(CPU(x86_env_get_cpu(env)), CPU_INTERRUPT_NMI);
|
||||
} else {
|
||||
apic_deliver_nmi(env->apic_state);
|
||||
}
|
||||
|
||||
@@ -1467,7 +1467,7 @@ static void check_watchpoint(int offset, int len_mask, int flags)
|
||||
/* We re-entered the check after replacing the TB. Now raise
|
||||
* the debug interrupt so that is will trigger after the
|
||||
* current instruction. */
|
||||
cpu_interrupt(env, CPU_INTERRUPT_DEBUG);
|
||||
cpu_interrupt(ENV_GET_CPU(env), CPU_INTERRUPT_DEBUG);
|
||||
return;
|
||||
}
|
||||
vaddr = (env->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
|
||||
|
||||
+4
-6
@@ -62,10 +62,9 @@ static void cpu_irq_change(AlphaCPU *cpu, uint64_t req)
|
||||
{
|
||||
/* If there are any non-masked interrupts, tell the cpu. */
|
||||
if (cpu != NULL) {
|
||||
CPUAlphaState *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
if (req) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
@@ -359,11 +358,10 @@ static void cchip_write(void *opaque, hwaddr addr,
|
||||
for (i = 0; i < 4; ++i) {
|
||||
AlphaCPU *cpu = s->cchip.cpu[i];
|
||||
if (cpu != NULL) {
|
||||
CPUAlphaState *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
/* IPI can be either cleared or set by the write. */
|
||||
if (newval & (1 << (i + 8))) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_SMP);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_SMP);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_SMP);
|
||||
}
|
||||
@@ -687,7 +685,7 @@ static void typhoon_set_timer_irq(void *opaque, int irq, int level)
|
||||
/* Set the ITI bit for this cpu. */
|
||||
s->cchip.misc |= 1 << (i + 4);
|
||||
/* And signal the interrupt. */
|
||||
cpu_interrupt(&cpu->env, CPU_INTERRUPT_TIMER);
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_TIMER);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -700,7 +698,7 @@ static void typhoon_alarm_timer(void *opaque)
|
||||
|
||||
/* Set the ITI bit for this cpu. */
|
||||
s->cchip.misc |= 1 << (cpu + 4);
|
||||
cpu_interrupt(&s->cchip.cpu[cpu]->env, CPU_INTERRUPT_TIMER);
|
||||
cpu_interrupt(CPU(s->cchip.cpu[cpu]), CPU_INTERRUPT_TIMER);
|
||||
}
|
||||
|
||||
PCIBus *typhoon_init(ram_addr_t ram_size, ISABus **isa_bus,
|
||||
|
||||
@@ -151,15 +151,15 @@ static void apic_local_deliver(APICCommonState *s, int vector)
|
||||
|
||||
switch ((lvt >> 8) & 7) {
|
||||
case APIC_DM_SMI:
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_SMI);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_SMI);
|
||||
break;
|
||||
|
||||
case APIC_DM_NMI:
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_NMI);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_NMI);
|
||||
break;
|
||||
|
||||
case APIC_DM_EXTINT:
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HARD);
|
||||
break;
|
||||
|
||||
case APIC_DM_FIXED:
|
||||
@@ -248,20 +248,20 @@ static void apic_bus_deliver(const uint32_t *deliver_bitmask,
|
||||
|
||||
case APIC_DM_SMI:
|
||||
foreach_apic(apic_iter, deliver_bitmask,
|
||||
cpu_interrupt(&apic_iter->cpu->env, CPU_INTERRUPT_SMI)
|
||||
cpu_interrupt(CPU(apic_iter->cpu), CPU_INTERRUPT_SMI)
|
||||
);
|
||||
return;
|
||||
|
||||
case APIC_DM_NMI:
|
||||
foreach_apic(apic_iter, deliver_bitmask,
|
||||
cpu_interrupt(&apic_iter->cpu->env, CPU_INTERRUPT_NMI)
|
||||
cpu_interrupt(CPU(apic_iter->cpu), CPU_INTERRUPT_NMI)
|
||||
);
|
||||
return;
|
||||
|
||||
case APIC_DM_INIT:
|
||||
/* normal INIT IPI sent to processors */
|
||||
foreach_apic(apic_iter, deliver_bitmask,
|
||||
cpu_interrupt(&apic_iter->cpu->env,
|
||||
cpu_interrupt(CPU(apic_iter->cpu),
|
||||
CPU_INTERRUPT_INIT)
|
||||
);
|
||||
return;
|
||||
@@ -363,15 +363,16 @@ static int apic_irq_pending(APICCommonState *s)
|
||||
/* signal the CPU if an irq is pending */
|
||||
static void apic_update_irq(APICCommonState *s)
|
||||
{
|
||||
CPUState *cpu = CPU(s->cpu);
|
||||
CPUState *cpu;
|
||||
|
||||
if (!(s->spurious_vec & APIC_SV_ENABLE)) {
|
||||
return;
|
||||
}
|
||||
cpu = CPU(s->cpu);
|
||||
if (!qemu_cpu_is_self(cpu)) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_POLL);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_POLL);
|
||||
} else if (apic_irq_pending(s) > 0) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -478,7 +479,7 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask,
|
||||
static void apic_startup(APICCommonState *s, int vector_num)
|
||||
{
|
||||
s->sipi_vector = vector_num;
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_SIPI);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_SIPI);
|
||||
}
|
||||
|
||||
void apic_sipi(DeviceState *d)
|
||||
|
||||
+2
-2
@@ -1523,7 +1523,7 @@ static inline void omap_clkm_idlect1_update(struct omap_mpu_state_s *s,
|
||||
omap_clk clk;
|
||||
|
||||
if (value & (1 << 11)) { /* SETARM_IDLE */
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HALT);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HALT);
|
||||
}
|
||||
if (!(value & (1 << 10))) /* WKUP_MODE */
|
||||
qemu_system_shutdown_request(); /* XXX: disable wakeup from IRQ */
|
||||
@@ -3759,7 +3759,7 @@ void omap_mpu_wakeup(void *opaque, int irq, int req)
|
||||
CPUState *cpu = CPU(mpu->cpu);
|
||||
|
||||
if (cpu->halted) {
|
||||
cpu_interrupt(&mpu->cpu->env, CPU_INTERRUPT_EXITTB);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_EXITTB);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -15,20 +15,19 @@
|
||||
static void arm_pic_cpu_handler(void *opaque, int irq, int level)
|
||||
{
|
||||
ARMCPU *cpu = opaque;
|
||||
CPUARMState *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
|
||||
switch (irq) {
|
||||
case ARM_PIC_CPU_IRQ:
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
break;
|
||||
case ARM_PIC_CPU_FIQ:
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_FIQ);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_FIQ);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_FIQ);
|
||||
}
|
||||
|
||||
+4
-3
@@ -263,14 +263,14 @@ static int pxa2xx_pwrmode_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||
case 1:
|
||||
/* Idle */
|
||||
if (!(s->cm_regs[CCCR >> 2] & (1 << 31))) { /* CPDIS */
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HALT);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HALT);
|
||||
break;
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
case 2:
|
||||
/* Deep-Idle */
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HALT);
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HALT);
|
||||
s->pm_regs[RCSR >> 2] |= 0x8; /* Set GPR */
|
||||
goto message;
|
||||
|
||||
@@ -301,7 +301,8 @@ static int pxa2xx_pwrmode_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||
#endif
|
||||
|
||||
/* Suspend */
|
||||
cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT);
|
||||
cpu_interrupt(CPU(arm_env_get_cpu(cpu_single_env)),
|
||||
CPU_INTERRUPT_HALT);
|
||||
|
||||
goto message;
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ static void pxa2xx_gpio_set(void *opaque, int line, int level)
|
||||
|
||||
/* Wake-up GPIOs */
|
||||
if (cpu->halted && (mask & ~s->dir[bank] & pxa2xx_gpio_wake[bank])) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_EXITTB);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_EXITTB);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -52,7 +52,7 @@ static void pxa2xx_pic_update(void *opaque)
|
||||
mask[0] = s->int_pending[0] & (s->int_enabled[0] | s->int_idle);
|
||||
mask[1] = s->int_pending[1] & (s->int_enabled[1] | s->int_idle);
|
||||
if (mask[0] || mask[1]) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_EXITTB);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_EXITTB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,13 +60,13 @@ static void pxa2xx_pic_update(void *opaque)
|
||||
mask[1] = s->int_pending[1] & s->int_enabled[1];
|
||||
|
||||
if ((mask[0] & s->is_fiq[0]) || (mask[1] & s->is_fiq[1])) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_FIQ);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_FIQ);
|
||||
} else {
|
||||
cpu_reset_interrupt(cpu, CPU_INTERRUPT_FIQ);
|
||||
}
|
||||
|
||||
if ((mask[0] & ~s->is_fiq[0]) || (mask[1] & ~s->is_fiq[1])) {
|
||||
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
+1
-2
@@ -31,12 +31,11 @@
|
||||
static void cris_pic_cpu_handler(void *opaque, int irq, int level)
|
||||
{
|
||||
CRISCPU *cpu = opaque;
|
||||
CPUCRISState *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
int type = irq ? CPU_INTERRUPT_NMI : CPU_INTERRUPT_HARD;
|
||||
|
||||
if (level) {
|
||||
cpu_interrupt(env, type);
|
||||
cpu_interrupt(cs, type);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, type);
|
||||
}
|
||||
|
||||
+3
-3
@@ -192,7 +192,7 @@ static void pic_irq_request(void *opaque, int irq, int level)
|
||||
} else {
|
||||
CPUState *cs = CPU(x86_env_get_cpu(env));
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
@@ -856,10 +856,10 @@ DeviceState *cpu_get_current_apic(void)
|
||||
|
||||
void pc_acpi_smi_interrupt(void *opaque, int irq, int level)
|
||||
{
|
||||
CPUX86State *s = opaque;
|
||||
X86CPU *cpu = opaque;
|
||||
|
||||
if (level) {
|
||||
cpu_interrupt(s, CPU_INTERRUPT_SMI);
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_SMI);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -205,7 +205,8 @@ static void pc_init1(MemoryRegion *system_memory,
|
||||
if (pci_enabled && acpi_enabled) {
|
||||
i2c_bus *smbus;
|
||||
|
||||
smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
|
||||
smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt,
|
||||
x86_env_get_cpu(first_cpu), 1);
|
||||
/* TODO: Populate SPD eeprom data. */
|
||||
smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
|
||||
gsi[9], *smi_irq,
|
||||
|
||||
@@ -42,11 +42,10 @@ typedef struct {
|
||||
static void cpu_irq_handler(void *opaque, int irq, int level)
|
||||
{
|
||||
LM32CPU *cpu = opaque;
|
||||
CPULM32State *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
+1
-2
@@ -47,11 +47,10 @@ typedef struct {
|
||||
static void cpu_irq_handler(void *opaque, int irq, int level)
|
||||
{
|
||||
LM32CPU *cpu = opaque;
|
||||
CPULM32State *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
+1
-1
@@ -381,7 +381,7 @@ static void ich9_apm_ctrl_changed(uint32_t val, void *arg)
|
||||
|
||||
/* SMI_EN = PMBASE + 30. SMI control and enable register */
|
||||
if (lpc->pm.smi_en & ICH9_PMIO_SMI_EN_APMC_EN) {
|
||||
cpu_interrupt(first_cpu, CPU_INTERRUPT_SMI);
|
||||
cpu_interrupt(CPU(x86_env_get_cpu(first_cpu)), CPU_INTERRUPT_SMI);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,12 +30,11 @@
|
||||
static void microblaze_pic_cpu_handler(void *opaque, int irq, int level)
|
||||
{
|
||||
MicroBlazeCPU *cpu = opaque;
|
||||
CPUMBState *env = &cpu->env;
|
||||
CPUState *cs = CPU(cpu);
|
||||
int type = irq ? CPU_INTERRUPT_NMI : CPU_INTERRUPT_HARD;
|
||||
|
||||
if (level) {
|
||||
cpu_interrupt(env, type);
|
||||
cpu_interrupt(cs, type);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, type);
|
||||
}
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ static void cpu_mips_irq_request(void *opaque, int irq, int level)
|
||||
}
|
||||
|
||||
if (env->CP0_Cause & CP0Ca_IP_mask) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ static void openrisc_pic_cpu_handler(void *opaque, int irq, int level)
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
if ((cpu->env.picsr && (1 << i)) && (cpu->env.picmr && (1 << i))) {
|
||||
cpu_interrupt(&cpu->env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
cpu->env.picsr &= ~(1 << i);
|
||||
|
||||
+3
-3
@@ -58,7 +58,7 @@ void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level)
|
||||
|
||||
if (level) {
|
||||
env->pending_interrupts |= 1 << n_IRQ;
|
||||
cpu_interrupt(env, CPU_INTERRUPT_HARD);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||||
} else {
|
||||
env->pending_interrupts &= ~(1 << n_IRQ);
|
||||
if (env->pending_interrupts == 0) {
|
||||
@@ -137,7 +137,7 @@ static void ppc6xx_set_irq(void *opaque, int pin, int level)
|
||||
/* Level sensitive - active low */
|
||||
if (level) {
|
||||
LOG_IRQ("%s: reset the CPU\n", __func__);
|
||||
cpu_interrupt(env, CPU_INTERRUPT_RESET);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_RESET);
|
||||
}
|
||||
break;
|
||||
case PPC6xx_INPUT_SRESET:
|
||||
@@ -219,7 +219,7 @@ static void ppc970_set_irq(void *opaque, int pin, int level)
|
||||
case PPC970_INPUT_HRESET:
|
||||
/* Level sensitive - active low */
|
||||
if (level) {
|
||||
cpu_interrupt(env, CPU_INTERRUPT_RESET);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_RESET);
|
||||
}
|
||||
break;
|
||||
case PPC970_INPUT_SRESET:
|
||||
|
||||
+2
-2
@@ -1776,7 +1776,7 @@ void ppc40x_core_reset(PowerPCCPU *cpu)
|
||||
target_ulong dbsr;
|
||||
|
||||
printf("Reset PowerPC core\n");
|
||||
cpu_interrupt(env, CPU_INTERRUPT_RESET);
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET);
|
||||
dbsr = env->spr[SPR_40x_DBSR];
|
||||
dbsr &= ~0x00000300;
|
||||
dbsr |= 0x00000100;
|
||||
@@ -1789,7 +1789,7 @@ void ppc40x_chip_reset(PowerPCCPU *cpu)
|
||||
target_ulong dbsr;
|
||||
|
||||
printf("Reset PowerPC chip\n");
|
||||
cpu_interrupt(env, CPU_INTERRUPT_RESET);
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET);
|
||||
/* XXX: TODO reset all internal peripherals */
|
||||
dbsr = env->spr[SPR_40x_DBSR];
|
||||
dbsr &= ~0x00000300;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user