Revision 1a7de94a hw/apic.c
b/hw/apic.c | ||
---|---|---|
166 | 166 |
tab[i] &= ~mask; |
167 | 167 |
} |
168 | 168 |
|
169 |
void apic_local_deliver(CPUState *env, int vector) |
|
169 |
static void apic_local_deliver(CPUState *env, int vector)
|
|
170 | 170 |
{ |
171 | 171 |
APICState *s = env->apic_state; |
172 | 172 |
uint32_t lvt = s->lvt[vector]; |
... | ... | |
197 | 197 |
} |
198 | 198 |
} |
199 | 199 |
|
200 |
void apic_deliver_pic_intr(CPUState *env, int level) |
|
201 |
{ |
|
202 |
if (level) |
|
203 |
apic_local_deliver(env, APIC_LVT_LINT0); |
|
204 |
else { |
|
205 |
APICState *s = env->apic_state; |
|
206 |
uint32_t lvt = s->lvt[APIC_LVT_LINT0]; |
|
207 |
|
|
208 |
switch ((lvt >> 8) & 7) { |
|
209 |
case APIC_DM_FIXED: |
|
210 |
if (!(lvt & APIC_LVT_LEVEL_TRIGGER)) |
|
211 |
break; |
|
212 |
reset_bit(s->irr, lvt & 0xff); |
|
213 |
/* fall through */ |
|
214 |
case APIC_DM_EXTINT: |
|
215 |
cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); |
|
216 |
break; |
|
217 |
} |
|
218 |
} |
|
219 |
} |
|
220 |
|
|
200 | 221 |
#define foreach_apic(apic, deliver_bitmask, code) \ |
201 | 222 |
{\ |
202 | 223 |
int __i, __j, __mask;\ |
Also available in: Unified diff