From 472ec944d2ed81d0304cc6cac80946a6a44776be Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sat, 19 Apr 2025 16:36:51 -0400 Subject: UEFI and republicans --- kernel/mboot/mmap.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'kernel/mboot/mmap.c') diff --git a/kernel/mboot/mmap.c b/kernel/mboot/mmap.c index d1d3d9a..96dc54c 100644 --- a/kernel/mboot/mmap.c +++ b/kernel/mboot/mmap.c @@ -7,6 +7,12 @@ #define MULTIBOOT_TAG_TYPE_MMAP 6 +#define MULTIBOOT_SEG_TYPE_RESV 0 +#define MULTIBOOT_SEG_TYPE_FREE 1 +#define MULTIBOOT_SEG_TYPE_ACPI 3 +#define MULTIBOOT_SEG_TYPE_HIBR 4 +#define MULTIBOOT_SEG_TYPE_DEFC 5 + struct multiboot_mmap_entry { uint64_t addr; uint64_t len; @@ -32,14 +38,32 @@ int mboot_get_mmap(struct memory_map *res) int idx = 0; uintptr_t i = (uintptr_t)mmap->entries; - for (; i < (uintptr_t)mmap->entries + mmap->size; - i += mmap->entry_size, idx++) { + for (; i < (uintptr_t)mmap->entries + mmap->size; i += mmap->entry_size) { if (idx >= N_MMAP_ENTRY) panic("Too many mmap entries: limit is %d", N_MMAP_ENTRY); struct multiboot_mmap_entry *seg = (struct multiboot_mmap_entry *)i; res->entries[idx].addr = seg->addr; res->entries[idx].len = seg->len; - res->entries[idx].type = seg->type; + switch (seg->type) { + case MULTIBOOT_SEG_TYPE_RESV: + res->entries[idx].type = SEG_TYPE_RESERVED; + break; + case MULTIBOOT_SEG_TYPE_FREE: + res->entries[idx].type = SEG_TYPE_FREE; + break; + case MULTIBOOT_SEG_TYPE_ACPI: + res->entries[idx].type = SEG_TYPE_ACPI; + break; + case MULTIBOOT_SEG_TYPE_HIBR: + res->entries[idx].type = SEG_TYPE_HIBERNATION; + break; + case MULTIBOOT_SEG_TYPE_DEFC: + res->entries[idx].type = SEG_TYPE_DEFECTIVE; + break; + default: + continue; + } + idx++; } res->entry_count = idx; -- cgit v1.2.3-freya