diff options
Diffstat (limited to 'src/arch/amd64/mboot.c')
-rw-r--r-- | src/arch/amd64/mboot.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/arch/amd64/mboot.c b/src/arch/amd64/mboot.c index f39dd79..315747e 100644 --- a/src/arch/amd64/mboot.c +++ b/src/arch/amd64/mboot.c @@ -133,19 +133,43 @@ static void read_cmdline( shim_info->cmdline[size] = '\0'; } +static const char *segment_type[] = { + "Reserved", + "Free", + "Reserved", + "ACPI Reserved", + "Hibernation", + "Defective", + "Unknown" +}; + static void read_memory_map( struct boot_info *shim_info, struct mboot_tag_mmap *map ) { int idx = 0; uintptr_t i = (uintptr_t)map->entries; + kprintf("MEMORY MAP\n"); + char buf[20]; for ( ; i < (uintptr_t)map->entries + map->size; i += map->entry_size, idx++ ) { struct mboot_mmap_entry *seg = (struct mboot_mmap_entry *) i; + const char *type = NULL; + if (seg->type > 4) + type = segment_type[6]; + else + type = segment_type[seg->type]; + kprintf("ADDR: 0x%16p LEN: %4s TYPE: %s (%d)\n", + (void *)seg->addr, + btoa(seg->len, buf), + type, + seg->type + ); + if (seg->type != 1 || seg->len < 1) + continue; shim_info->map.entries[idx].addr = seg->addr; - shim_info->map.entries[idx].type = seg->type; shim_info->map.entries[idx].len = seg->len; } shim_info->map.entry_count = idx; |