summaryrefslogtreecommitdiff
path: root/kernel/memory/memory.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-15 22:20:59 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-15 22:20:59 -0400
commit2dbf529c33aa3e24beff944758d586bb0608c1be (patch)
tree5b3381c3c8d9a74ccb988c8945fe0681c3ee7301 /kernel/memory/memory.c
parentfix %n (diff)
downloadcomus-2dbf529c33aa3e24beff944758d586bb0608c1be.tar.gz
comus-2dbf529c33aa3e24beff944758d586bb0608c1be.tar.bz2
comus-2dbf529c33aa3e24beff944758d586bb0608c1be.zip
expand memory manager work with userspace (more then one ctx)
Diffstat (limited to 'kernel/memory/memory.c')
-rw-r--r--kernel/memory/memory.c48
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();
}