summaryrefslogtreecommitdiff
path: root/kc/core/memory.h
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-12-19 22:41:15 +0000
committerAda Christine <adachristine18@gmail.com>2021-12-19 22:41:15 +0000
commite303a03e7c96bc5bf7fa93f7b46ce63196893d7a (patch)
treef187b374feec85015d6df1f94db618a3f5cc893f /kc/core/memory.h
parentbff63a4337eb3388617d230970c5eb2684d6a215 (diff)
moving files around
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);