diff --git a/kernel/src/arch/i386/entry-stivale2.c b/kernel/src/arch/i386/entry-stivale2.c index e480111..012f78d 100644 --- a/kernel/src/arch/i386/entry-stivale2.c +++ b/kernel/src/arch/i386/entry-stivale2.c @@ -25,6 +25,7 @@ struct stivale2_header header2 = { void stivale2_main(struct stivale2_struct *info) { parse_stivale2(info); + print_stivale2_memmap(info); char *argv[3] = {"stivale2", info->bootloader_brand, info->bootloader_version}; kmain(3, argv); diff --git a/kernel/src/arch/x86/stivale2-parse.c b/kernel/src/arch/x86/stivale2-parse.c index 27e575f..f796348 100644 --- a/kernel/src/arch/x86/stivale2-parse.c +++ b/kernel/src/arch/x86/stivale2-parse.c @@ -153,3 +153,22 @@ void parse_stivale2(struct stivale2_struct *info) { } putchar('\n'); } + +void print_stivale2_memmap(struct stivale2_struct *info) { + struct stivale2_tag *tag = (struct stivale2_tag*)(info->tags); + while(tag != 0) { + switch(tag->identifier) { + case STIVALE2_STRUCT_TAG_MEMMAP_ID: { + struct stivale2_struct_tag_memmap *m = (struct stivale2_struct_tag_memmap *)tag; + printf("Memmap (%d entries):\n", m->entries); + for (size_t i = 0; i < m->entries; i++) { + struct stivale2_mmap_entry me = m->memmap[i]; + printf("\t[%x+%h] %x\n", (size_t)me.base, (size_t)me.length, me.type); + } + break; + } + } + + tag = (struct stivale2_tag *)tag->next; + } +} diff --git a/kernel/src/arch/x86/stivale2-parse.h b/kernel/src/arch/x86/stivale2-parse.h index 9338fc4..edc4089 100644 --- a/kernel/src/arch/x86/stivale2-parse.h +++ b/kernel/src/arch/x86/stivale2-parse.h @@ -1,2 +1,3 @@ void print_stivale2(struct stivale2_struct *info); void parse_stivale2(struct stivale2_struct *info); +void print_stivale2_memmap(struct stivale2_struct *info); diff --git a/kernel/src/arch/x86_64/entry-stivale2.c b/kernel/src/arch/x86_64/entry-stivale2.c index e60f1eb..fc57f0c 100644 --- a/kernel/src/arch/x86_64/entry-stivale2.c +++ b/kernel/src/arch/x86_64/entry-stivale2.c @@ -26,6 +26,7 @@ struct stivale2_header header2 = { void stivale2_main(struct stivale2_struct *info) { parse_stivale2(info); + print_stivale2_memmap(info); char *argv[3] = {"stivale2", info->bootloader_brand, info->bootloader_version}; kmain(3, argv); diff --git a/kernel/src/print/print.c b/kernel/src/print/print.c index e7b97f5..fd5e482 100644 --- a/kernel/src/print/print.c +++ b/kernel/src/print/print.c @@ -59,7 +59,7 @@ static void printdec(size_t num) { static void printhuman(size_t num) { const char *unit = UNITS; - while(num >= 2048 && *(unit+1)) { + while(num >= 10240 && *(unit+1)) { num /= 1024; unit++; }