summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2025-08-11 19:04:26 -0400
committerJon Santmyer <jon@jonsantmyer.com>2025-08-11 19:04:26 -0400
commitf466364b8a3858e7b3f19258d142851cb4a7e6d6 (patch)
treea22819dc585c44a6dd0cdd5c6856420443a031eb /arch
parentc4f8ef91f18d854a4ede7a94e95b2eab898d6963 (diff)
downloadjove-kernel-main.tar.gz
jove-kernel-main.tar.bz2
jove-kernel-main.zip
remove _initData, replace with enum indexesmain
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/page_directory.c4
-rw-r--r--arch/x86_64/processor.c5
-rw-r--r--arch/x86_64/untyped_memory.c4
-rw-r--r--arch/x86_64/usermode.c28
4 files changed, 11 insertions, 30 deletions
diff --git a/arch/x86_64/page_directory.c b/arch/x86_64/page_directory.c
index bcc71cf..494cab5 100644
--- a/arch/x86_64/page_directory.c
+++ b/arch/x86_64/page_directory.c
@@ -112,10 +112,8 @@ vmem_setup(void)
__asm__ volatile("mov %0, %%cr3":: "r"(kernel_pml4_base));
//Add page mapping object to init directory.
- uint8_t pm_i = _initDirectory.self.data++;
- _initDirectory.entries[pm_i] = (objdir_entry_t) {
+ _initDirectory.entries[INIT_OBJECT_PAGEMAP] = (objdir_entry_t) {
.type = KO_MEMORY_MAPPING,
.data = kernel_pml4_base | 3
};
- _initData.pm_object = pm_i;
}
diff --git a/arch/x86_64/processor.c b/arch/x86_64/processor.c
index 666eb3d..3ebf1ee 100644
--- a/arch/x86_64/processor.c
+++ b/arch/x86_64/processor.c
@@ -103,13 +103,10 @@ bsp_setup(void)
enable_avx();
#endif
- uint64_t pd_i = _initDirectory.self.data++;
-
- _initDirectory.entries[pd_i] = (objdir_entry_t) {
+ _initDirectory.entries[INIT_OBJECT_PROCESSOR_DIR] = (objdir_entry_t) {
.type = KO_OBJECT_DIRECTORY,
.data = (uintptr_t)(&s_processor_dir)
};
- _initData.processor_dir = pd_i;
ivt_setup();
s_enable_sce();
diff --git a/arch/x86_64/untyped_memory.c b/arch/x86_64/untyped_memory.c
index 699cdbf..bd3bc6d 100644
--- a/arch/x86_64/untyped_memory.c
+++ b/arch/x86_64/untyped_memory.c
@@ -22,12 +22,10 @@ static volatile struct limine_memmap_request s_memmap_req = {
void
pmem_setup(void)
{
- size_t diri = _initDirectory.self.data++;
- _initDirectory.entries[diri] = (objdir_entry_t) {
+ _initDirectory.entries[INIT_OBJECT_UNTYPED_DIR] = (objdir_entry_t) {
.type = KO_OBJECT_DIRECTORY,
.data = (uintptr_t)&s_untyped_dir
};
- _initData.untyped_data_dir = diri;
if(s_memmap_req.response == NULL) {
klogf("Failed to load physical memory map");
diff --git a/arch/x86_64/usermode.c b/arch/x86_64/usermode.c
index 66a641c..68cb45a 100644
--- a/arch/x86_64/usermode.c
+++ b/arch/x86_64/usermode.c
@@ -15,7 +15,7 @@ static uintptr_t
s_new_mapping(objdir_t *untyped_dir)
{
objdir_entry_t *untyped_entry = NULL;
- for(int i = 1; i < OBJECT_DIRECTORY_MAX_ENTRIES; i++) {
+ for(int i = untyped_dir->self.data - 1; i != 0; i--) {
untyped_entry = &untyped_dir->entries[i];
if(untyped_entry->type != KO_MEMORY_UNTYPED) continue;
uintptr_t mapping = 0;
@@ -23,7 +23,7 @@ s_new_mapping(objdir_t *untyped_dir)
if(err != 0) continue;
return mapping;
}
- return 0;
+ kpanic("Could not allocate page for init\n");
}
static pmle_t*
@@ -97,22 +97,13 @@ init_load(void)
kpanic("Init file not found in initrd. (expected \"%s\")", init_filename);
}
- size_t tcb_diri = _initDirectory.self.data++;
- size_t message_diri = _initDirectory.self.data++;
-
- _initData.tcb_object = tcb_diri;
- _initData.message_object = message_diri;
-
- _initDirectory.entries[tcb_diri] = (objdir_entry_t) {
+ _initDirectory.entries[INIT_OBJECT_TCB] = (objdir_entry_t) {
.type = KO_TCB,
.data = (uintptr_t)&s_init_tcb
};
- size_t untyped_diri = _initData.untyped_data_dir;
- objdir_t *untyped_dir = (objdir_t*)_initDirectory.entries[untyped_diri].data;
-
- size_t pml4_diri = _initData.pm_object;
- pmle_t *pml4 = vmem_phys_tovirt(_initDirectory.entries[pml4_diri].data & ~3ULL);
+ objdir_t *untyped_dir = (objdir_t*)_initDirectory.entries[INIT_OBJECT_UNTYPED_DIR].data;
+ pmle_t *pml4 = vmem_phys_tovirt(_initDirectory.entries[INIT_OBJECT_PAGEMAP].data & ~3ULL);
//Reserve and map pages for init binary
size_t init_size = initrd_file_size(init_header);
@@ -143,17 +134,14 @@ init_load(void)
message_base += ((~(message_base & 0xFFF)) & 0xFFF) + 1;
uintptr_t message_phys = s_map_page(pml4, untyped_dir, message_base);
- _initDirectory.entries[message_diri] = (objdir_entry_t) {
+ _initDirectory.entries[INIT_OBJECT_MESSAGE] = (objdir_entry_t) {
.type = KO_MESSAGE,
.data = (uintptr_t)vmem_phys_tovirt(message_phys)
};
- _initData.message_object_address = message_base;
- //Write init data to user stack.
- sp -= sizeof(init_data_t);
- memcpy((void*)sp, &_initData, sizeof(init_data_t));
+ //Write message address to user stack.
sp -= sizeof(uintptr_t);
- *((uintptr_t*)sp) = sp + sizeof(uintptr_t);
+ *((uintptr_t*)sp) = message_base;
//Setup usermode and jump
proc->tcb = &s_init_tcb;