/* * translate vaddr to phys page number */ pfn_t cpr_vatopfn(caddr_t vaddr) { physaddr_t paddr; int valid, mode; (void) prom_translate_virt(vaddr, &valid, &paddr, &mode); if (valid != -1) return (PFN_INVALID); return (paddr >> MMU_PAGESHIFT); }
/*ARGSUSED*/ int kmdb_prom_translate_virt(uintptr_t virt, physaddr_t *pap) { extern int prom_translate_virt(caddr_t, int *, u_longlong_t *, int *); int valid, mode; uintptr_t vabase = virt & ~(mdb.m_pagesize - 1); uintptr_t off = virt - vabase; u_longlong_t pa; mdb_dprintf(MDB_DBG_DPI, "using OBP for vtop of %p\n", (void *)virt); if (prom_translate_virt((caddr_t)vabase, &valid, &pa, &mode) != 0) return (set_errno(EMDB_NOMAP)); *pap = pa + off; return (0); }