parent
a640be9a24
commit
b2a1129bd9
|
@ -120,20 +120,15 @@ VMMDECL(VBOXSTRICTRC) IOMMMIOWrite(PVM pVM, PVMCPU, RTGCPHYS GCPhys,
|
||||||
*/
|
*/
|
||||||
if (rc == VERR_IOM_NOT_MMIO_RANGE_OWNER) {
|
if (rc == VERR_IOM_NOT_MMIO_RANGE_OWNER) {
|
||||||
|
|
||||||
/* implement what we need to - extend by need */
|
Assert(cbValue <= 4);
|
||||||
|
|
||||||
Assert((GCPhys & 3U) == 0);
|
|
||||||
Assert(cbValue == 1);
|
|
||||||
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
RTGCPHYS aligned = GCPhys & ~0x3U;
|
||||||
|
rc = guest_memory()->mmio_read(aligned, &value, sizeof(value));
|
||||||
|
|
||||||
rc = guest_memory()->mmio_read(GCPhys, &value, sizeof(value));
|
uint32_t offset = GCPhys & 0x3;
|
||||||
Assert(rc == VINF_SUCCESS);
|
memcpy(((char *)&value) + offset, &u32Value, cbValue);
|
||||||
|
rc = guest_memory()->mmio_write(aligned, value, sizeof(value));
|
||||||
value &= 0xffffff00;
|
|
||||||
value |= (u32Value & 0x000000ff);
|
|
||||||
|
|
||||||
rc = guest_memory()->mmio_write(GCPhys, value, sizeof(value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert(rc != VERR_IOM_NOT_MMIO_RANGE_OWNER);
|
Assert(rc != VERR_IOM_NOT_MMIO_RANGE_OWNER);
|
||||||
|
|
Loading…
Reference in New Issue