diff options
author | Danny Holman <dholman@gymli.org> | 2025-01-12 01:17:36 -0600 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2025-01-12 01:19:11 -0600 |
commit | 95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf (patch) | |
tree | c8c35347b50477929727fa5be9f5d0f55cbe18fd /arch/i386/kernel/kmalloc.c | |
parent | 5e166f3042a8e7b3031aae4da7006f80caa53ecc (diff) |
PROJECT RESTRUCTURING
Move the entire kernel into its own directory. Create new directories
for system commands, libraries and other required essentials for a
complete Unix-like operating system.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/kernel/kmalloc.c')
-rw-r--r-- | arch/i386/kernel/kmalloc.c | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/arch/i386/kernel/kmalloc.c b/arch/i386/kernel/kmalloc.c deleted file mode 100644 index ea77428..0000000 --- a/arch/i386/kernel/kmalloc.c +++ /dev/null @@ -1,68 +0,0 @@ -#include <libk/kmalloc.h> -#include <kernel/paging.h> -#include <kernel/pmem.h> -#include <kernel/asm.h> -#include <kernel/vmem.h> -#include <kernel/panic.h> -#include <stdint.h> - -static uintptr_t heap_start = KEND + 0xC0001000; -static uintptr_t heap_end = 0xFFBFF000; - -static void *kbrk = NULL; -static struct mem_block *first = NULL; - -void _request_page(void) { - uintptr_t paddr = pfa_alloc(1); - uintptr_t vaddr = PGROUNDDN((uintptr_t)kbrk + PAGE_SIZE); - kbrk += PAGE_SIZE; - map_page(paddr, vaddr, PD_PRES | PD_RW); -} - -void kmalloc_init(void) { - kbrk = PGROUNDDN(heap_start); - _request_page(); - first = (struct mem_block*)kbrk; - first->start = (uintptr_t)kbrk + sizeof(struct mem_block); - first->size = 0; - first->alloc = 1; - first->next = NULL; -} - -void* kmalloc(size_t sz) { - if (kbrk == NULL) - panic("Attmpted to malloc before initialization"); - if ((uintptr_t)kbrk >= heap_end) - return NULL; - - struct mem_block *temp = first; - while (temp->next != NULL) { - if (temp->next->size <= sz && temp->next->alloc == 0) { - temp->next->alloc = 1; - return (void*)temp->next->start; - } - temp = temp->next; - } - - temp->next = (struct mem_block*)((uintptr_t)temp + sizeof(struct mem_block) + temp->size); - if (temp->next > kbrk) - _request_page(); - temp->next->prev = temp; - temp->next->start = (uintptr_t)(temp->next + sizeof(struct mem_block)); - temp->next->size = sz; - temp->next->alloc = 1; - temp->next->next = NULL; - return (void*)temp->start; -} - -void kfree(void *ptr) { - struct mem_block *temp = first; - while (temp != NULL) { - if (temp->start == (uintptr_t)ptr) { - temp->alloc = 0; - return; - } - temp = temp->next; - } - panic("Attempted to free memory not alloc'd"); -} |