diff options
Diffstat (limited to 'boot/limine')
| -rw-r--r-- | boot/limine/memorymap.c | 28 |
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 | |
