summaryrefslogtreecommitdiff
path: root/src/mm/kernel_heap.c
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2025-09-14 14:18:41 +0200
committerCarlos Maiolino <[email protected]>2025-09-14 14:18:41 +0200
commitcd2c4e4a25cb41ca6fe622f0ccf1b1a3dd9d5660 (patch)
tree319ff940278d98f0010bdcdfcbc08bf22cb6aec0 /src/mm/kernel_heap.c
parent833f883ab85d57d8f9cfae5a2181b3e097fae8bd (diff)
Add a kernel heap
Use the heap API to implement a 100MiB heap to be used by the kernel code. Add example usage to src/kernel.c Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'src/mm/kernel_heap.c')
-rw-r--r--src/mm/kernel_heap.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mm/kernel_heap.c b/src/mm/kernel_heap.c
new file mode 100644
index 0000000..e53057c
--- /dev/null
+++ b/src/mm/kernel_heap.c
@@ -0,0 +1,35 @@
+#include <mm/kernel_heap.h>
+#include <mm/heap.h>
+#include <toxic/config.h>
+#include <toxic/vga.h>
+
+struct heap kernel_heap;
+
+struct heap_table kernel_heap_table;
+
+void
+kernel_heap_init()
+{
+ int ret;
+ void *end = (void *)(KERNEL_HEAP_ADDR + KERNEL_HEAP_SIZE_BYTES);
+
+ kernel_heap_table.entries = (unsigned char *)KERNEL_HEAP_TBL_ADDR;
+ kernel_heap_table.count = KERNEL_HEAP_ENTRIES;
+
+ ret = heap_create(&kernel_heap,
+ (void *)KERNEL_HEAP_ADDR,
+ end,
+ &kernel_heap_table);
+
+ if (ret < 0)
+ vprintl("Failed to create kernel's heap\n");
+}
+
+void * kmalloc(size_t size)
+{
+ return heap_malloc(&kernel_heap, size);
+}
+
+void kfree(void *ptr) {
+ heap_free(&kernel_heap, ptr);
+}