alarm: Force unset_alarm to grab the CV lock
[akaros.git] / kern / include / pmap.h
index bb7e9ad..b93158f 100644 (file)
@@ -10,8 +10,7 @@
  * management, and other things related to virtual->physical mappings.
  */
 
-#ifndef ROS_KERN_PMAP_H
-#define ROS_KERN_PMAP_H
+#pragma once
 
 #include <ros/memlayout.h>
 #include <sys/queue.h>
@@ -57,8 +56,6 @@
 #define KADDR_NOCHECK(pa) ((void*)(pa + KERNBASE))
 #define KBASEADDR(kla) KADDR(PADDR(kla))
 
-extern char bootstacktop[], bootstack[];
-
 extern physaddr_t max_pmem;            /* Total amount of physical memory */
 extern size_t max_nr_pages;            /* Total number of physical memory pages */
 extern physaddr_t max_paddr;   /* Maximum addressable physical address */
@@ -92,15 +89,21 @@ void        page_decref(page_t *pp);
 
 void   tlb_invalidate(pgdir_t pgdir, void *ga);
 void tlb_flush_global(void);
-bool regions_collide_unsafe(uintptr_t start1, uintptr_t end1, 
+void tlb_shootdown_global(void);
+bool regions_collide_unsafe(uintptr_t start1, uintptr_t end1,
                             uintptr_t start2, uintptr_t end2);
 
 /* Arch specific implementations for these */
+void map_segment(pgdir_t pgdir, uintptr_t va, size_t size, physaddr_t pa,
+                 int perm, int pml_shift);
+int unmap_segment(pgdir_t pgdir, uintptr_t va, size_t size);
 pte_t pgdir_walk(pgdir_t pgdir, const void *va, int create);
 int get_va_perms(pgdir_t pgdir, const void *va);
 int arch_pgdir_setup(pgdir_t boot_copy, pgdir_t *new_pd);
 physaddr_t arch_pgdir_get_cr3(pgdir_t pd);
 void arch_pgdir_clear(pgdir_t *pd);
+int arch_max_jumbo_page_shift(void);
+void arch_add_intermediate_pts(pgdir_t pgdir, uintptr_t va, size_t len);
 
 static inline page_t *ppn2page(size_t ppn)
 {
@@ -141,12 +144,12 @@ static inline void *ppn2kva(size_t pp)
        return page2kva(ppn2page(pp));
 }
 
-static inline page_t* kva2page(void* addr) 
+static inline page_t* kva2page(void* addr)
 {
        return pa2page(PADDR(addr));
 }
 
-static inline ppn_t kva2ppn(void* addr) 
+static inline ppn_t kva2ppn(void* addr)
 {
        return page2ppn(kva2page(addr));
 }
@@ -165,5 +168,3 @@ static inline unsigned long nr_pages(size_t nr_bytes)
  * the generic arch/pmap.h.  It's likely that many of these ops will be inlined
  * for speed in pmap_ops. */
 #include <arch/pmap_ops.h>
-
-#endif /* !ROS_KERN_PMAP_H */