diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-04-10 01:43:24 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-04-10 01:43:24 +0000 |
| commit | 3277ef3500a17171d17c23d7f81f9716cf9d3f52 (patch) | |
| tree | 6943dc993c6696ed4a0dd5877e855319f66a67ed /kernel/memory.h | |
| parent | 95a2b5509e675ca156eeec663daf088f3c48a75a (diff) | |
physical allocator is now available
Diffstat (limited to 'kernel/memory.h')
| -rw-r--r-- | kernel/memory.h | 43 |
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); - |
