Revision d7d02e3c hw/i8259.c
b/hw/i8259.c | ||
---|---|---|
231 | 231 |
return intno; |
232 | 232 |
} |
233 | 233 |
|
234 |
static void pic_reset(void *opaque) |
|
235 |
{ |
|
236 |
PicState *s = opaque; |
|
237 |
int tmp; |
|
238 |
|
|
239 |
tmp = s->elcr_mask; |
|
240 |
memset(s, 0, sizeof(PicState)); |
|
241 |
s->elcr_mask = tmp; |
|
242 |
} |
|
243 |
|
|
234 | 244 |
static void pic_ioport_write(void *opaque, uint32_t addr, uint32_t val) |
235 | 245 |
{ |
236 | 246 |
PicState *s = opaque; |
237 |
int priority, cmd, irq, tmp;
|
|
247 |
int priority, cmd, irq; |
|
238 | 248 |
|
239 | 249 |
#ifdef DEBUG_PIC |
240 | 250 |
printf("pic_write: addr=0x%02x val=0x%02x\n", addr, val); |
... | ... | |
243 | 253 |
if (addr == 0) { |
244 | 254 |
if (val & 0x10) { |
245 | 255 |
/* init */ |
246 |
tmp = s->elcr_mask; |
|
247 |
memset(s, 0, sizeof(PicState)); |
|
248 |
s->elcr_mask = tmp; |
|
256 |
pic_reset(s); |
|
249 | 257 |
/* deassert a pending interrupt */ |
250 | 258 |
cpu_reset_interrupt(cpu_single_env, CPU_INTERRUPT_HARD); |
251 | 259 |
|
... | ... | |
458 | 466 |
register_ioport_read(elcr_addr, 1, 1, elcr_ioport_read, s); |
459 | 467 |
} |
460 | 468 |
register_savevm("i8259", io_addr, 1, pic_save, pic_load, s); |
469 |
qemu_register_reset(pic_reset, s); |
|
461 | 470 |
} |
462 | 471 |
|
463 | 472 |
void pic_info(void) |
Also available in: Unified diff