Revision c3affe56 hw/apic.c
b/hw/apic.c | ||
---|---|---|
151 | 151 |
|
152 | 152 |
switch ((lvt >> 8) & 7) { |
153 | 153 |
case APIC_DM_SMI: |
154 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_SMI);
|
|
154 |
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_SMI);
|
|
155 | 155 |
break; |
156 | 156 |
|
157 | 157 |
case APIC_DM_NMI: |
158 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_NMI);
|
|
158 |
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_NMI);
|
|
159 | 159 |
break; |
160 | 160 |
|
161 | 161 |
case APIC_DM_EXTINT: |
162 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
|
|
162 |
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HARD);
|
|
163 | 163 |
break; |
164 | 164 |
|
165 | 165 |
case APIC_DM_FIXED: |
... | ... | |
248 | 248 |
|
249 | 249 |
case APIC_DM_SMI: |
250 | 250 |
foreach_apic(apic_iter, deliver_bitmask, |
251 |
cpu_interrupt(&apic_iter->cpu->env, CPU_INTERRUPT_SMI)
|
|
251 |
cpu_interrupt(CPU(apic_iter->cpu), CPU_INTERRUPT_SMI)
|
|
252 | 252 |
); |
253 | 253 |
return; |
254 | 254 |
|
255 | 255 |
case APIC_DM_NMI: |
256 | 256 |
foreach_apic(apic_iter, deliver_bitmask, |
257 |
cpu_interrupt(&apic_iter->cpu->env, CPU_INTERRUPT_NMI)
|
|
257 |
cpu_interrupt(CPU(apic_iter->cpu), CPU_INTERRUPT_NMI)
|
|
258 | 258 |
); |
259 | 259 |
return; |
260 | 260 |
|
261 | 261 |
case APIC_DM_INIT: |
262 | 262 |
/* normal INIT IPI sent to processors */ |
263 | 263 |
foreach_apic(apic_iter, deliver_bitmask, |
264 |
cpu_interrupt(&apic_iter->cpu->env,
|
|
264 |
cpu_interrupt(CPU(apic_iter->cpu),
|
|
265 | 265 |
CPU_INTERRUPT_INIT) |
266 | 266 |
); |
267 | 267 |
return; |
... | ... | |
363 | 363 |
/* signal the CPU if an irq is pending */ |
364 | 364 |
static void apic_update_irq(APICCommonState *s) |
365 | 365 |
{ |
366 |
CPUState *cpu = CPU(s->cpu);
|
|
366 |
CPUState *cpu; |
|
367 | 367 |
|
368 | 368 |
if (!(s->spurious_vec & APIC_SV_ENABLE)) { |
369 | 369 |
return; |
370 | 370 |
} |
371 |
cpu = CPU(s->cpu); |
|
371 | 372 |
if (!qemu_cpu_is_self(cpu)) { |
372 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_POLL);
|
|
373 |
cpu_interrupt(cpu, CPU_INTERRUPT_POLL);
|
|
373 | 374 |
} else if (apic_irq_pending(s) > 0) { |
374 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
|
|
375 |
cpu_interrupt(cpu, CPU_INTERRUPT_HARD);
|
|
375 | 376 |
} |
376 | 377 |
} |
377 | 378 |
|
... | ... | |
478 | 479 |
static void apic_startup(APICCommonState *s, int vector_num) |
479 | 480 |
{ |
480 | 481 |
s->sipi_vector = vector_num; |
481 |
cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_SIPI);
|
|
482 |
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_SIPI);
|
|
482 | 483 |
} |
483 | 484 |
|
484 | 485 |
void apic_sipi(DeviceState *d) |
Also available in: Unified diff