summaryrefslogtreecommitdiffstats
path: root/hal
diff options
context:
space:
mode:
Diffstat (limited to 'hal')
-rw-r--r--hal/memory.h8
-rw-r--r--hal/obj.c23
-rw-r--r--hal/obj.h1
3 files changed, 28 insertions, 4 deletions
diff --git a/hal/memory.h b/hal/memory.h
index a8fdc86..2af275b 100644
--- a/hal/memory.h
+++ b/hal/memory.h
@@ -8,8 +8,6 @@
#include <stdbool.h>
#include <stdatomic.h>
-typedef uintptr_t physaddr_t;
-typedef uintptr_t virtaddr_t;
typedef unsigned short shmem_off_t;
/**Represents a region of alloc-able memory.
@@ -83,6 +81,8 @@ virtaddr_t *pagedir_get_mapping(
size_t pagedir_mapping_get_pfn(virtaddr_t *mapping);
virtaddr_t pagedir_ident_from_mapping(virtaddr_t *mapping);
bool pagedir_mapping_is_present(virtaddr_t *mapping);
+bool pagedir_mapping_is_writeable(virtaddr_t *mapping);
+bool pagedir_mapping_is_executable(virtaddr_t *mapping);
void pagedir_mapping_set_pfn(virtaddr_t *mapping, size_t pfn);
void pagedir_mapping_set_present(virtaddr_t *mapping, bool present);
@@ -92,13 +92,13 @@ void pagedir_mapping_set_type(virtaddr_t *mapping, int type);
int pagedir_map_untyped_frame(
jove_owned_obj_t *tgt, jove_perm_obj_t *untyped_obj,
- virtaddr_t vptr, struct syscall_pagedir_flags flg);
+ virtaddr_t vptr, struct pagedir_mapping_flags flags);
int pagedir_map_untyped_table(
jove_owned_obj_t *tgt, jove_perm_obj_t *untyped_obj,
virtaddr_t vptr);
int pagedir_map_shmem_frame(
jove_owned_obj_t *tgt, jove_perm_obj_t *shmem_obj, uint8_t page_offset,
- virtaddr_t vptr, struct syscall_pagedir_flags flg);
+ virtaddr_t vptr, struct pagedir_mapping_flags flags);
int pagedir_unmap_untyped_frame(
jove_owned_obj_t *tgt, jove_owned_obj_t *dst, uintptr_t vptr);
diff --git a/hal/obj.c b/hal/obj.c
new file mode 100644
index 0000000..5d1b9d7
--- /dev/null
+++ b/hal/obj.c
@@ -0,0 +1,23 @@
+#include "obj.h"
+
+static const char *s_typenames[] = {
+ [JOVE_OBJ_NONE] = "NONE",
+ [JOVE_OBJ_UNTYPED] = "UNTYPED",
+ [JOVE_OBJ_OBJDIR] = "OBJDIR",
+ [JOVE_OBJ_PAGEDIR] = "PAGEDIR",
+ [JOVE_OBJ_PROCESSOR] = "PROCESSOR",
+ [JOVE_OBJ_REGION] = "REGION",
+ [JOVE_OBJ_SHMEMORY] = "SHMEMORY",
+ [JOVE_OBJ_INT_HANDLE] = "INT_HANDLES",
+ [JOVE_OBJ_PCB] = "PCB",
+ [JOVE_OBJ_MESSAGE] = "MESSAGE",
+ [JOVE_OBJ_LINK] = "LINK"
+};
+
+const char*
+obj_gettypename(jove_owned_obj_t *obj)
+{
+ uint8_t type = obj_gettype(obj);
+ if(type > JOVE_OBJ_LINK) return "UNKNOWN";
+ return s_typenames[type];
+}
diff --git a/hal/obj.h b/hal/obj.h
index 180b830..f19cf2c 100644
--- a/hal/obj.h
+++ b/hal/obj.h
@@ -23,6 +23,7 @@ void *obj_deref(jove_owned_obj_t *obj);
/*Getters and setters for accessing the type field of the kernel object. */
uint8_t obj_gettype(jove_owned_obj_t *obj);
uint8_t obj_peektype(jove_obj_t obj);
+const char *obj_gettypename(jove_owned_obj_t *obj);
void obj_settype(jove_owned_obj_t *obj, uint8_t type);
/*Getters and setters for accessing the value field of the kernel object. */