void tlb_print() { int context = mips32_get_c0(C0_CONTEXT); kprintf("[tlb] C0_CONTEXT : %p\n", (void *)context); kprintf("[tlb] C0_CONTEXT >> 1: %p\n", (void *)(context >> 1)); kprintf("[tlb] ASID : %d\n", get_asid()); unsigned n = mips_tlb_size(); for (unsigned i = 0; i < n; i++) { tlbhi_t entryhi; tlblo_t entrylo0; tlblo_t entrylo1; tlb_read_index(&entryhi, &entrylo0, &entrylo1, i); kprintf("[tlb: %d]: hi: %p lo0:%p lo1: %p \n", i, (void *)entryhi, (void *)entrylo0, (void *)entrylo1); } }
void tlb_print() { uint32_t n = tlb_size(); for (uint32_t i = 0; i < n; i++) { tlbhi_t hi; tlblo_t lo0, lo1; tlb_read_index(&hi, &lo0, &lo1, i); if ((lo0 & PTE_VALID) || (lo1 & PTE_VALID)) { kprintf("[tlb] %ld => ASID: %02x", i, hi & PTE_ASID_MASK); if (lo0 & PTE_VALID) kprintf(" PFN0: {%08x => %08x %c%c}", hi & PTE_VPN2_MASK, PTE_PFN_OF(lo0), (lo0 & PTE_DIRTY) ? 'D' : '-', (lo0 & PTE_GLOBAL) ? 'G' : '-'); if (lo1 & PTE_VALID) kprintf(" PFN1: {%08x => %08x %c%c}", (hi & PTE_VPN2_MASK) + PAGESIZE, PTE_PFN_OF(lo1), (lo1 & PTE_DIRTY) ? 'D' : '-', (lo1 & PTE_GLOBAL) ? 'G' : '-'); kprintf("\n"); } } }
/* Fills _dgb_tlb_entry structure with TLB entry. Used by debugger. */ void _gdb_tlb_read_index(unsigned idx) { tlb_read_index(&_gdb_tlb_entry.hi, &_gdb_tlb_entry.lo0, &_gdb_tlb_entry.lo1, idx); }