diff options
Diffstat (limited to 'hal')
| -rw-r--r-- | hal/memory.h | 8 | ||||
| -rw-r--r-- | hal/obj.c | 23 | ||||
| -rw-r--r-- | hal/obj.h | 1 |
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]; +} @@ -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. */ |
