summaryrefslogtreecommitdiff
path: root/lib/libkvm/kvm_mips.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libkvm/kvm_mips.h')
-rw-r--r--lib/libkvm/kvm_mips.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/libkvm/kvm_mips.h b/lib/libkvm/kvm_mips.h
index 9fba6fb8e6e8..715117d59fb9 100644
--- a/lib/libkvm/kvm_mips.h
+++ b/lib/libkvm/kvm_mips.h
@@ -35,6 +35,9 @@
typedef uint64_t mips_physaddr_t;
+typedef uint32_t mips32_pte_t;
+typedef uint64_t mips64_pte_t;
+
#define MIPS_PAGE_SHIFT 12
#define MIPS_PAGE_SIZE (1 << MIPS_PAGE_SHIFT)
#define MIPS_PAGE_MASK (MIPS_PAGE_SIZE - 1)
@@ -58,6 +61,28 @@ typedef uint64_t mips_physaddr_t;
#define MIPS64_PTE_TO_PFN(pte) ((pte) & MIPS64_PFN_MASK)
#define MIPS64_PTE_TO_PA(pte) (MIPS_PFN_TO_PA(MIPS64_PTE_TO_PFN((pte))))
+#define MIPS32_SWBITS_SHIFT 29
+#define MIPS64_SWBITS_SHIFT 55
+#define MIPS_PTE_V 0x02
+#define MIPS32_PTE_RO ((mips32_pte_t)0x01 << MIPS32_SWBITS_SHIFT)
+#define MIPS64_PTE_RO ((mips64_pte_t)0x01 << MIPS64_SWBITS_SHIFT)
+
+static inline mips32_pte_t
+_mips32_pte_get(kvm_t *kd, u_long pteindex)
+{
+ mips32_pte_t *pte = _kvm_pmap_get(kd, pteindex, sizeof(*pte));
+
+ return _kvm32toh(kd, *pte);
+}
+
+static inline mips64_pte_t
+_mips64_pte_get(kvm_t *kd, u_long pteindex)
+{
+ mips64_pte_t *pte = _kvm_pmap_get(kd, pteindex, sizeof(*pte));
+
+ return _kvm64toh(kd, *pte);
+}
+
#ifdef __mips__
_Static_assert(PAGE_SHIFT == MIPS_PAGE_SHIFT, "PAGE_SHIFT mismatch");
_Static_assert(PAGE_SIZE == MIPS_PAGE_SIZE, "PAGE_SIZE mismatch");