Revision 16ef61c9 memory.c
b/memory.c | ||
---|---|---|
165 | 165 |
} |
166 | 166 |
} |
167 | 167 |
|
168 |
static void memory_region_prepare_ram_addr(MemoryRegion *mr); |
|
169 |
|
|
168 | 170 |
static void as_memory_range_add(AddressSpace *as, FlatRange *fr) |
169 | 171 |
{ |
170 | 172 |
ram_addr_t phys_offset, region_offset; |
171 | 173 |
|
174 |
memory_region_prepare_ram_addr(fr->mr); |
|
175 |
|
|
172 | 176 |
phys_offset = fr->mr->ram_addr; |
173 | 177 |
region_offset = fr->offset_in_region; |
174 | 178 |
/* cpu_register_physical_memory_log() wants region_offset for |
... | ... | |
519 | 523 |
memory_region_write_thunk_l, |
520 | 524 |
}; |
521 | 525 |
|
526 |
static void memory_region_prepare_ram_addr(MemoryRegion *mr) |
|
527 |
{ |
|
528 |
if (mr->backend_registered) { |
|
529 |
return; |
|
530 |
} |
|
531 |
|
|
532 |
mr->ram_addr = cpu_register_io_memory(memory_region_read_thunk, |
|
533 |
memory_region_write_thunk, |
|
534 |
mr, |
|
535 |
mr->ops->endianness); |
|
536 |
mr->backend_registered = true; |
|
537 |
} |
|
538 |
|
|
522 | 539 |
void memory_region_init_io(MemoryRegion *mr, |
523 | 540 |
const MemoryRegionOps *ops, |
524 | 541 |
void *opaque, |
... | ... | |
529 | 546 |
mr->ops = ops; |
530 | 547 |
mr->opaque = opaque; |
531 | 548 |
mr->terminates = true; |
532 |
mr->ram_addr = cpu_register_io_memory(memory_region_read_thunk, |
|
533 |
memory_region_write_thunk, |
|
534 |
mr, |
|
535 |
mr->ops->endianness); |
|
549 |
mr->backend_registered = false; |
|
536 | 550 |
} |
537 | 551 |
|
538 | 552 |
void memory_region_init_ram(MemoryRegion *mr, |
... | ... | |
543 | 557 |
memory_region_init(mr, name, size); |
544 | 558 |
mr->terminates = true; |
545 | 559 |
mr->ram_addr = qemu_ram_alloc(dev, name, size); |
560 |
mr->backend_registered = true; |
|
546 | 561 |
} |
547 | 562 |
|
548 | 563 |
void memory_region_init_ram_ptr(MemoryRegion *mr, |
... | ... | |
554 | 569 |
memory_region_init(mr, name, size); |
555 | 570 |
mr->terminates = true; |
556 | 571 |
mr->ram_addr = qemu_ram_alloc_from_ptr(dev, name, size, ptr); |
572 |
mr->backend_registered = true; |
|
557 | 573 |
} |
558 | 574 |
|
559 | 575 |
void memory_region_init_alias(MemoryRegion *mr, |
Also available in: Unified diff