This commit is contained in:
nub31
2025-09-03 17:43:23 +02:00
parent 0b8ee325aa
commit 0583c8c1a3
12 changed files with 10 additions and 135 deletions

View File

@@ -0,0 +1,52 @@
#include "mmap.h"
#include "../../api.h"
#include <stddef.h>
#include <stdio.h>
#define USABLE_REGION_SIZE 32
memory_map_t memory_map;
static memory_region_t usable_regions[USABLE_REGION_SIZE];
void map_memory(multiboot_info_t* info)
{
if (!(info->flags & (1 << 6)))
{
printf("Invalid memory map given by bootloader\n");
panic();
}
size_t num_regions = 0;
uint64_t offset = 0;
while (offset < info->mmap_length)
{
multiboot_memory_map_t* mmmt = (multiboot_memory_map_t*)(info->mmap_addr + offset);
if (mmmt->type == MULTIBOOT_MEMORY_AVAILABLE)
{
if (num_regions < USABLE_REGION_SIZE)
{
usable_regions[num_regions] = (memory_region_t){
.base_address = mmmt->addr,
.length = mmmt->len,
};
num_regions++;
}
else
{
printf("System has more memory than the memory map can hold\n");
break;
}
}
offset += mmmt->size + sizeof(mmmt->size);
}
memory_map = (memory_map_t){
.num_regions = num_regions,
.regions = usable_regions,
};
}