diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-12-19 22:41:15 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-12-19 22:41:15 +0000 |
| commit | e303a03e7c96bc5bf7fa93f7b46ce63196893d7a (patch) | |
| tree | f187b374feec85015d6df1f94db618a3f5cc893f /kc/core/memory.h | |
| parent | bff63a4337eb3388617d230970c5eb2684d6a215 (diff) | |
moving files around
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); |
