summaryrefslogtreecommitdiff
path: root/src/mm/kernel_heap.c
diff options
context:
space:
mode:
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);
+}