}
}
+static void memory_region_set_ops(MemoryRegion *mr,
+ const MemoryRegionOps *ops,
+ void *opaque)
+{
+ mr->ops = ops ?: &unassigned_mem_ops;
+ mr->opaque = opaque;
+ mr->terminates = true;
+}
+
void memory_region_init_io(MemoryRegion *mr,
Object *owner,
const MemoryRegionOps *ops,
uint64_t size)
{
memory_region_init(mr, owner, name, size);
- mr->ops = ops ? ops : &unassigned_mem_ops;
- mr->opaque = opaque;
- mr->terminates = true;
+ memory_region_set_ops(mr, ops, opaque);
}
bool memory_region_init_ram_nomigrate(MemoryRegion *mr,
{
memory_region_init(mr, owner, name, size);
mr->ram = true;
- mr->terminates = true;
mr->ram_device = true;
- mr->ops = &ram_device_mem_ops;
- mr->opaque = mr;
+ memory_region_set_ops(mr, &ram_device_mem_ops, mr);
mr->destructor = memory_region_destructor_ram;
/* qemu_ram_alloc_from_ptr cannot fail with ptr != NULL. */
assert(ops);
memory_region_init(mr, owner, name, size);
- mr->ops = ops;
- mr->opaque = opaque;
- mr->terminates = true;
+ memory_region_set_ops(mr, ops, opaque);
mr->rom_device = true;
mr->destructor = memory_region_destructor_ram;
mr->ram_block = qemu_ram_alloc(size, 0, mr, &err);