Revision 8da3ff18 hw/serial.c
b/hw/serial.c | ||
---|---|---|
125 | 125 |
qemu_irq irq; |
126 | 126 |
CharDriverState *chr; |
127 | 127 |
int last_break_enable; |
128 |
target_phys_addr_t base; |
|
129 | 128 |
int it_shift; |
130 | 129 |
int baudbase; |
131 | 130 |
int tsr_retry; |
... | ... | |
750 | 749 |
{ |
751 | 750 |
SerialState *s = opaque; |
752 | 751 |
|
753 |
return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFF;
|
|
752 |
return serial_ioport_read(s, addr >> s->it_shift) & 0xFF;
|
|
754 | 753 |
} |
755 | 754 |
|
756 | 755 |
void serial_mm_writeb (void *opaque, |
... | ... | |
758 | 757 |
{ |
759 | 758 |
SerialState *s = opaque; |
760 | 759 |
|
761 |
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFF);
|
|
760 |
serial_ioport_write(s, addr >> s->it_shift, value & 0xFF);
|
|
762 | 761 |
} |
763 | 762 |
|
764 | 763 |
uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr) |
... | ... | |
766 | 765 |
SerialState *s = opaque; |
767 | 766 |
uint32_t val; |
768 | 767 |
|
769 |
val = serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
|
|
768 |
val = serial_ioport_read(s, addr >> s->it_shift) & 0xFFFF;
|
|
770 | 769 |
#ifdef TARGET_WORDS_BIGENDIAN |
771 | 770 |
val = bswap16(val); |
772 | 771 |
#endif |
... | ... | |
780 | 779 |
#ifdef TARGET_WORDS_BIGENDIAN |
781 | 780 |
value = bswap16(value); |
782 | 781 |
#endif |
783 |
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
|
|
782 |
serial_ioport_write(s, addr >> s->it_shift, value & 0xFFFF);
|
|
784 | 783 |
} |
785 | 784 |
|
786 | 785 |
uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr) |
... | ... | |
788 | 787 |
SerialState *s = opaque; |
789 | 788 |
uint32_t val; |
790 | 789 |
|
791 |
val = serial_ioport_read(s, (addr - s->base) >> s->it_shift);
|
|
790 |
val = serial_ioport_read(s, addr >> s->it_shift);
|
|
792 | 791 |
#ifdef TARGET_WORDS_BIGENDIAN |
793 | 792 |
val = bswap32(val); |
794 | 793 |
#endif |
... | ... | |
802 | 801 |
#ifdef TARGET_WORDS_BIGENDIAN |
803 | 802 |
value = bswap32(value); |
804 | 803 |
#endif |
805 |
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value);
|
|
804 |
serial_ioport_write(s, addr >> s->it_shift, value);
|
|
806 | 805 |
} |
807 | 806 |
|
808 | 807 |
static CPUReadMemoryFunc *serial_mm_read[] = { |
... | ... | |
828 | 827 |
if (!s) |
829 | 828 |
return NULL; |
830 | 829 |
|
831 |
s->base = base; |
|
832 | 830 |
s->it_shift = it_shift; |
833 | 831 |
|
834 | 832 |
serial_init_core(s, irq, baudbase, chr); |
Also available in: Unified diff