diff --git a/include/pageallocator.h b/include/pageallocator.h index 3bb71d3..89cfe83 100644 --- a/include/pageallocator.h +++ b/include/pageallocator.h @@ -72,4 +72,4 @@ size_t free_page_count(struct page_stack_t *stack); * @param stack * @param map */ -int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map); +int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map, physaddr_t *stack_base); diff --git a/src/pageallocator.c b/src/pageallocator.c index 775a928..f69dbf3 100644 --- a/src/pageallocator.c +++ b/src/pageallocator.c @@ -45,8 +45,11 @@ size_t free_page_count(struct page_stack_t *stack) return stack->base_pointer - stack->stack_pointer; } -int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map) +int initialize_page_stack(struct page_stack_t *stack, struct memory_map_t *map, physaddr_t *stack_base) { + stack->base_pointer = stack_base; + stack->limit_pointer = stack_base; + stack->stack_pointer = stack_base; stack->total_pages = 0; for(int i = 0; i < map->size; i++) { diff --git a/src/x86/quark_x86.c b/src/x86/quark_x86.c index b03ef31..491104e 100644 --- a/src/x86/quark_x86.c +++ b/src/x86/quark_x86.c @@ -11,6 +11,7 @@ #include "string.h" #include "module.h" #include "system.h" +#include "syscalls.h" #include "config.h" #include #include @@ -52,22 +53,16 @@ int initialize(void *multiboot_info) { printf("%i\t\t\t%08x\t\t%u\n", boot_info.map.array[i].type, boot_info.map.array[i].location, boot_info.map.array[i].size); }*/ - page_stack.base_pointer = (physaddr_t*)0xFFC00000; - page_stack.stack_pointer = (physaddr_t*)0xFFC00000; - page_stack.limit_pointer = (physaddr_t*)0xFFC00000; - initialize_page_stack(&page_stack, &boot_info.map); + initialize_page_stack(&page_stack, &boot_info.map, (physaddr_t*)0xFFC00000); static struct priority_queue_t priority_queue; construct_priority_queue(&priority_queue, &page_stack); static struct resource_table_t resource_table; construct_resource_table(&resource_table, &page_stack); - kernel_state.page_stack = &page_stack; - kernel_state.resource_table = &resource_table; - kernel_state.priority_queue = &priority_queue; - kernel_state.active_process = NULL; - for(int i = 0; i < boot_info.module_count; i++) - { - load_module(&kernel_state, &boot_info.modules[i]); - } + construct_kernel_state(&kernel_state, &page_stack, &priority_queue, &resource_table, boot_info.module_count, boot_info.modules); + memset(syscall_table, 0, sizeof(syscall_t)*32); + syscall_table[SYSCALL_TEST] = test_syscall; + syscall_table[SYSCALL_MMAP] = mmap; + syscall_table[SYSCALL_MUNMAP] = munmap; apic_enable(page_stack); /*apic_registers->divide_config.value = APIC_DIVIDE_1; apic_registers->lvt_timer.timer_mode = APIC_TIMER_PERIODIC;