Revision 8dd69b8f hw/apic.c
b/hw/apic.c | ||
---|---|---|
109 | 109 |
|
110 | 110 |
switch (delivery_mode) { |
111 | 111 |
case APIC_DM_LOWPRI: |
112 |
/* XXX: search for focus processor, arbitration */ |
|
113 |
if (deliver_bitmask) { |
|
114 |
uint32_t m = 1; |
|
115 |
while ((deliver_bitmask & m) == 0) |
|
116 |
m <<= 1; |
|
117 |
deliver_bitmask = m; |
|
118 |
} |
|
119 |
break; |
|
120 |
|
|
112 | 121 |
case APIC_DM_FIXED: |
113 |
/* XXX: arbitration */ |
|
114 | 122 |
break; |
115 | 123 |
|
116 | 124 |
case APIC_DM_SMI: |
... | ... | |
336 | 344 |
static void apic_startup(APICState *s, int vector_num) |
337 | 345 |
{ |
338 | 346 |
CPUState *env = s->cpu_env; |
339 |
if (!env->cpu_halted)
|
|
347 |
if (!(env->hflags & HF_HALTED_MASK))
|
|
340 | 348 |
return; |
341 | 349 |
env->eip = 0; |
342 | 350 |
cpu_x86_load_seg_cache(env, R_CS, vector_num << 8, vector_num << 12, |
343 | 351 |
0xffff, 0); |
344 |
env->cpu_halted = 0;
|
|
352 |
env->hflags &= ~HF_HALTED_MASK;
|
|
345 | 353 |
} |
346 | 354 |
|
347 | 355 |
static void apic_deliver(APICState *s, uint8_t dest, uint8_t dest_mode, |
... | ... | |
368 | 376 |
} |
369 | 377 |
|
370 | 378 |
switch (delivery_mode) { |
371 |
case APIC_DM_LOWPRI: |
|
372 |
/* XXX: search for focus processor, arbitration */ |
|
373 |
dest = s->id; |
|
374 |
break; |
|
375 |
|
|
376 | 379 |
case APIC_DM_INIT: |
377 | 380 |
{ |
378 | 381 |
int trig_mode = (s->icr[0] >> 15) & 1; |
Also available in: Unified diff