page stack constructor takes stack base as argument
initialize() calls new constructors and fills in syscall table
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "string.h"
|
||||
#include "module.h"
|
||||
#include "system.h"
|
||||
#include "syscalls.h"
|
||||
#include "config.h"
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user