summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/memory/page-mapping.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/memory/page-mapping.c')
-rw-r--r--arch/x86_64/memory/page-mapping.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86_64/memory/page-mapping.c b/arch/x86_64/memory/page-mapping.c
index 0de5bfa..d4b4e98 100644
--- a/arch/x86_64/memory/page-mapping.c
+++ b/arch/x86_64/memory/page-mapping.c
@@ -1,6 +1,7 @@
#include "arch/x86_64/page-mapping.h"
#include "arch/x86_64/page.h"
#include <stddef.h>
+#include "print.h"
pmle_t*
page_mapping_traverse(pmle_t *pml4, uint8_t depth, uint16_t *path)
@@ -13,3 +14,15 @@ page_mapping_traverse(pmle_t *pml4, uint8_t depth, uint16_t *path)
if(!pmle->p) return NULL;
return page_mapping_traverse(pmle_table, depth - 1, path + 1);
}
+
+pmle_t*
+mem_mapping_vptr_mapping(pmle_t *pml4, uint8_t depth, uintptr_t vptr)
+{
+ uint64_t pathval = 0;
+ uint16_t *path = (uint16_t*)&pathval;
+
+ for(uint8_t i = 0; i < depth; i++) {
+ path[i] = PML_I_FOR_LAYER(vptr, 4 - i);
+ }
+ return page_mapping_traverse(pml4, depth - 1, path);
+}