diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-31 04:41:37 -0500 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-31 04:41:37 -0500 |
commit | b2e01f02bc9a575ae57a06060df5d807bcf46220 (patch) | |
tree | 64f29371fcb97f67ff9e3332409cb1aa64d38af9 /kernel/libk/kmalloc.cc | |
parent | 7a0025ab97c42dfa350afbe4d545088c6e16a95a (diff) |
{physical_mm,virtual_mm,kmalloc}: C->C++
Diffstat (limited to 'kernel/libk/kmalloc.cc')
-rw-r--r-- | kernel/libk/kmalloc.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/kernel/libk/kmalloc.cc b/kernel/libk/kmalloc.cc new file mode 100644 index 0000000..4afaa61 --- /dev/null +++ b/kernel/libk/kmalloc.cc @@ -0,0 +1,74 @@ +/* + + * bubbl + * Copyright (C) 2025 Raghuram Subramani <raghus2247@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <libk/kmalloc.h> +#include <libk/stdio.h> +#include <mm/virtual_mm.h> +#include <stddef.h> +#include <stdint.h> + +memory_chunk_t *starting_mc = NULL; + +static memory_chunk_t * +add_block(void *address, uint32_t size) +{ + memory_chunk_t *mc = (memory_chunk_t *) address; + mc->next = NULL; + mc->prev = NULL; + + uint32_t chunk_size = size - sizeof(memory_chunk_t); + printk("kmalloc", "size(0x%x) chunk_size(0x%x)"); + + mc->size = chunk_size; + printk("kmalloc", + "mc(0x%x) mc->size(0x%x) chunk_size(0x%x)", + mc, + mc->size, + chunk_size); + return mc; +} + +static void +kmalloc_init(void) +{ + int *initial_region = (int *) VirtualMM::alloc_pages(MIN_PAGES); + printk("debug", "%x", initial_region); + /* *initial_region = 10; */ + + /* memory_chunk_t *mc = (memory_chunk_t *) initial_region; */ + /* mc->size = 10; */ + /* printk("kmalloc", "mc->size(0x%x)", mc->size); */ + + /* starting_mc = add_block(initial_region, 4 * PAGE_SIZE); */ +} + +void * +kmalloc(uint32_t size) +{ + if (!starting_mc) + kmalloc_init(); + + /* printk("kmalloc", */ + /* "Initialized region with starting_mc(0x%x) and size(0x%x)", */ + /* starting_mc, */ + /* starting_mc->size); */ + + (void) size; + return NULL; +} |