Print Multiboot 2 memory map tag

This commit is contained in:
Alex Kotov 2020-11-29 04:24:14 +05:00
parent 36dbe4b8a9
commit 5d2f20f6b3
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
2 changed files with 73 additions and 3 deletions

View File

@ -4,6 +4,12 @@ static const char *KernAux_Multiboot2_TagType_to_str(
enum KernAux_Multiboot2_TagType tag_type
);
static void KernAux_Multiboot2_Tag_MemoryMap_print(
const struct KernAux_Multiboot2_Tag_MemoryMap *tag,
void (*print)(const char *format, ...)
)
__attribute__((nonnull));
const char *KernAux_Multiboot2_TagType_to_str(
enum KernAux_Multiboot2_TagType tag_type
) {
@ -148,9 +154,10 @@ void KernAux_Multiboot2_TagBase_print(
}
break;
case KERNAUX_MULTIBOOT2_TAGTYPE_MEMORY_MAP:
{
// TODO: print
}
KernAux_Multiboot2_Tag_MemoryMap_print(
(struct KernAux_Multiboot2_Tag_MemoryMap*)tag_base,
print
);
break;
case KERNAUX_MULTIBOOT2_TAGTYPE_VBE_INFO:
{
@ -254,3 +261,33 @@ void KernAux_Multiboot2_TagBase_print(
break;
}
}
void KernAux_Multiboot2_Tag_MemoryMap_print(
const struct KernAux_Multiboot2_Tag_MemoryMap *const tag,
void (*print)(const char *format, ...)
) {
if (!KernAux_Multiboot2_Tag_MemoryMap_is_valid(tag)) {
print(" invalid!\n");
return;
}
print(" entry size: %u\n", tag->entry_size);
print(" entry version: %u\n", tag->entry_version);
print(" entries:\n");
const struct KernAux_Multiboot2_Tag_MemoryMap_EntryBase *const entries =
(struct KernAux_Multiboot2_Tag_MemoryMap_EntryBase*)tag->data;
for (
unsigned int index = 0;
index < (tag->base.size - sizeof(*tag)) / tag->entry_size;
++index
) {
print(" entry %u\n", index);
print(" base addr: %llu\n", entries[index].base_addr);
print(" length: %llu\n", entries[index].length);
print(" type: %u\n", entries[index].type);
print(" reserved1: %u\n", entries[index].reserved1);
}
}

View File

@ -46,6 +46,39 @@ static const char output[] =
"Multiboot 2 tag\n"
" type: 6 (memory map)\n"
" size: 160\n"
" entry size: 24\n"
" entry version: 0\n"
" entries:\n"
" entry 0\n"
" base addr: 0\n"
" length: 654336\n"
" type: 1\n"
" reserved1: 0\n"
" entry 1\n"
" base addr: 654336\n"
" length: 1024\n"
" type: 2\n"
" reserved1: 0\n"
" entry 2\n"
" base addr: 983040\n"
" length: 65536\n"
" type: 2\n"
" reserved1: 0\n"
" entry 3\n"
" base addr: 1048576\n"
" length: 133038080\n"
" type: 1\n"
" reserved1: 0\n"
" entry 4\n"
" base addr: 134086656\n"
" length: 131072\n"
" type: 2\n"
" reserved1: 0\n"
" entry 5\n"
" base addr: 4294705152\n"
" length: 262144\n"
" type: 2\n"
" reserved1: 0\n"
"Multiboot 2 tag\n"
" type: 9 (ELF symbols)\n"
" size: 420\n"