@ -2450,6 +2450,21 @@ void address_space_destroy(AddressSpace *as)
call_rcu ( as , do_address_space_destroy , rcu ) ;
call_rcu ( as , do_address_space_destroy , rcu ) ;
}
}
static const char * memory_region_type ( MemoryRegion * mr )
{
if ( memory_region_is_ram_device ( mr ) ) {
return " ramd " ;
} else if ( memory_region_is_romd ( mr ) ) {
return " romd " ;
} else if ( memory_region_is_rom ( mr ) ) {
return " rom " ;
} else if ( memory_region_is_ram ( mr ) ) {
return " ram " ;
} else {
return " i/o " ;
}
}
typedef struct MemoryRegionList MemoryRegionList ;
typedef struct MemoryRegionList MemoryRegionList ;
struct MemoryRegionList {
struct MemoryRegionList {
@ -2459,6 +2474,10 @@ struct MemoryRegionList {
typedef QTAILQ_HEAD ( queue , MemoryRegionList ) MemoryRegionListHead ;
typedef QTAILQ_HEAD ( queue , MemoryRegionList ) MemoryRegionListHead ;
# define MR_SIZE(size) (int128_nz(size) ? (hwaddr)int128_get64( \
int128_sub ( ( size ) , int128_one ( ) ) ) : 0 )
# define MTREE_INDENT " "
static void mtree_print_mr ( fprintf_function mon_printf , void * f ,
static void mtree_print_mr ( fprintf_function mon_printf , void * f ,
const MemoryRegion * mr , unsigned int level ,
const MemoryRegion * mr , unsigned int level ,
hwaddr base ,
hwaddr base ,
@ -2474,7 +2493,7 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f,
}
}
for ( i = 0 ; i < level ; i + + ) {
for ( i = 0 ; i < level ; i + + ) {
mon_printf ( f , " " ) ;
mon_printf ( f , MTREE_INDENT ) ;
}
}
if ( mr - > alias ) {
if ( mr - > alias ) {
@ -2494,37 +2513,24 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f,
QTAILQ_INSERT_TAIL ( alias_print_queue , ml , queue ) ;
QTAILQ_INSERT_TAIL ( alias_print_queue , ml , queue ) ;
}
}
mon_printf ( f , TARGET_FMT_plx " - " TARGET_FMT_plx
mon_printf ( f , TARGET_FMT_plx " - " TARGET_FMT_plx
" (prio %d, %c%c ): alias %s @%s " TARGET_FMT_plx
" (prio %d, %s ): alias %s @%s " TARGET_FMT_plx
" - " TARGET_FMT_plx " %s \n " ,
" - " TARGET_FMT_plx " %s \n " ,
base + mr - > addr ,
base + mr - > addr ,
base + mr - > addr
base + mr - > addr + MR_SIZE ( mr - > size ) ,
+ ( int128_nz ( mr - > size ) ?
( hwaddr ) int128_get64 ( int128_sub ( mr - > size ,
int128_one ( ) ) ) : 0 ) ,
mr - > priority ,
mr - > priority ,
mr - > romd_mode ? ' R ' : ' - ' ,
memory_region_type ( ( MemoryRegion * ) mr ) ,
! mr - > readonly & & ! ( mr - > rom_device & & mr - > romd_mode ) ? ' W '
: ' - ' ,
memory_region_name ( mr ) ,
memory_region_name ( mr ) ,
memory_region_name ( mr - > alias ) ,
memory_region_name ( mr - > alias ) ,
mr - > alias_offset ,
mr - > alias_offset ,
mr - > alias_offset
mr - > alias_offset + MR_SIZE ( mr - > size ) ,
+ ( int128_nz ( mr - > size ) ?
( hwaddr ) int128_get64 ( int128_sub ( mr - > size ,
int128_one ( ) ) ) : 0 ) ,
mr - > enabled ? " " : " [disabled] " ) ;
mr - > enabled ? " " : " [disabled] " ) ;
} else {
} else {
mon_printf ( f ,
mon_printf ( f ,
TARGET_FMT_plx " - " TARGET_FMT_plx " (prio %d, %c%c ): %s%s \n " ,
TARGET_FMT_plx " - " TARGET_FMT_plx " (prio %d, %s ): %s%s \n " ,
base + mr - > addr ,
base + mr - > addr ,
base + mr - > addr
base + mr - > addr + MR_SIZE ( mr - > size ) ,
+ ( int128_nz ( mr - > size ) ?
( hwaddr ) int128_get64 ( int128_sub ( mr - > size ,
int128_one ( ) ) ) : 0 ) ,
mr - > priority ,
mr - > priority ,
mr - > romd_mode ? ' R ' : ' - ' ,
memory_region_type ( ( MemoryRegion * ) mr ) ,
! mr - > readonly & & ! ( mr - > rom_device & & mr - > romd_mode ) ? ' W '
: ' - ' ,
memory_region_name ( mr ) ,
memory_region_name ( mr ) ,
mr - > enabled ? " " : " [disabled] " ) ;
mr - > enabled ? " " : " [disabled] " ) ;
}
}