summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-09-15 10:03:20 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-09-15 10:03:20 -0400
commita783cc865f1f261c20f6ef55cb37d4839f519865 (patch)
treeeabd6992f3be7c0f4d778a9fba2bfe7173ed6c8c
parent1f4260648f02db1b4fe8c60fe36f936125042880 (diff)
downloadjove-kernel-a783cc865f1f261c20f6ef55cb37d4839f519865.tar.gz
jove-kernel-a783cc865f1f261c20f6ef55cb37d4839f519865.tar.bz2
jove-kernel-a783cc865f1f261c20f6ef55cb37d4839f519865.zip
move constants to api. centralize interrupts. fix rootdir lock hang
-rw-r--r--Makefile9
-rw-r--r--api/init.h18
-rw-r--r--api/obj.h3
-rw-r--r--arch/x86_64/hal/idt.c20
-rw-r--r--arch/x86_64/hal/idt.h7
-rw-r--r--arch/x86_64/hal/idt_entries.s9
-rw-r--r--arch/x86_64/hal/obj.c1
-rw-r--r--arch/x86_64/hal/obj.h36
-rw-r--r--arch/x86_64/hal/paging.c4
-rw-r--r--arch/x86_64/hal/process.c4
-rw-r--r--arch/x86_64/main.c15
-rw-r--r--arch/x86_64/sys/init.c1
-rw-r--r--compile_commands.json314
-rw-r--r--hal/memory.h2
-rw-r--r--hal/obj.h37
-rw-r--r--hal/uacpi.c33
-rw-r--r--hal/uacpi.h6
-rw-r--r--init.h14
-rw-r--r--sys/syscall.c3
19 files changed, 465 insertions, 71 deletions
diff --git a/Makefile b/Makefile
index 33af30f..237843f 100644
--- a/Makefile
+++ b/Makefile
@@ -26,12 +26,13 @@ INCDIR := $(OUT)/usr/include/kernel
all: $(BIN)
-headers:
+headers: $(INCDIR)
+ -$(foreach dir,$(CDIRS),cp -p $(dir)/*.h $(INCDIR)/$(dir)/;)
+ -$(foreach dir,$(CDIRS),cp -p arch/$(TARGET_MACHINE)/$(dir)/*.h $(INCDIR)/arch/$(dir)/;)
+
+$(INCDIR):
mkdir -p $(INCDIR)
-$(foreach dir,$(CDIRS),mkdir -p $(INCDIR)/$(dir) $(INCDIR)/arch/$(dir)/;)
- -cp *.h $(INCDIR)/
- -$(foreach dir,$(CDIRS),cp $(dir)/*.h $(INCDIR)/$(dir)/;)
- -$(foreach dir,$(CDIRS),cp arch/$(TARGET_MACHINE)/$(dir)/*.h $(INCDIR)/arch/$(dir)/;)
$(BIN): ${OBJFILES}
$(LD) $(LDFLAGS) ${OBJFILES} -o $(BIN)
diff --git a/api/init.h b/api/init.h
new file mode 100644
index 0000000..a7de43f
--- /dev/null
+++ b/api/init.h
@@ -0,0 +1,18 @@
+#ifndef _JOVE_API_INIT_H
+#define _JOVE_API_INIT_H 1
+
+#define ROOTDIR_PROCESSORS_I 0x0
+#define ROOTDIR_PAGEDIR_I 0x01
+#define ROOTDIR_UNTYPED_I 0x02
+#define ROOTDIR_PCB_I 0x03
+#define ROOTDIR_IOPB_I 0x04
+#define ROOTDIR_ACPI_I 0x05
+#define ROOTDIR_INTERRUPTS_I 0x06
+#define ROOTDIR_INITRD_I 0x07
+#define ROOTDIR_MESSAGE_I 0x08
+
+#define ROOTDIR_SERIAL_COM_I 0x80
+#define ROOTDIR_FRAMEBUFFER_I 0x81
+#define ROOTDIR_VIRTTERM_I 0x82
+
+#endif
diff --git a/api/obj.h b/api/obj.h
index 64171a2..10f7b65 100644
--- a/api/obj.h
+++ b/api/obj.h
@@ -10,8 +10,9 @@ enum
JOVE_OBJ_OBJDIR,
JOVE_OBJ_PAGEDIR,
JOVE_OBJ_PROCESSOR,
+ JOVE_OBJ_ACPI_TABLE,
+ JOVE_OBJ_INT_HANDLE,
JOVE_OBJ_PROCESS,
- JOVE_OBJ_PAGEFRAME,
JOVE_OBJ_INITRD_FILE,
JOVE_OBJ_FRAMEBUFFER,
JOVE_OBJ_VIRTTERM,
diff --git a/arch/x86_64/hal/idt.c b/arch/x86_64/hal/idt.c
index b2251bd..235d8c6 100644
--- a/arch/x86_64/hal/idt.c
+++ b/arch/x86_64/hal/idt.c
@@ -3,6 +3,7 @@
#include "gdt.h"
#include "jove.h"
#include "lib/printf.h"
+#include "lib/string.h"
ALIGN(8)
static struct idt_entry s_idt[IDT_ENTRIES];
@@ -11,7 +12,9 @@ typedef void (*isr_t)(void);
extern isr_t __isrs[IDT_ENTRIES];
typedef struct int_stackframe *(*int_handler_t)(struct int_stackframe*);
-int_handler_t __int_handles[IDT_ENTRIES];
+int_handler_t __int_kernel_handles[IDT_ENTRIES];
+
+struct int_user_handle __int_user_handles[IDT_ENTRIES];
static struct int_stackframe*
s_int_handle_stub(struct int_stackframe* frame)
@@ -20,9 +23,22 @@ s_int_handle_stub(struct int_stackframe* frame)
hcf();
}
+struct int_stackframe*
+__int_handle_body(struct int_stackframe *frame)
+{
+ frame = __int_kernel_handles[frame->int_num](frame);
+
+ struct int_user_handle *usr_handle = &__int_user_handles[frame->int_num];
+ if(usr_handle->pid == 0) return frame;
+
+ kprintf("TODO: Handle user interrupt switching\n");
+ return frame;
+}
+
void
idt_init(void)
{
+ memset(__int_user_handles, 0, sizeof(struct int_user_handle) * IDT_ENTRIES);
for(size_t i = 0; i < IDT_ENTRIES; i++) {
uintptr_t isr = (uintptr_t)(__isrs[i]);
@@ -37,7 +53,7 @@ idt_init(void)
.offset_32_63 = (uint32_t)(isr >> 32)
};
- __int_handles[i] = s_int_handle_stub;
+ __int_kernel_handles[i] = s_int_handle_stub;
}
}
diff --git a/arch/x86_64/hal/idt.h b/arch/x86_64/hal/idt.h
index 961e720..2aa759b 100644
--- a/arch/x86_64/hal/idt.h
+++ b/arch/x86_64/hal/idt.h
@@ -63,4 +63,11 @@ struct int_stackframe
#define IDT_EXCEPT_VE 20
#define IDT_EXCEPT_CP 21
+struct int_user_handle
+{
+ uintmax_t pid;
+ void *handle;
+};
+extern struct int_user_handle __int_user_handles[IDT_ENTRIES];
+
#endif
diff --git a/arch/x86_64/hal/idt_entries.s b/arch/x86_64/hal/idt_entries.s
index 204fa93..0bed23d 100644
--- a/arch/x86_64/hal/idt_entries.s
+++ b/arch/x86_64/hal/idt_entries.s
@@ -42,18 +42,15 @@
1:
.endm
-.extern __int_handles
+.extern __int_handle_body
.type __isr_header @function
__isr_header:
push_state
cld
movq %rsp, %rdi
-
-isr_break:
- movq 0x78(%rdi), %rax
- movq __int_handles(,%rax,8), %rbx
- call %rbx
+ call __int_handle_body
+ movq %rax, %rsp
pop_state
addq $16, %rsp
diff --git a/arch/x86_64/hal/obj.c b/arch/x86_64/hal/obj.c
index b8924a6..af0491a 100644
--- a/arch/x86_64/hal/obj.c
+++ b/arch/x86_64/hal/obj.c
@@ -1,5 +1,6 @@
#include "obj.h"
#include "arch/x86_64/lock.h"
+#include "lib/printf.h"
#include "paging.h"
#include "hal/obj.h"
#include "jove.h"
diff --git a/arch/x86_64/hal/obj.h b/arch/x86_64/hal/obj.h
index 8955a55..deea2be 100644
--- a/arch/x86_64/hal/obj.h
+++ b/arch/x86_64/hal/obj.h
@@ -36,40 +36,4 @@ typedef struct jove_locked_obj
#define JOVE_OBJDIR_SIZE 0x1000
#define JOVE_OBJDIR_ENTRIES (JOVE_OBJDIR_SIZE / sizeof(jove_obj_t))
-typedef struct jove_objdir
-{
- jove_obj_t entries[JOVE_OBJDIR_ENTRIES];
-} jove_objdir_t;
-/*Locks the mutex of the kernel object provided. Returns the locked version. */
-jove_owned_obj_t *obj_take(jove_obj_t *obj);
-/*Unlocks the mutex of the kernel object provided. Returns the unlocked version. */
-jove_obj_t *obj_release(jove_owned_obj_t *obj);
-
-/*Converts the value pointer of the object into a pointer to kernel memory.*/
-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);
-void obj_settype(jove_owned_obj_t *obj, uint8_t type);
-
-/*Getters and setters for accessing the value field of the kernel object. */
-uintmax_t obj_getvalue(jove_owned_obj_t *obj);
-void obj_setvalue(jove_owned_obj_t *obj, uintmax_t value);
-
-/*Returns the n'th entry of the object directory passed.
- * If the passed object is not an objdir, returns NULL and sets errno to EBADOBJ.
- * If the passed entry index is out of bounds, returns NULL and sets errno to EOOB.*/
-jove_owned_obj_t *objdir_getlocal(jove_owned_obj_t *objdir_obj, uint16_t entry);
-jove_obj_t objdir_peeklocal(jove_owned_obj_t *objdir_obj, uint16_t entry);
-
-/*Recursively seeks through an object directory for an object following the passed
- * path variable.
- * If the path length is zero, returns the passed object.
- * If the passed object is not an objdir, returns NULL and sets errno to EBADOBJ.
- * If any object excluding the object at the end of the path is not an objdir,
- * returns NULL and sets errno to EBADOBJ.
- * If any entry in the path is out of bounds, returns NULL and sets errno to EBADOBJ.*/
-jove_owned_obj_t *objdir_getobj(jove_owned_obj_t *objdir_obj, const uint16_t *path, size_t path_len);
-
#endif
diff --git a/arch/x86_64/hal/paging.c b/arch/x86_64/hal/paging.c
index 507dfce..7b45005 100644
--- a/arch/x86_64/hal/paging.c
+++ b/arch/x86_64/hal/paging.c
@@ -251,6 +251,6 @@ paging_pml4_init(void)
/*Before tasking, if the kernel has a bug and crashes we need some
* information about what happened.*/
- extern struct int_stackframe *(*__int_handles[])(struct int_stackframe*);
- __int_handles[IDT_EXCEPT_PF] = s_int_handle_pf_early;
+ extern struct int_stackframe *(*__int_kernel_handles[])(struct int_stackframe*);
+ __int_kernel_handles[IDT_EXCEPT_PF] = s_int_handle_pf_early;
}
diff --git a/arch/x86_64/hal/process.c b/arch/x86_64/hal/process.c
index c766a28..0155919 100644
--- a/arch/x86_64/hal/process.c
+++ b/arch/x86_64/hal/process.c
@@ -49,15 +49,15 @@ processing_setup(void (*process_main))
s_init_pcb->pid = 1;
s_init_pcb->ksp = (void*)ksp;
s_init_pcb->pml4 = paging_get_pml4();
- s_init_pcb->rootdir = obj_take(_rootdir_obj);
+ s_init_pcb->rootdir = _rootdir_obj;
jove_owned_obj_t *iopb_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_IOPB_I);
obj_settype(iopb_obj, JOVE_OBJ_IOPB);
obj_setvalue(iopb_obj, (uintptr_t)s_init_iopb);
+ s_init_pcb->iopb = iopb_obj;
processor_t *proc = processor_current();
proc->tss.rsp[0] = (uintptr_t)s_init_pcb->ksp;
-
memcpy(proc->iopb, s_init_iopb, 0x2000);
{
diff --git a/arch/x86_64/main.c b/arch/x86_64/main.c
index d688fa0..7266155 100644
--- a/arch/x86_64/main.c
+++ b/arch/x86_64/main.c
@@ -1,5 +1,6 @@
#include "jove.h"
#include "init.h"
+#include "lib/string.h"
#include "lib/printf.h"
#include "lib/virtterm.h"
#include "lib/panic.h"
@@ -10,21 +11,28 @@
#include "hal/memory.h"
#include "hal/framebuffer.h"
#include "hal/process.h"
+#include "hal/uacpi.h"
#include "boot/initrd.h"
#include "boot/cmdline.h"
#include "uacpi/uacpi.h"
int errno = 0;
-PAGEALIGN jove_objdir_t _rootdir = { 0 };
+PAGEALIGN jove_objdir_t _rootdir;
-void *_rootdir_obj = &_rootdir;
+jove_owned_obj_t s_rootdir_obj;
+void *_rootdir_obj = &s_rootdir_obj;
static void kernel_process_entry(void);
void
kernel_entry(void)
{
+ memset(&_rootdir, 0, 0x1000);
+ obj_take(_rootdir_obj);
+ obj_settype(_rootdir_obj, JOVE_OBJ_OBJDIR);
+ obj_setvalue(_rootdir_obj, (uintptr_t)&_rootdir);
+
msr_enable_sse();
obj_settype(_rootdir_obj, JOVE_OBJ_OBJDIR);
@@ -49,8 +57,7 @@ kernel_entry(void)
static void
kernel_process_entry(void)
{
- uint8_t uacpi_buffer[1024];
- uacpi_setup_early_table_access(uacpi_buffer, 1024);
+ uacpi_kernel_init();
init_setup();
kpanic("Reached the end of kernel main!\n");
diff --git a/arch/x86_64/sys/init.c b/arch/x86_64/sys/init.c
index 681ba09..8823df2 100644
--- a/arch/x86_64/sys/init.c
+++ b/arch/x86_64/sys/init.c
@@ -154,6 +154,7 @@ init_setup(void)
uintptr_t message_pptr = init_program_pml0_pptr + (last_page << 12);
s_init_program_pml1[last_page].value = message_pptr | PAGE_PRESENT | PAGE_WRITEABLE | PAGE_USER | PAGE_XD;
+
jove_owned_obj_t *message_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_MESSAGE_I);
obj_settype(message_obj, JOVE_OBJ_MESSAGE);
obj_setvalue(message_obj, (message_pptr & ~0xFFF) | 1);
diff --git a/compile_commands.json b/compile_commands.json
index 38155e3..e401f56 100644
--- a/compile_commands.json
+++ b/compile_commands.json
@@ -12,10 +12,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"main.c",
@@ -38,10 +42,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/lock.c",
@@ -64,10 +72,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/main.c",
@@ -90,10 +102,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/x86_64.c",
@@ -116,10 +132,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"boot/cmdline.c",
@@ -142,10 +162,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"boot/initrd.c",
@@ -168,10 +192,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/panic.c",
@@ -194,10 +222,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/printf.c",
@@ -220,10 +252,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/psf.c",
@@ -246,10 +282,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/string.c",
@@ -272,10 +312,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/tar.c",
@@ -298,10 +342,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"lib/virtterm.c",
@@ -324,10 +372,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"hal/uacpi.c",
@@ -350,10 +402,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"hal/untyped.c",
@@ -376,10 +432,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/link.c",
@@ -402,10 +462,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/message.c",
@@ -428,10 +492,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/syscall.c",
@@ -454,10 +522,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/syscall_objdir.c",
@@ -468,6 +540,36 @@
"output": "sys/syscall_objdir.o"
},
{
+ "file": "sys/syscall_pagedir.c",
+ "arguments": [
+ "x86_64-elf-gcc",
+ "-ffreestanding",
+ "-fno-pie",
+ "-fno-pic",
+ "-g",
+ "-MD",
+ "-D__x86_64__",
+ "-D__limine__",
+ "-Iinclude",
+ "-I.",
+ "-march=x86-64",
+ "-m64",
+ "-mno-red-zone",
+ "-mno-mmx",
+ "-mcmodel=kernel",
+ "-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
+ "-Iuacpi/include",
+ "-c",
+ "sys/syscall_pagedir.c",
+ "-o",
+ "sys/syscall_pagedir.o"
+ ],
+ "directory": "/home/jon/prg/jove/kernel",
+ "output": "sys/syscall_pagedir.o"
+ },
+ {
"file": "sys/syscall_untyped.c",
"arguments": [
"x86_64-elf-gcc",
@@ -480,10 +582,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/syscall_untyped.c",
@@ -506,10 +612,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"sys/syscall_vtt.c",
@@ -532,10 +642,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"boot/limine/framebuffer.c",
@@ -558,10 +672,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"boot/limine/memorymap.c",
@@ -584,10 +702,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"boot/limine/start.c",
@@ -598,6 +720,36 @@
"output": "boot/limine/start.o"
},
{
+ "file": "boot/limine/uacpi.c",
+ "arguments": [
+ "x86_64-elf-gcc",
+ "-ffreestanding",
+ "-fno-pie",
+ "-fno-pic",
+ "-g",
+ "-MD",
+ "-D__x86_64__",
+ "-D__limine__",
+ "-Iinclude",
+ "-I.",
+ "-march=x86-64",
+ "-m64",
+ "-mno-red-zone",
+ "-mno-mmx",
+ "-mcmodel=kernel",
+ "-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
+ "-Iuacpi/include",
+ "-c",
+ "boot/limine/uacpi.c",
+ "-o",
+ "boot/limine/uacpi.o"
+ ],
+ "directory": "/home/jon/prg/jove/kernel",
+ "output": "boot/limine/uacpi.o"
+ },
+ {
"file": "arch/x86_64/lib/printf.c",
"arguments": [
"x86_64-elf-gcc",
@@ -610,10 +762,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/lib/printf.c",
@@ -636,10 +792,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/gdt.c",
@@ -662,10 +822,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/idt.c",
@@ -688,10 +852,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/msr.c",
@@ -714,10 +882,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/obj.c",
@@ -740,10 +912,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/paging.c",
@@ -766,10 +942,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/process.c",
@@ -792,10 +972,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/serial_com.c",
@@ -818,10 +1002,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/hal/smp.c",
@@ -832,6 +1020,36 @@
"output": "arch/x86_64/hal/smp.o"
},
{
+ "file": "arch/x86_64/hal/uacpi.c",
+ "arguments": [
+ "x86_64-elf-gcc",
+ "-ffreestanding",
+ "-fno-pie",
+ "-fno-pic",
+ "-g",
+ "-MD",
+ "-D__x86_64__",
+ "-D__limine__",
+ "-Iinclude",
+ "-I.",
+ "-march=x86-64",
+ "-m64",
+ "-mno-red-zone",
+ "-mno-mmx",
+ "-mcmodel=kernel",
+ "-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
+ "-Iuacpi/include",
+ "-c",
+ "arch/x86_64/hal/uacpi.c",
+ "-o",
+ "arch/x86_64/hal/uacpi.o"
+ ],
+ "directory": "/home/jon/prg/jove/kernel",
+ "output": "arch/x86_64/hal/uacpi.o"
+ },
+ {
"file": "arch/x86_64/sys/init.c",
"arguments": [
"x86_64-elf-gcc",
@@ -844,10 +1062,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/sys/init.c",
@@ -870,10 +1092,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/sys/link.c",
@@ -896,10 +1122,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/sys/serial.c",
@@ -922,10 +1152,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/sys/syscall.c",
@@ -948,10 +1182,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"arch/x86_64/boot/limine/framebuffer.c",
@@ -974,10 +1212,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/default_handlers.c",
@@ -1000,10 +1242,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/event.c",
@@ -1026,10 +1272,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/interpreter.c",
@@ -1052,10 +1302,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/io.c",
@@ -1078,10 +1332,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/mutex.c",
@@ -1104,10 +1362,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/namespace.c",
@@ -1130,10 +1392,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/notify.c",
@@ -1156,10 +1422,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/opcodes.c",
@@ -1182,10 +1452,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/opregion.c",
@@ -1208,10 +1482,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/osi.c",
@@ -1234,10 +1512,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/registers.c",
@@ -1260,10 +1542,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/resources.c",
@@ -1286,10 +1572,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/shareable.c",
@@ -1312,10 +1602,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/sleep.c",
@@ -1338,10 +1632,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/stdlib.c",
@@ -1364,10 +1662,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/tables.c",
@@ -1390,10 +1692,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/types.c",
@@ -1416,10 +1722,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/uacpi.c",
@@ -1442,10 +1752,14 @@
"-D__limine__",
"-Iinclude",
"-I.",
+ "-march=x86-64",
"-m64",
"-mno-red-zone",
+ "-mno-mmx",
"-mcmodel=kernel",
"-mfsgsbase",
+ "-DUACPI_BAREBONES_MODE",
+ "-DUACPI_FORMATTED_LOGGING",
"-Iuacpi/include",
"-c",
"uacpi/source/utilities.c",
diff --git a/hal/memory.h b/hal/memory.h
index ca021ef..f1cf9db 100644
--- a/hal/memory.h
+++ b/hal/memory.h
@@ -1,7 +1,7 @@
#ifndef _JOVE_HAL_MEMORY_H
#define _JOVE_HAL_MEMORY_H 1
-#include "obj.h"
+#include "hal/obj.h"
#include "api/syscall.h"
typedef struct jove_obj_untyped
diff --git a/hal/obj.h b/hal/obj.h
index 7a6ab76..151f4eb 100644
--- a/hal/obj.h
+++ b/hal/obj.h
@@ -9,4 +9,41 @@
#include "arch/x86_64/hal/obj.h"
#endif
+typedef struct jove_objdir
+{
+ jove_obj_t entries[JOVE_OBJDIR_ENTRIES];
+} jove_objdir_t;
+
+/*Locks the mutex of the kernel object provided. Returns the locked version. */
+jove_owned_obj_t *obj_take(jove_obj_t *obj);
+/*Unlocks the mutex of the kernel object provided. Returns the unlocked version. */
+jove_obj_t *obj_release(jove_owned_obj_t *obj);
+
+/*Converts the value pointer of the object into a pointer to kernel memory.*/
+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);
+void obj_settype(jove_owned_obj_t *obj, uint8_t type);
+
+/*Getters and setters for accessing the value field of the kernel object. */
+uintmax_t obj_getvalue(jove_owned_obj_t *obj);
+void obj_setvalue(jove_owned_obj_t *obj, uintmax_t value);
+
+/*Returns the n'th entry of the object directory passed.
+ * If the passed object is not an objdir, returns NULL and sets errno to EBADOBJ.
+ * If the passed entry index is out of bounds, returns NULL and sets errno to EOOB.*/
+jove_owned_obj_t *objdir_getlocal(jove_owned_obj_t *objdir_obj, uint16_t entry);
+jove_obj_t objdir_peeklocal(jove_owned_obj_t *objdir_obj, uint16_t entry);
+
+/*Recursively seeks through an object directory for an object following the passed
+ * path variable.
+ * If the path length is zero, returns the passed object.
+ * If the passed object is not an objdir, returns NULL and sets errno to EBADOBJ.
+ * If any object excluding the object at the end of the path is not an objdir,
+ * returns NULL and sets errno to EBADOBJ.
+ * If any entry in the path is out of bounds, returns NULL and sets errno to EBADOBJ.*/
+jove_owned_obj_t *objdir_getobj(jove_owned_obj_t *objdir_obj, const uint16_t *path, size_t path_len);
+
#endif
diff --git a/hal/uacpi.c b/hal/uacpi.c
index 0af50b2..5aea792 100644
--- a/hal/uacpi.c
+++ b/hal/uacpi.c
@@ -1,5 +1,11 @@
+#include "arch/x86_64/hal/obj.h"
+#include "init.h"
#include "uacpi/uacpi.h"
#include "lib/printf.h"
+#include "uacpi/tables.h"
+#include <hal/obj.h>
+
+jove_objdir_t s_acpi_objdir = { 0 };
void uacpi_kernel_log(uacpi_log_level lvl, const uacpi_char* fmt, ...)
{
@@ -11,3 +17,30 @@ void uacpi_kernel_log(uacpi_log_level lvl, const uacpi_char* fmt, ...)
va_end(ap);
}
+void
+uacpi_kernel_init(void)
+{
+ uint8_t uacpi_buffer[1024];
+ uacpi_setup_early_table_access(uacpi_buffer, 1024);
+
+ jove_owned_obj_t *acpi_objdir_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_ACPI_I);
+ obj_settype(acpi_objdir_obj, JOVE_OBJ_OBJDIR);
+ obj_setvalue(acpi_objdir_obj, (uintptr_t)&s_acpi_objdir);
+
+ size_t num_tables = uacpi_table_count();
+ for(size_t i = 0; i < num_tables; i++) {
+ uacpi_table table;
+ uacpi_status get_res = uacpi_table_get_by_index(i, &table);
+
+ if(get_res != UACPI_STATUS_OK) {
+ kprintf("uacpi: Failed to get table %i with code %s\n", i, uacpi_status_to_string(get_res));
+ continue;
+ }
+
+ jove_owned_obj_t *table_obj = objdir_getlocal(acpi_objdir_obj, i);
+ obj_settype(table_obj, JOVE_OBJ_ACPI_TABLE);
+ obj_setvalue(table_obj, table.virt_addr);
+ obj_release(table_obj);
+ }
+ obj_release(acpi_objdir_obj);
+}
diff --git a/hal/uacpi.h b/hal/uacpi.h
new file mode 100644
index 0000000..a3790c0
--- /dev/null
+++ b/hal/uacpi.h
@@ -0,0 +1,6 @@
+#ifndef _JOVE_UACPI_H
+#define _JOVE_UACPI_H 1
+
+void uacpi_kernel_init(void);
+
+#endif
diff --git a/init.h b/init.h
index db8a4a6..b80d1fa 100644
--- a/init.h
+++ b/init.h
@@ -1,19 +1,9 @@
#ifndef _JOVE_INIT_H
#define _JOVE_INIT_H 1
-extern void *_rootdir_obj;
-
-#define ROOTDIR_PROCESSORS_I 0x0
-#define ROOTDIR_PAGEDIR_I 0x01
-#define ROOTDIR_UNTYPED_I 0x02
-#define ROOTDIR_PCB_I 0x03
-#define ROOTDIR_IOPB_I 0x04
-#define ROOTDIR_INITRD_I 0x05
-#define ROOTDIR_MESSAGE_I 0x06
+#include "api/init.h"
-#define ROOTDIR_SERIAL_COM_I 0x80
-#define ROOTDIR_FRAMEBUFFER_I 0x81
-#define ROOTDIR_VIRTTERM_I 0x82
+extern void *_rootdir_obj;
void init_setup(void);
diff --git a/sys/syscall.c b/sys/syscall.c
index eb2874d..0351c95 100644
--- a/sys/syscall.c
+++ b/sys/syscall.c
@@ -45,7 +45,8 @@ static const syscall_handle_t s_syscall_handles[128] = {
[JOVE_OBJ_PAGEDIR] = _syscall_handle_generic,
[JOVE_OBJ_PROCESSOR] = _syscall_handle_generic,
[JOVE_OBJ_PROCESS] = _syscall_handle_generic,
- [JOVE_OBJ_PAGEFRAME] = _syscall_handle_generic,
+ [JOVE_OBJ_ACPI_TABLE] = _syscall_handle_generic,
+ [JOVE_OBJ_INT_HANDLE] = _syscall_handle_generic,
[JOVE_OBJ_INITRD_FILE] = _syscall_handle_generic,
[JOVE_OBJ_FRAMEBUFFER] = _syscall_handle_generic,
[JOVE_OBJ_VIRTTERM] = _syscall_handle_vtt,