Lines Matching +full:0 +full:- +full:mon
2 * QEMU monitor for RISC-V
6 * RISC-V specific monitor commands implementation
25 #include "monitor/hmp-target.h"
30 #define PTE_HEADER_DELIMITER "---------------- ---------------- "\
31 "---------------- -------\n"
34 #define PTE_HEADER_DELIMITER "-------- ---------------- -------- -------\n"
41 if (addr & (1UL << (va_bits - 1))) { in addr_canonical()
42 addr |= (hwaddr)-(1L << va_bits); in addr_canonical()
49 static void print_pte_header(Monitor *mon) in print_pte_header() argument
51 monitor_printf(mon, PTE_HEADER_FIELDS); in print_pte_header()
52 monitor_printf(mon, PTE_HEADER_DELIMITER); in print_pte_header()
55 static void print_pte(Monitor *mon, int va_bits, target_ulong vaddr, in print_pte() argument
67 monitor_printf(mon, TARGET_FMT_lx " " HWADDR_FMT_plx " " TARGET_FMT_lx in print_pte()
71 attr & PTE_R ? 'r' : '-', in print_pte()
72 attr & PTE_W ? 'w' : '-', in print_pte()
73 attr & PTE_X ? 'x' : '-', in print_pte()
74 attr & PTE_U ? 'u' : '-', in print_pte()
75 attr & PTE_G ? 'g' : '-', in print_pte()
76 attr & PTE_A ? 'a' : '-', in print_pte()
77 attr & PTE_D ? 'd' : '-'); in print_pte()
80 static void walk_pte(Monitor *mon, hwaddr base, target_ulong start, in walk_pte() argument
87 target_ulong last_start = -1; in walk_pte()
94 if (level < 0) { in walk_pte()
101 for (idx = 0; idx < (1UL << ptidxbits); idx++) { in walk_pte()
106 attr = pte & 0xff; in walk_pte()
122 print_pte(mon, va_bits, *vbase, *pbase, in walk_pte()
123 *last_paddr + *last_size - *pbase, *last_attr); in walk_pte()
135 walk_pte(mon, paddr, start, level - 1, ptidxbits, ptesize, in walk_pte()
146 static void mem_info_svxx(Monitor *mon, CPUArchState *env) in mem_info_svxx() argument
157 base = (hwaddr)get_field(env->satp, SATP32_PPN) << PGSHIFT; in mem_info_svxx()
158 vm = get_field(env->satp, SATP32_MODE); in mem_info_svxx()
160 base = (hwaddr)get_field(env->satp, SATP64_PPN) << PGSHIFT; in mem_info_svxx()
161 vm = get_field(env->satp, SATP64_MODE); in mem_info_svxx()
193 print_pte_header(mon); in mem_info_svxx()
195 vbase = -1; in mem_info_svxx()
196 pbase = -1; in mem_info_svxx()
197 last_paddr = -1; in mem_info_svxx()
198 last_size = 0; in mem_info_svxx()
199 last_attr = 0; in mem_info_svxx()
201 /* walk page tables, starting from address 0 */ in mem_info_svxx()
202 walk_pte(mon, base, 0, levels - 1, ptidxbits, ptesize, va_bits, in mem_info_svxx()
206 print_pte(mon, va_bits, vbase, pbase, in mem_info_svxx()
207 last_paddr + last_size - pbase, last_attr); in mem_info_svxx()
210 void hmp_info_mem(Monitor *mon, const QDict *qdict) in hmp_info_mem() argument
214 env = mon_get_cpu_env(mon); in hmp_info_mem()
216 monitor_printf(mon, "No CPU available\n"); in hmp_info_mem()
220 if (!riscv_cpu_cfg(env)->mmu) { in hmp_info_mem()
221 monitor_printf(mon, "S-mode MMU unavailable\n"); in hmp_info_mem()
226 if (!(env->satp & SATP32_MODE)) { in hmp_info_mem()
227 monitor_printf(mon, "No translation or protection\n"); in hmp_info_mem()
231 if (!(env->satp & SATP64_MODE)) { in hmp_info_mem()
232 monitor_printf(mon, "No translation or protection\n"); in hmp_info_mem()
237 mem_info_svxx(mon, env); in hmp_info_mem()