Revision a8170e5e memory.c
b/memory.c | ||
---|---|---|
209 | 209 |
/* Range of memory in the global map. Addresses are absolute. */ |
210 | 210 |
struct FlatRange { |
211 | 211 |
MemoryRegion *mr; |
212 |
target_phys_addr_t offset_in_region;
|
|
212 |
hwaddr offset_in_region;
|
|
213 | 213 |
AddrRange addr; |
214 | 214 |
uint8_t dirty_log_mask; |
215 | 215 |
bool readable; |
... | ... | |
300 | 300 |
} |
301 | 301 |
|
302 | 302 |
static void memory_region_read_accessor(void *opaque, |
303 |
target_phys_addr_t addr,
|
|
303 |
hwaddr addr,
|
|
304 | 304 |
uint64_t *value, |
305 | 305 |
unsigned size, |
306 | 306 |
unsigned shift, |
... | ... | |
317 | 317 |
} |
318 | 318 |
|
319 | 319 |
static void memory_region_write_accessor(void *opaque, |
320 |
target_phys_addr_t addr,
|
|
320 |
hwaddr addr,
|
|
321 | 321 |
uint64_t *value, |
322 | 322 |
unsigned size, |
323 | 323 |
unsigned shift, |
... | ... | |
333 | 333 |
mr->ops->write(mr->opaque, addr, tmp, size); |
334 | 334 |
} |
335 | 335 |
|
336 |
static void access_with_adjusted_size(target_phys_addr_t addr,
|
|
336 |
static void access_with_adjusted_size(hwaddr addr,
|
|
337 | 337 |
uint64_t *value, |
338 | 338 |
unsigned size, |
339 | 339 |
unsigned access_size_min, |
340 | 340 |
unsigned access_size_max, |
341 | 341 |
void (*access)(void *opaque, |
342 |
target_phys_addr_t addr,
|
|
342 |
hwaddr addr,
|
|
343 | 343 |
uint64_t *value, |
344 | 344 |
unsigned size, |
345 | 345 |
unsigned shift, |
... | ... | |
478 | 478 |
{ |
479 | 479 |
MemoryRegion *subregion; |
480 | 480 |
unsigned i; |
481 |
target_phys_addr_t offset_in_region;
|
|
481 |
hwaddr offset_in_region;
|
|
482 | 482 |
Int128 remain; |
483 | 483 |
Int128 now; |
484 | 484 |
FlatRange fr; |
... | ... | |
817 | 817 |
} |
818 | 818 |
|
819 | 819 |
static bool memory_region_access_valid(MemoryRegion *mr, |
820 |
target_phys_addr_t addr,
|
|
820 |
hwaddr addr,
|
|
821 | 821 |
unsigned size, |
822 | 822 |
bool is_write) |
823 | 823 |
{ |
... | ... | |
843 | 843 |
} |
844 | 844 |
|
845 | 845 |
static uint64_t memory_region_dispatch_read1(MemoryRegion *mr, |
846 |
target_phys_addr_t addr,
|
|
846 |
hwaddr addr,
|
|
847 | 847 |
unsigned size) |
848 | 848 |
{ |
849 | 849 |
uint64_t data = 0; |
... | ... | |
884 | 884 |
} |
885 | 885 |
|
886 | 886 |
static uint64_t memory_region_dispatch_read(MemoryRegion *mr, |
887 |
target_phys_addr_t addr,
|
|
887 |
hwaddr addr,
|
|
888 | 888 |
unsigned size) |
889 | 889 |
{ |
890 | 890 |
uint64_t ret; |
... | ... | |
895 | 895 |
} |
896 | 896 |
|
897 | 897 |
static void memory_region_dispatch_write(MemoryRegion *mr, |
898 |
target_phys_addr_t addr,
|
|
898 |
hwaddr addr,
|
|
899 | 899 |
uint64_t data, |
900 | 900 |
unsigned size) |
901 | 901 |
{ |
... | ... | |
957 | 957 |
void memory_region_init_alias(MemoryRegion *mr, |
958 | 958 |
const char *name, |
959 | 959 |
MemoryRegion *orig, |
960 |
target_phys_addr_t offset,
|
|
960 |
hwaddr offset,
|
|
961 | 961 |
uint64_t size) |
962 | 962 |
{ |
963 | 963 |
memory_region_init(mr, name, size); |
... | ... | |
980 | 980 |
mr->ram_addr = qemu_ram_alloc(size, mr); |
981 | 981 |
} |
982 | 982 |
|
983 |
static uint64_t invalid_read(void *opaque, target_phys_addr_t addr,
|
|
983 |
static uint64_t invalid_read(void *opaque, hwaddr addr,
|
|
984 | 984 |
unsigned size) |
985 | 985 |
{ |
986 | 986 |
MemoryRegion *mr = opaque; |
... | ... | |
992 | 992 |
return -1U; |
993 | 993 |
} |
994 | 994 |
|
995 |
static void invalid_write(void *opaque, target_phys_addr_t addr, uint64_t data,
|
|
995 |
static void invalid_write(void *opaque, hwaddr addr, uint64_t data,
|
|
996 | 996 |
unsigned size) |
997 | 997 |
{ |
998 | 998 |
MemoryRegion *mr = opaque; |
... | ... | |
1063 | 1063 |
memory_region_transaction_commit(); |
1064 | 1064 |
} |
1065 | 1065 |
|
1066 |
bool memory_region_get_dirty(MemoryRegion *mr, target_phys_addr_t addr,
|
|
1067 |
target_phys_addr_t size, unsigned client)
|
|
1066 |
bool memory_region_get_dirty(MemoryRegion *mr, hwaddr addr,
|
|
1067 |
hwaddr size, unsigned client)
|
|
1068 | 1068 |
{ |
1069 | 1069 |
assert(mr->terminates); |
1070 | 1070 |
return cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, |
1071 | 1071 |
1 << client); |
1072 | 1072 |
} |
1073 | 1073 |
|
1074 |
void memory_region_set_dirty(MemoryRegion *mr, target_phys_addr_t addr,
|
|
1075 |
target_phys_addr_t size)
|
|
1074 |
void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr,
|
|
1075 |
hwaddr size)
|
|
1076 | 1076 |
{ |
1077 | 1077 |
assert(mr->terminates); |
1078 | 1078 |
return cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size, -1); |
... | ... | |
1110 | 1110 |
} |
1111 | 1111 |
} |
1112 | 1112 |
|
1113 |
void memory_region_reset_dirty(MemoryRegion *mr, target_phys_addr_t addr,
|
|
1114 |
target_phys_addr_t size, unsigned client)
|
|
1113 |
void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr,
|
|
1114 |
hwaddr size, unsigned client)
|
|
1115 | 1115 |
{ |
1116 | 1116 |
assert(mr->terminates); |
1117 | 1117 |
cpu_physical_memory_reset_dirty(mr->ram_addr + addr, |
... | ... | |
1180 | 1180 |
} |
1181 | 1181 |
|
1182 | 1182 |
void memory_region_add_coalescing(MemoryRegion *mr, |
1183 |
target_phys_addr_t offset,
|
|
1183 |
hwaddr offset,
|
|
1184 | 1184 |
uint64_t size) |
1185 | 1185 |
{ |
1186 | 1186 |
CoalescedMemoryRange *cmr = g_malloc(sizeof(*cmr)); |
... | ... | |
1220 | 1220 |
} |
1221 | 1221 |
|
1222 | 1222 |
void memory_region_add_eventfd(MemoryRegion *mr, |
1223 |
target_phys_addr_t addr,
|
|
1223 |
hwaddr addr,
|
|
1224 | 1224 |
unsigned size, |
1225 | 1225 |
bool match_data, |
1226 | 1226 |
uint64_t data, |
... | ... | |
1252 | 1252 |
} |
1253 | 1253 |
|
1254 | 1254 |
void memory_region_del_eventfd(MemoryRegion *mr, |
1255 |
target_phys_addr_t addr,
|
|
1255 |
hwaddr addr,
|
|
1256 | 1256 |
unsigned size, |
1257 | 1257 |
bool match_data, |
1258 | 1258 |
uint64_t data, |
... | ... | |
1284 | 1284 |
} |
1285 | 1285 |
|
1286 | 1286 |
static void memory_region_add_subregion_common(MemoryRegion *mr, |
1287 |
target_phys_addr_t offset,
|
|
1287 |
hwaddr offset,
|
|
1288 | 1288 |
MemoryRegion *subregion) |
1289 | 1289 |
{ |
1290 | 1290 |
MemoryRegion *other; |
... | ... | |
1328 | 1328 |
|
1329 | 1329 |
|
1330 | 1330 |
void memory_region_add_subregion(MemoryRegion *mr, |
1331 |
target_phys_addr_t offset,
|
|
1331 |
hwaddr offset,
|
|
1332 | 1332 |
MemoryRegion *subregion) |
1333 | 1333 |
{ |
1334 | 1334 |
subregion->may_overlap = false; |
... | ... | |
1337 | 1337 |
} |
1338 | 1338 |
|
1339 | 1339 |
void memory_region_add_subregion_overlap(MemoryRegion *mr, |
1340 |
target_phys_addr_t offset,
|
|
1340 |
hwaddr offset,
|
|
1341 | 1341 |
MemoryRegion *subregion, |
1342 | 1342 |
unsigned priority) |
1343 | 1343 |
{ |
... | ... | |
1366 | 1366 |
memory_region_transaction_commit(); |
1367 | 1367 |
} |
1368 | 1368 |
|
1369 |
void memory_region_set_address(MemoryRegion *mr, target_phys_addr_t addr)
|
|
1369 |
void memory_region_set_address(MemoryRegion *mr, hwaddr addr)
|
|
1370 | 1370 |
{ |
1371 | 1371 |
MemoryRegion *parent = mr->parent; |
1372 | 1372 |
unsigned priority = mr->priority; |
... | ... | |
1387 | 1387 |
memory_region_transaction_commit(); |
1388 | 1388 |
} |
1389 | 1389 |
|
1390 |
void memory_region_set_alias_offset(MemoryRegion *mr, target_phys_addr_t offset)
|
|
1390 |
void memory_region_set_alias_offset(MemoryRegion *mr, hwaddr offset)
|
|
1391 | 1391 |
{ |
1392 | 1392 |
assert(mr->alias); |
1393 | 1393 |
|
... | ... | |
1425 | 1425 |
} |
1426 | 1426 |
|
1427 | 1427 |
MemoryRegionSection memory_region_find(MemoryRegion *address_space, |
1428 |
target_phys_addr_t addr, uint64_t size)
|
|
1428 |
hwaddr addr, uint64_t size)
|
|
1429 | 1429 |
{ |
1430 | 1430 |
AddressSpace *as = memory_region_to_address_space(address_space); |
1431 | 1431 |
AddrRange range = addrrange_make(int128_make64(addr), |
... | ... | |
1559 | 1559 |
g_free(as->current_map); |
1560 | 1560 |
} |
1561 | 1561 |
|
1562 |
uint64_t io_mem_read(MemoryRegion *mr, target_phys_addr_t addr, unsigned size)
|
|
1562 |
uint64_t io_mem_read(MemoryRegion *mr, hwaddr addr, unsigned size)
|
|
1563 | 1563 |
{ |
1564 | 1564 |
return memory_region_dispatch_read(mr, addr, size); |
1565 | 1565 |
} |
1566 | 1566 |
|
1567 |
void io_mem_write(MemoryRegion *mr, target_phys_addr_t addr,
|
|
1567 |
void io_mem_write(MemoryRegion *mr, hwaddr addr,
|
|
1568 | 1568 |
uint64_t val, unsigned size) |
1569 | 1569 |
{ |
1570 | 1570 |
memory_region_dispatch_write(mr, addr, val, size); |
... | ... | |
1582 | 1582 |
|
1583 | 1583 |
static void mtree_print_mr(fprintf_function mon_printf, void *f, |
1584 | 1584 |
const MemoryRegion *mr, unsigned int level, |
1585 |
target_phys_addr_t base,
|
|
1585 |
hwaddr base,
|
|
1586 | 1586 |
MemoryRegionListHead *alias_print_queue) |
1587 | 1587 |
{ |
1588 | 1588 |
MemoryRegionList *new_ml, *ml, *next_ml; |
... | ... | |
1620 | 1620 |
"-" TARGET_FMT_plx "\n", |
1621 | 1621 |
base + mr->addr, |
1622 | 1622 |
base + mr->addr |
1623 |
+ (target_phys_addr_t)int128_get64(mr->size) - 1,
|
|
1623 |
+ (hwaddr)int128_get64(mr->size) - 1,
|
|
1624 | 1624 |
mr->priority, |
1625 | 1625 |
mr->readable ? 'R' : '-', |
1626 | 1626 |
!mr->readonly && !(mr->rom_device && mr->readable) ? 'W' |
... | ... | |
1629 | 1629 |
mr->alias->name, |
1630 | 1630 |
mr->alias_offset, |
1631 | 1631 |
mr->alias_offset |
1632 |
+ (target_phys_addr_t)int128_get64(mr->size) - 1);
|
|
1632 |
+ (hwaddr)int128_get64(mr->size) - 1);
|
|
1633 | 1633 |
} else { |
1634 | 1634 |
mon_printf(f, |
1635 | 1635 |
TARGET_FMT_plx "-" TARGET_FMT_plx " (prio %d, %c%c): %s\n", |
1636 | 1636 |
base + mr->addr, |
1637 | 1637 |
base + mr->addr |
1638 |
+ (target_phys_addr_t)int128_get64(mr->size) - 1,
|
|
1638 |
+ (hwaddr)int128_get64(mr->size) - 1,
|
|
1639 | 1639 |
mr->priority, |
1640 | 1640 |
mr->readable ? 'R' : '-', |
1641 | 1641 |
!mr->readonly && !(mr->rom_device && mr->readable) ? 'W' |
Also available in: Unified diff