diff options
author | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-11 19:04:26 -0400 |
---|---|---|
committer | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-11 19:04:26 -0400 |
commit | f466364b8a3858e7b3f19258d142851cb4a7e6d6 (patch) | |
tree | a22819dc585c44a6dd0cdd5c6856420443a031eb /arch/x86_64 | |
parent | c4f8ef91f18d854a4ede7a94e95b2eab898d6963 (diff) | |
download | jove-kernel-f466364b8a3858e7b3f19258d142851cb4a7e6d6.tar.gz jove-kernel-f466364b8a3858e7b3f19258d142851cb4a7e6d6.tar.bz2 jove-kernel-f466364b8a3858e7b3f19258d142851cb4a7e6d6.zip |
remove _initData, replace with enum indexesmain
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/page_directory.c | 4 | ||||
-rw-r--r-- | arch/x86_64/processor.c | 5 | ||||
-rw-r--r-- | arch/x86_64/untyped_memory.c | 4 | ||||
-rw-r--r-- | arch/x86_64/usermode.c | 28 |
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; |