mon_kpfret(): return from a kernel page fault
[akaros.git] / kern / include / pmap.h
index 68d7723..e7c4710 100644 (file)
@@ -21,6 +21,7 @@
 #include <assert.h>
 #include <page_alloc.h>
 #include <multiboot.h>
+#include <arch/pmap.h>
 
 /* This macro takes a kernel virtual address -- an address that points above
  * KERNBASE, where the machine's maximum 256MB of physical memory is mapped --
@@ -39,6 +40,9 @@
        __m_pa; \
 })
 
+#define paddr_low32(p) ((uint32_t)(uintptr_t)PADDR(p))
+#define paddr_high32(p) ((uint32_t)((uint64_t)PADDR(p) >> 32))
+
 /* This macro takes a physical address and returns the corresponding kernel
  * virtual address.  It warns if you pass an invalid physical address. */
 #define KADDR(pa)                                              \
@@ -50,6 +54,7 @@
        (void*TRUSTED) (__m_pa + KERNBASE);                             \
 })
 
+#define KADDR_NOCHECK(pa) ((void*)(pa + KERNBASE))
 #define KBASEADDR(kla) KADDR(PADDR(kla))
 
 extern char (SNT RO bootstacktop)[], (SNT RO bootstack)[];
@@ -84,7 +89,6 @@ page_t*COUNT(1) page_lookup(pde_t SSOMELOCK*COUNT(NPDENTRIES) pgdir, void *SNT v
 error_t        pagetable_remove(pde_t *COUNT(NPDENTRIES) pgdir, void *SNT va);
 void   page_decref(page_t *COUNT(1) pp);
 
-void setup_default_mtrrs(barrier_t* smp_barrier);
 void   tlb_invalidate(pde_t *COUNT(NPDENTRIES) pgdir, void *SNT va);
 void tlb_flush_global(void);
 bool regions_collide_unsafe(uintptr_t start1, uintptr_t end1, 
@@ -143,4 +147,9 @@ static inline ppn_t kva2ppn(void* addr)
        return page2ppn(kva2page(addr));
 }
 
+static inline bool is_kaddr(void *addr)
+{
+       return (uintptr_t)addr >= KERNBASE;
+}
+
 #endif /* !ROS_KERN_PMAP_H */