summaryrefslogtreecommitdiffstats
path: root/boot
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-07 17:37:26 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-07 17:37:26 -0400
commit434ddcd907832b1febc7d70e4faa52109c7eb3bd (patch)
tree00c1ade91f9806d831f10e6006732b294e73f613 /boot
parent8d48bbd9746228b63bafa5f92b621998d7d8f3d3 (diff)
downloadjove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.tar.gz
jove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.tar.bz2
jove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.zip
add memory region object for better memory managment
Diffstat (limited to 'boot')
-rw-r--r--boot/limine/memorymap.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/boot/limine/memorymap.c b/boot/limine/memorymap.c
index b90f176..e470e14 100644
--- a/boot/limine/memorymap.c
+++ b/boot/limine/memorymap.c
@@ -10,7 +10,7 @@
extern struct limine_memmap_response *_limine_memmap_resp;
PAGEALIGN
-static jove_objdir_t s_untyped_objdir;
+static jove_objdir_t s_region_objdir;
static jove_objdir_t s_hwmemory_objdir;
#define MEMMAP_MAX_ENTRIES 255
@@ -28,13 +28,13 @@ static const char *limine_mmap_entry_type_str[9] = {
};
void
-mem_setup_untyped(void)
+mem_setup_regions(void)
{
{
- jove_owned_obj_t *untyped_objdir_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_UNTYPED_I);
- obj_settype(untyped_objdir_obj, JOVE_OBJ_OBJDIR);
- obj_setvalue(untyped_objdir_obj, (uintptr_t)&s_untyped_objdir);
- obj_release(untyped_objdir_obj);
+ jove_owned_obj_t *region_objdir_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_FREEMEMORY_I);
+ obj_settype(region_objdir_obj, JOVE_OBJ_OBJDIR);
+ obj_setvalue(region_objdir_obj, (uintptr_t)&s_region_objdir);
+ obj_release(region_objdir_obj);
}
if(_limine_memmap_resp == NULL) {
@@ -43,10 +43,9 @@ mem_setup_untyped(void)
kprintf("Memory map provided by Limine:\n");
- size_t untyped_i = 0;
+ size_t region_i = 0;
size_t hwmem_i = 0;
- uintptr_t highest_phys = 0;
for(size_t i = 0; i < _limine_memmap_resp->entry_count; i++) {
struct limine_memmap_entry *entry = _limine_memmap_resp->entries[i];
@@ -54,23 +53,18 @@ mem_setup_untyped(void)
entry->type == LIMINE_MEMMAP_ACPI_RECLAIMABLE ||
entry->type == LIMINE_MEMMAP_BOOTLOADER_RECLAIMABLE)
{
- if(untyped_i > JOVE_OBJDIR_ENTRIES){
+ if(region_i > JOVE_OBJDIR_ENTRIES){
kprintf("%s: Provided memory map exceeds kernel limits. Some memory may not be accessable.", __func__);
break;
}
klogf("%p : %p %s\n", entry->base, entry->length, limine_mmap_entry_type_str[entry->type]);
if(entry->base == 0) continue;
- if(entry->base + entry->length > highest_phys) highest_phys = entry->base + entry->length;
{
- jove_owned_obj_t *untyped_obj = obj_take(&s_untyped_objdir.entries[untyped_i++]);
- obj_settype(untyped_obj, JOVE_OBJ_UNTYPED);
- obj_setvalue(untyped_obj, entry->base);
-
- jove_untyped_t *untyped_data = obj_deref(untyped_obj);
- untyped_data->limit = entry->length;
- obj_release(untyped_obj);
+ jove_owned_obj_t *region_obj = obj_take(&s_region_objdir.entries[region_i++]);
+ region_new(region_obj, entry->base, entry->length / 0x1000);
+ obj_release(region_obj);
}
}
if(entry->type == LIMINE_MEMMAP_RESERVED |