Added whitelisting to MSR read/write code
[akaros.git] / kern / arch / x86 / pmap_ops.h
index 19a0fec..a38bebd 100644 (file)
@@ -9,8 +9,7 @@
  * time is a pain, and for now we'll do the walks serially.  Because of that, a
  * given pte_t may have a KPTE and/or an EPTE.  Ideally, it'd be *and*. */
 
-#ifndef ROS_ARCH_PMAPS_OPS_H
-#define ROS_ARCH_PMAPS_OPS_H
+#pragma once
 
 #include <arch/vmm/ept.h>
 #include <arch/kpt.h>
@@ -90,10 +89,10 @@ static inline unsigned long pte_print(pte_t pte)
        return kpte_print(pte);
 }
 
-static inline void pte_write(pte_t pte, physaddr_t pa, int perm)
+static inline void pte_write(pte_t pte, physaddr_t pa, int settings)
 {
-       kpte_write(pte, pa, perm);
-       epte_write(kpte_to_epte(pte), pa, perm);
+       kpte_write(pte, pa, settings);
+       epte_write(kpte_to_epte(pte), pa, settings);
 }
 
 static inline void pte_clear_present(pte_t pte)
@@ -124,11 +123,15 @@ static inline bool pte_has_perm_urw(pte_t pte)
        return kpte_has_perm_urw(pte);
 }
 
-/* return the arch-independent format for prots - whatever you'd expect to
- * receive for pte_write.  Careful with the ret, since a valid type is 0. */
-static inline int pte_get_perm(pte_t pte)
+/* Settings includes protection (maskable via PTE_PROT) and other bits, such as
+ * jumbo, dirty, accessed, etc.  Whatever this returns can get fed back to
+ * pte_write.
+ *
+ * Arch-indep settings include: PTE_PERM (U, W, P, etc), PTE_D, PTE_A, PTE_PS.
+ * Other OSs (x86) may include others. */
+static inline int pte_get_settings(pte_t pte)
 {
-       return kpte_get_perm(pte);
+       return kpte_get_settings(pte);
 }
 
 static inline void pte_replace_perm(pte_t pte, int perm)
@@ -136,5 +139,3 @@ static inline void pte_replace_perm(pte_t pte, int perm)
        kpte_replace_perm(pte, perm);
        epte_replace_perm(kpte_to_epte(pte), perm);
 }
-
-#endif /* ROS_ARCH_PMAPS_OPS_H */