Revision b0a21b53 hw/i8259.c
b/hw/i8259.c | ||
---|---|---|
122 | 122 |
|
123 | 123 |
/* raise irq to CPU if necessary. must be called every time the active |
124 | 124 |
irq may change */ |
125 |
void pic_update_irq(void) |
|
125 |
static void pic_update_irq(void)
|
|
126 | 126 |
{ |
127 | 127 |
int irq2, irq; |
128 | 128 |
|
... | ... | |
160 | 160 |
|
161 | 161 |
#ifdef DEBUG_IRQ_LATENCY |
162 | 162 |
int64_t irq_time[16]; |
163 |
int64_t cpu_get_ticks(void); |
|
164 | 163 |
#endif |
165 | 164 |
#if defined(DEBUG_PIC) |
166 | 165 |
int irq_level[16]; |
... | ... | |
376 | 375 |
return ret; |
377 | 376 |
} |
378 | 377 |
|
378 |
static void pic_save(QEMUFile *f, void *opaque) |
|
379 |
{ |
|
380 |
PicState *s = opaque; |
|
381 |
|
|
382 |
qemu_put_8s(f, &s->last_irr); |
|
383 |
qemu_put_8s(f, &s->irr); |
|
384 |
qemu_put_8s(f, &s->imr); |
|
385 |
qemu_put_8s(f, &s->isr); |
|
386 |
qemu_put_8s(f, &s->priority_add); |
|
387 |
qemu_put_8s(f, &s->irq_base); |
|
388 |
qemu_put_8s(f, &s->read_reg_select); |
|
389 |
qemu_put_8s(f, &s->poll); |
|
390 |
qemu_put_8s(f, &s->special_mask); |
|
391 |
qemu_put_8s(f, &s->init_state); |
|
392 |
qemu_put_8s(f, &s->auto_eoi); |
|
393 |
qemu_put_8s(f, &s->rotate_on_auto_eoi); |
|
394 |
qemu_put_8s(f, &s->special_fully_nested_mode); |
|
395 |
qemu_put_8s(f, &s->init4); |
|
396 |
} |
|
397 |
|
|
398 |
static int pic_load(QEMUFile *f, void *opaque, int version_id) |
|
399 |
{ |
|
400 |
PicState *s = opaque; |
|
401 |
|
|
402 |
if (version_id != 1) |
|
403 |
return -EINVAL; |
|
404 |
|
|
405 |
qemu_get_8s(f, &s->last_irr); |
|
406 |
qemu_get_8s(f, &s->irr); |
|
407 |
qemu_get_8s(f, &s->imr); |
|
408 |
qemu_get_8s(f, &s->isr); |
|
409 |
qemu_get_8s(f, &s->priority_add); |
|
410 |
qemu_get_8s(f, &s->irq_base); |
|
411 |
qemu_get_8s(f, &s->read_reg_select); |
|
412 |
qemu_get_8s(f, &s->poll); |
|
413 |
qemu_get_8s(f, &s->special_mask); |
|
414 |
qemu_get_8s(f, &s->init_state); |
|
415 |
qemu_get_8s(f, &s->auto_eoi); |
|
416 |
qemu_get_8s(f, &s->rotate_on_auto_eoi); |
|
417 |
qemu_get_8s(f, &s->special_fully_nested_mode); |
|
418 |
qemu_get_8s(f, &s->init4); |
|
419 |
return 0; |
|
420 |
} |
|
421 |
|
|
422 |
/* XXX: add generic master/slave system */ |
|
423 |
static void pic_init1(int io_addr, PicState *s) |
|
424 |
{ |
|
425 |
register_ioport_write(io_addr, 2, 1, pic_ioport_write, s); |
|
426 |
register_ioport_read(io_addr, 2, 1, pic_ioport_read, s); |
|
427 |
|
|
428 |
register_savevm("i8259", io_addr, 1, pic_save, pic_load, s); |
|
429 |
} |
|
430 |
|
|
379 | 431 |
void pic_init(void) |
380 | 432 |
{ |
381 |
register_ioport_write(0x20, 2, 1, pic_ioport_write, &pics[0]); |
|
382 |
register_ioport_read(0x20, 2, 1, pic_ioport_read, &pics[0]); |
|
383 |
register_ioport_write(0xa0, 2, 1, pic_ioport_write, &pics[1]); |
|
384 |
register_ioport_read(0xa0, 2, 1, pic_ioport_read, &pics[1]); |
|
433 |
pic_init1(0x20, &pics[0]); |
|
434 |
pic_init1(0xa0, &pics[1]); |
|
385 | 435 |
} |
386 | 436 |
|
Also available in: Unified diff