Commit 33093a0afc069cc505e35b2580260faad4a6ecd4
1 parent
0c34a5d7
Parallel port reset
Attached patch adds a reset handler to parallel port, so it gets correct register values after a reset. (Hervé Poussineau) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5942 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
11 additions
and
5 deletions
hw/parallel.c
| ... | ... | @@ -418,8 +418,10 @@ static uint32_t parallel_ioport_ecp_read(void *opaque, uint32_t addr) |
| 418 | 418 | return ret; |
| 419 | 419 | } |
| 420 | 420 | |
| 421 | -static void parallel_reset(ParallelState *s, qemu_irq irq, CharDriverState *chr) | |
| 421 | +static void parallel_reset(void *opaque) | |
| 422 | 422 | { |
| 423 | + ParallelState *s = opaque; | |
| 424 | + | |
| 423 | 425 | s->datar = ~0; |
| 424 | 426 | s->dataw = ~0; |
| 425 | 427 | s->status = PARA_STS_BUSY; |
| ... | ... | @@ -430,9 +432,7 @@ static void parallel_reset(ParallelState *s, qemu_irq irq, CharDriverState *chr) |
| 430 | 432 | s->control = PARA_CTR_SELECT; |
| 431 | 433 | s->control |= PARA_CTR_INIT; |
| 432 | 434 | s->control |= 0xc0; |
| 433 | - s->irq = irq; | |
| 434 | 435 | s->irq_pending = 0; |
| 435 | - s->chr = chr; | |
| 436 | 436 | s->hw_driver = 0; |
| 437 | 437 | s->epp_timeout = 0; |
| 438 | 438 | s->last_read_offset = ~0U; |
| ... | ... | @@ -447,7 +447,10 @@ ParallelState *parallel_init(int base, qemu_irq irq, CharDriverState *chr) |
| 447 | 447 | s = qemu_mallocz(sizeof(ParallelState)); |
| 448 | 448 | if (!s) |
| 449 | 449 | return NULL; |
| 450 | - parallel_reset(s, irq, chr); | |
| 450 | + s->irq = irq; | |
| 451 | + s->chr = chr; | |
| 452 | + parallel_reset(s); | |
| 453 | + qemu_register_reset(parallel_reset, s); | |
| 451 | 454 | |
| 452 | 455 | if (qemu_chr_ioctl(chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) { |
| 453 | 456 | s->hw_driver = 1; |
| ... | ... | @@ -538,8 +541,11 @@ ParallelState *parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq |
| 538 | 541 | s = qemu_mallocz(sizeof(ParallelState)); |
| 539 | 542 | if (!s) |
| 540 | 543 | return NULL; |
| 541 | - parallel_reset(s, irq, chr); | |
| 544 | + s->irq = irq; | |
| 545 | + s->chr = chr; | |
| 542 | 546 | s->it_shift = it_shift; |
| 547 | + parallel_reset(s); | |
| 548 | + qemu_register_reset(parallel_reset, s); | |
| 543 | 549 | |
| 544 | 550 | io_sw = cpu_register_io_memory(0, parallel_mm_read_sw, parallel_mm_write_sw, s); |
| 545 | 551 | cpu_register_physical_memory(base, 8 << it_shift, io_sw); | ... | ... |