summaryrefslogtreecommitdiff
path: root/kc/core/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'kc/core/memory.h')
-rw-r--r--kc/core/memory.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/kc/core/memory.h b/kc/core/memory.h
new file mode 100644
index 0000000..67b0648
--- /dev/null
+++ b/kc/core/memory.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include <kernel/memory/paging.h>
+#include <kernel/memory/range.h>
+
+#include <stddef.h>
+
+typdef int (*memory_space_handler_func)(uint32_t code, void *vaddr);
+
+enum page_map_flags
+{
+ CONTENT_CODE = 0x1,
+ CONTENT_RODATA = 0x2,
+ CONTENT_RWDATA = 0x3,
+ CONTENT_MASK = 0x3,
+
+ SIZE_4K = 0x4,
+ SIZE_2M = 0x8,
+ SIZE_1G = 0xc,
+ SIZE_MASK = 0xc,
+};
+
+enum memory_space_flags
+{
+ SYSTEM_SPACE = 0x1, // memory cannot be swapped
+};
+
+struct memory_space
+{
+ enum memory_space_flags flags;
+ memory_space_handler_func handler;
+ void *base;
+ void *head;
+};
+
+void memory_init(struct memory_range *ranges, int count);
+
+void *memcpy(void *dest, const void *src, size_t size);
+void *memmove(void *dest, const void *src, size_t size);
+void *memset(void *dest, int val, size_t size);
+int memcmp(const void *str1, const void *str2, size_t count);
+
+void *page_map(phys_addr_t paddr, enum page_map_flags flags);
+void page_unmap(void *vaddr);
+
+phys_addr_t page_alloc(void);
+void page_free(phys_addr_t paddr);
+
+void *heap_alloc(size_t size);
+void heap_free(void *block);
+
+void *memory_alloc(size_t size);
+void memory_free(void *block);