summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/hal/paging.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/hal/paging.c')
-rw-r--r--arch/x86_64/hal/paging.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/x86_64/hal/paging.c b/arch/x86_64/hal/paging.c
index d5bcee3..35d39e2 100644
--- a/arch/x86_64/hal/paging.c
+++ b/arch/x86_64/hal/paging.c
@@ -162,6 +162,16 @@ inline bool pagedir_mapping_is_present(virtaddr_t *mapping)
return ((page_t*)mapping)->p;
}
+inline bool pagedir_mapping_is_writeable(virtaddr_t *mapping)
+{
+ return ((page_t*)mapping)->rw;
+}
+
+inline bool pagedir_mapping_is_executable(virtaddr_t *mapping)
+{
+ return ((page_t*)mapping)->xd;
+}
+
inline void pagedir_mapping_set_pfn(virtaddr_t *mapping, size_t pfn)
{
((page_t*)mapping)->pfn = pfn;
@@ -205,7 +215,7 @@ int pagedir_map_frame(page_t *pml4,
int pagedir_map_frame_type(page_t *pml4,
uintptr_t pptr, uintptr_t vptr,
- struct syscall_pagedir_flags flg, int type)
+ struct pagedir_mapping_flags flg, int type)
{
uintmax_t real_flg = PAGE_USER | (type << PAGE_SHL_TYPE);
if(flg.writeable) {
@@ -219,7 +229,7 @@ int pagedir_map_frame_type(page_t *pml4,
int pagedir_map_untyped_frame(
jove_owned_obj_t *tgt, jove_perm_obj_t *untyped,
- uintptr_t vptr, struct syscall_pagedir_flags flg)
+ uintptr_t vptr, struct pagedir_mapping_flags flg)
{
page_t *pml4 = obj_deref(tgt);
@@ -260,7 +270,7 @@ int pagedir_map_table(page_t *pml4,
target_table = &pml2[pml2i];
goto map_table;
}
- return EHASMAP;
+ return -EHASMAP;
map_table:
memset(frame_ident, 0, 0x1000);
@@ -288,7 +298,7 @@ int pagedir_map_untyped_table(
int pagedir_map_shmem_frame(
jove_owned_obj_t *tgt, jove_perm_obj_t *shmem, uint8_t page_offset,
- uintptr_t vptr, struct syscall_pagedir_flags flg)
+ uintptr_t vptr, struct pagedir_mapping_flags flg)
{
page_t *pml4 = obj_deref(tgt);