summaryrefslogtreecommitdiff
path: root/kernel/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/memory.h')
-rw-r--r--kernel/memory.h43
1 files changed, 38 insertions, 5 deletions
diff --git a/kernel/memory.h b/kernel/memory.h
index da573da..af50c36 100644
--- a/kernel/memory.h
+++ b/kernel/memory.h
@@ -4,13 +4,46 @@
#include <stdint.h>
typedef uint64_t phys_addr_t;
-typedef uint64_t virt_addr_t;
-void memory_init();
+enum memory_range_type
+{
+ UNUSABLE_MEMORY,
+ RESERVED_MEMORY,
+ SYSTEM_MEMORY,
+ AVAILABLE_MEMORY,
+};
-void *kmalloc(size_t size);
-void kfree(void *block);
+struct memory_range
+{
+ enum memory_range_type type;
+ phys_addr_t base;
+ size_t size;
+};
+
+enum map_page_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,
+};
+
+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);
+void *memcmp(const void *str1, const void *str2, size_t count);
+
+void *kernel_map_page_at(void *vaddr,
+ phys_addr_t phys,
+ enum map_page_flags flags);
+void kernel_unmap_page(void *virt);
phys_addr_t page_alloc(void);
void page_free(phys_addr_t page);
-