diff options
Diffstat (limited to 'kernel/memory/memory.c')
-rw-r--r-- | kernel/memory/memory.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/kernel/memory/memory.c b/kernel/memory/memory.c index 145ce2b..b4ecb0d 100644 --- a/kernel/memory/memory.c +++ b/kernel/memory/memory.c @@ -1,21 +1,67 @@ +#include "lib/klib.h" #include <comus/memory.h> #include <comus/asm.h> #include <comus/mboot.h> #include <lib.h> +#include "memory.h" #include "paging.h" #include "virtalloc.h" #include "physalloc.h" +mem_ctx_t kernel_mem_ctx; +struct mem_ctx_s _kernel_mem_ctx; +extern volatile char kernel_pml4[]; +extern struct virt_ctx kernel_virt_ctx; + +void *kmapaddr(void *phys, void *virt, size_t len, unsigned int flags) +{ + return mem_mapaddr(kernel_mem_ctx, phys, virt, len, flags); +} + +void kunmapaddr(void *virt) +{ + mem_unmapaddr(kernel_mem_ctx, virt); +} + +void *kalloc_page(void) +{ + return mem_alloc_page(kernel_mem_ctx); +} + +void *kalloc_pages(size_t count) +{ + return mem_alloc_pages(kernel_mem_ctx, count); +} + +void kfree_pages(void *ptr) +{ + mem_free_pages(kernel_mem_ctx, ptr); +} + +int kload_page(void *virt) +{ + return mem_load_page(kernel_mem_ctx, virt); +} + +mem_ctx_t alloc_mem_ctx(void) +{ + panic("alloc_mem_ctx not yet implemented"); +} + void memory_init(void) { struct memory_map mmap; if (mboot_get_mmap(&mmap)) panic("failed to load memory map"); + kernel_mem_ctx = &_kernel_mem_ctx; + kernel_mem_ctx->pml4 = kernel_pml4; + kernel_mem_ctx->virtctx = &kernel_virt_ctx; + cli(); paging_init(); - virtaddr_init(); + virtaddr_init(kernel_mem_ctx->virtctx); physalloc_init(&mmap); sti(); } |