diff options
Diffstat (limited to 'kc/core/memory.h')
| -rw-r--r-- | kc/core/memory.h | 53 |
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); |
