summaryrefslogtreecommitdiff
path: root/arch/i386/kernel/kmalloc.c
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2025-01-12 01:17:36 -0600
committerDanny Holman <dholman@gymli.org>2025-01-12 01:19:11 -0600
commit95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf (patch)
treec8c35347b50477929727fa5be9f5d0f55cbe18fd /arch/i386/kernel/kmalloc.c
parent5e166f3042a8e7b3031aae4da7006f80caa53ecc (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.c68
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");
-}