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