xref: /plan9-contrib/sys/src/9k/k10/map.c (revision 9ef1f84b659abcb917c5c090acbce0772e494f21)
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)11 KADDR(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)22 PADDR(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)37 kmap(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