1 #include "u.h" 2 #include "../port/lib.h" 3 #include "mem.h" 4 #include "dat.h" 5 #include "fns.h" 6 7 #define _KADDR(pa) UINT2PTR(kseg0+((uintptr)(pa))) 8 #define _PADDR(va) PTR2UINT(((uintptr)(va)) - kseg0) 9 10 void* KADDR(uintptr pa)11KADDR(uintptr pa) 12 { 13 u8int* va; 14 15 va = UINT2PTR(pa); 16 if(pa < TMFM) 17 return KSEG0+va; 18 return KSEG2+va; 19 } 20 21 uintmem PADDR(void * va)22PADDR(void* va) 23 { 24 uintmem pa; 25 26 pa = PTR2UINT(va); 27 if(pa >= KSEG0 && pa < KSEG0+TMFM) 28 return pa-KSEG0; 29 if(pa > KSEG2) 30 return pa-KSEG2; 31 32 panic("PADDR: va %#p pa #%p @ %#p\n", va, _PADDR(va), getcallerpc(&va)); 33 return 0; 34 } 35 36 KMap* kmap(Page * page)37kmap(Page* page) 38 { 39 // print("kmap(%#llux) @ %#p: %#p %#p\n", 40 // page->pa, getcallerpc(&page), 41 // page->pa, KADDR(page->pa)); 42 43 return KADDR(page->pa); 44 } 45