- register mapping *mp;
- register vm_offset_t pa;
-
- pa = (vm_offset_t)LRA(pmap->space,(void *)va);
-
- if (pa != 0)
- return(pa);
-
- mp = hw_lock_phys_vir(pmap->space, va);
- if((unsigned int)mp&1) {
- return 0;
- }
-
- if(!mp) { /* If it was not a normal page */
- pa = hw_cvp_blk(pmap, va); /* Try to convert odd-sized page (returns 0 if not found) */
- return pa; /* Return physical address */
- }
-
- mp = hw_cpv(mp);
-
- if(!mp->physent) {
- pa = (vm_offset_t)((mp->PTEr & -PAGE_SIZE) | ((unsigned int)va & (PAGE_SIZE-1)));
- } else {
- pa = (vm_offset_t)((mp->physent->pte1 & -PAGE_SIZE) | ((unsigned int)va & (PAGE_SIZE-1)));
- hw_unlock_bit((unsigned int *)&mp->physent->phys_link, PHYS_LOCK);
- }