mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 20:05:54 +00:00
qemu-usb: support read/write of unused IO ranges
The XHCI model reserves 0x4000 of IO memory but uses only 0x530. Implement read (0) and write (nop) for these regions as real hardware does. fixes #4902
This commit is contained in:
parent
f8bcb1999e
commit
ccc04a7082
@ -633,18 +633,28 @@ struct Controller : public Qemu::Controller
|
||||
MemoryRegionOps const *ops;
|
||||
} mmio_regions [max_numports() + 4 /* number of HC MMIO regions */];
|
||||
|
||||
|
||||
uint64_t _mmio_size;
|
||||
|
||||
typedef Genode::Hex Hex;
|
||||
|
||||
/*
|
||||
* The device model does not implement the whole _mmio_size, add read/write
|
||||
* for the gaps.
|
||||
*/
|
||||
static uint64_t _read_unsued(void *, hwaddr, unsigned) { return 0ul; }
|
||||
static void _write_unsused(void *, hwaddr, uint64_t, unsigned) { }
|
||||
MemoryRegionOps _ops { _read_unsued, _write_unsused };
|
||||
Mmio _unused_region { 0, 0, 0, &_ops };
|
||||
|
||||
Controller()
|
||||
{
|
||||
Genode::memset(mmio_regions, 0, sizeof(mmio_regions));
|
||||
}
|
||||
|
||||
void mmio_add_region(uint64_t size) { _mmio_size = size; }
|
||||
void mmio_add_region(uint64_t size) { _mmio_size = size; }
|
||||
|
||||
void mmio_add_region_io(Genode::addr_t id, uint64_t size, MemoryRegionOps const *ops)
|
||||
void mmio_add_region_io(Genode::addr_t id, uint64_t size, MemoryRegionOps const *ops)
|
||||
{
|
||||
for (Mmio &mmio : mmio_regions) {
|
||||
if (mmio.id != 0) continue;
|
||||
@ -664,12 +674,10 @@ struct Controller : public Qemu::Controller
|
||||
return mmio;
|
||||
}
|
||||
|
||||
Genode::error("could not find MMIO region for offset: ",
|
||||
Genode::Hex(offset));
|
||||
throw -1;
|
||||
return _unused_region;
|
||||
}
|
||||
|
||||
void mmio_add_sub_region(Genode::addr_t id, Genode::off_t offset)
|
||||
void mmio_add_sub_region(Genode::addr_t id, Genode::off_t offset)
|
||||
{
|
||||
for (Mmio &mmio : mmio_regions) {
|
||||
if (mmio.id != id) continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user