summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/includes/mmu.h5
-rw-r--r--kernel/init/kernel.c12
2 files changed, 11 insertions, 6 deletions
diff --git a/kernel/includes/mmu.h b/kernel/includes/mmu.h
index 1df337d..f3af5e4 100644
--- a/kernel/includes/mmu.h
+++ b/kernel/includes/mmu.h
@@ -31,7 +31,8 @@ typedef struct PageDirectory {
uint32_t physical_address;
} PageDirectory;
-int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags, PageDirectory *pd);
+int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags,
+ PageDirectory *pd);
void mmu_allocate_shared_kernel_region(void *rc, size_t n);
void *mmu_find_unallocated_virtual_range(void *addr, size_t length);
void mmu_remove_virtual_physical_address_mapping(void *ptr, size_t length);
@@ -45,7 +46,7 @@ void mmu_map_physical(void *dst, PageDirectory *d, void *physical,
void mmu_free_pages(void *a, uint32_t n);
void flush_tlb(void);
-void paging_init(void);
+void paging_init(uint64_t memsize);
PageDirectory *get_active_pagedirectory(void);
void move_stack(uint32_t new_stack_address, uint32_t size);
void switch_page_directory(PageDirectory *directory);
diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c
index 8c0f70c..9fe7ac4 100644
--- a/kernel/init/kernel.c
+++ b/kernel/init/kernel.c
@@ -39,17 +39,21 @@ uintptr_t data_end;
void kernel_main(uint32_t kernel_end, unsigned long magic, unsigned long addr,
uint32_t inital_stack) {
- data_end = kernel_end;
+ (void)kernel_end;
+ data_end = 0xc0400000;
inital_esp = inital_stack;
asm("cli");
kprintf("If you see this then the serial driver works :D.\n");
assert(magic == MULTIBOOT_BOOTLOADER_MAGIC);
- paging_init();
+ multiboot_info_t *mb = (multiboot_info_t *)(addr + 0xc0000000);
+ uint32_t mem_kb = mb->mem_lower;
+ uint32_t mem_mb = (mb->mem_upper - 1000) / 1000;
+ uint64_t memsize_kb = mem_mb * 1000 + mem_kb;
+ paging_init(memsize_kb);
klog("Paging Initalized", LOG_SUCCESS);
- multiboot_info_t *mb =
- mmu_map_frames((multiboot_info_t *)addr, sizeof(multiboot_info_t));
+ mb = mmu_map_frames((multiboot_info_t *)addr, sizeof(multiboot_info_t));
gdt_init();
klog("GDT Initalized", LOG_SUCCESS);