diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:36:51 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:37:54 -0400 |
commit | 472ec944d2ed81d0304cc6cac80946a6a44776be (patch) | |
tree | f6cae641c143a0b45bb289d9d9fc6145706025b0 /kernel/mboot/mmap.c | |
parent | set mmap limit (diff) | |
download | comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.gz comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.bz2 comus-472ec944d2ed81d0304cc6cac80946a6a44776be.zip |
UEFI and republicans
Diffstat (limited to 'kernel/mboot/mmap.c')
-rw-r--r-- | kernel/mboot/mmap.c | 30 |
1 files changed, 27 insertions, 3 deletions
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; |