From 391ed256d21a6ae2e2456d1809f357e6e96e15d1 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Mon, 20 Jan 2020 23:12:54 +0100 Subject: Added pure awesomeness Actually quite some days of work but ok --- src/kernel/memory/kheap.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/kernel/memory/kheap.h (limited to 'src/kernel/memory/kheap.h') diff --git a/src/kernel/memory/kheap.h b/src/kernel/memory/kheap.h new file mode 100644 index 0000000..f31a2d3 --- /dev/null +++ b/src/kernel/memory/kheap.h @@ -0,0 +1,52 @@ +#ifndef MELVIX_KHEAP_H +#define MELVIX_KHEAP_H + +#include +#include + +#define KHEAP_START 0xC0000000 +#define KHEAP_INITIAL_SIZE 0x100000 + +#define HEAP_INDEX_SIZE 0x20000 +#define HEAP_MAGIC 0xabcdef42 +#define HEAP_MIN_SIZE 0x70000 + +typedef struct { + uint32_t magic; + uint8_t is_hole; + uint32_t size; +} header_t; + +typedef struct { + uint32_t magic; + header_t *header; +} footer_t; + +typedef struct { + ordered_array_t index; + uint32_t start_address; + uint32_t end_address; + uint32_t max_address; + uint8_t supervisor; + uint8_t readonly; +} heap_t; + +heap_t *create_heap(uint32_t start, uint32_t end, uint32_t max, uint8_t supervisor, uint8_t readonly); + +void *alloc(uint32_t size, uint8_t page_align, heap_t *heap); + +void free(void *p, heap_t *heap); + +uint32_t kmalloc_int(uint32_t sz, int align, uint32_t *phys); + +uint32_t kmalloc_a(uint32_t sz); + +uint32_t kmalloc_p(uint32_t sz, uint32_t *phys); + +uint32_t kmalloc_ap(uint32_t sz, uint32_t *phys); + +uint32_t kmalloc(uint32_t sz); + +void kfree(void *p); + +#endif \ No newline at end of file -- cgit v1.2.3