memory: Fix old_portio vs non-zero offset

The legacy functions that we're wrapping expect that offset
to be included in the register.  Indeed, they generally
expect the absolute address and then mask off the "high" bits.

The FDC is the first converted device with a non-zero offset.

Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Richard Henderson 2011-08-10 15:28:19 -07:00 committed by Avi Kivity
parent a5e1cbc80e
commit 563ea48903

View File

@ -396,7 +396,7 @@ static void memory_region_iorange_read(IORange *iorange,
*data = ((uint64_t)1 << (width * 8)) - 1;
if (mrp) {
*data = mrp->read(mr->opaque, offset - mrp->offset);
*data = mrp->read(mr->opaque, offset);
}
return;
}
@ -418,7 +418,7 @@ static void memory_region_iorange_write(IORange *iorange,
const MemoryRegionPortio *mrp = find_portio(mr, offset, width, true);
if (mrp) {
mrp->write(mr->opaque, offset - mrp->offset, data);
mrp->write(mr->opaque, offset, data);
}
return;
}