Revision 63858cd9 hw/parallel.c
b/hw/parallel.c | ||
---|---|---|
65 | 65 |
#define PARA_CTR_SIGNAL (PARA_CTR_SELECT|PARA_CTR_INIT|PARA_CTR_AUTOLF|PARA_CTR_STROBE) |
66 | 66 |
|
67 | 67 |
typedef struct ParallelState { |
68 |
MemoryRegion iomem; |
|
68 | 69 |
uint8_t dataw; |
69 | 70 |
uint8_t datar; |
70 | 71 |
uint8_t status; |
... | ... | |
555 | 556 |
parallel_ioport_write_sw(s, addr >> s->it_shift, value); |
556 | 557 |
} |
557 | 558 |
|
558 |
static CPUReadMemoryFunc * const parallel_mm_read_sw[] = { |
|
559 |
¶llel_mm_readb, |
|
560 |
¶llel_mm_readw, |
|
561 |
¶llel_mm_readl, |
|
562 |
}; |
|
563 |
|
|
564 |
static CPUWriteMemoryFunc * const parallel_mm_write_sw[] = { |
|
565 |
¶llel_mm_writeb, |
|
566 |
¶llel_mm_writew, |
|
567 |
¶llel_mm_writel, |
|
559 |
static const MemoryRegionOps parallel_mm_ops = { |
|
560 |
.old_mmio = { |
|
561 |
.read = { parallel_mm_readb, parallel_mm_readw, parallel_mm_readl }, |
|
562 |
.write = { parallel_mm_writeb, parallel_mm_writew, parallel_mm_writel }, |
|
563 |
}, |
|
564 |
.endianness = DEVICE_NATIVE_ENDIAN, |
|
568 | 565 |
}; |
569 | 566 |
|
570 | 567 |
/* If fd is zero, it means that the parallel device uses the console */ |
571 |
bool parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq, |
|
568 |
bool parallel_mm_init(MemoryRegion *address_space, |
|
569 |
target_phys_addr_t base, int it_shift, qemu_irq irq, |
|
572 | 570 |
CharDriverState *chr) |
573 | 571 |
{ |
574 | 572 |
ParallelState *s; |
575 |
int io_sw; |
|
576 | 573 |
|
577 | 574 |
s = g_malloc0(sizeof(ParallelState)); |
578 | 575 |
s->irq = irq; |
... | ... | |
580 | 577 |
s->it_shift = it_shift; |
581 | 578 |
qemu_register_reset(parallel_reset, s); |
582 | 579 |
|
583 |
io_sw = cpu_register_io_memory(parallel_mm_read_sw, parallel_mm_write_sw,
|
|
584 |
s, DEVICE_NATIVE_ENDIAN);
|
|
585 |
cpu_register_physical_memory(base, 8 << it_shift, io_sw);
|
|
580 |
memory_region_init_io(&s->iomem, ¶llel_mm_ops, s,
|
|
581 |
"parallel", 8 << it_shift);
|
|
582 |
memory_region_add_subregion(address_space, base, &s->iomem);
|
|
586 | 583 |
return true; |
587 | 584 |
} |
588 | 585 |
|
Also available in: Unified diff