2022-01-13 14:01:51 +00:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2022-05-24 23:01:51 +00:00
|
|
|
#include <kernaux/assert.h>
|
2022-12-09 02:59:54 +00:00
|
|
|
#include <kernaux/generic/display.h>
|
2022-12-10 20:15:58 +00:00
|
|
|
#include <kernaux/macro.h>
|
2022-01-13 14:01:51 +00:00
|
|
|
#include <kernaux/multiboot2.h>
|
|
|
|
|
|
|
|
#include <stddef.h>
|
2022-01-13 14:18:18 +00:00
|
|
|
#include <stdint.h>
|
2022-01-13 14:01:51 +00:00
|
|
|
|
2022-12-09 02:59:54 +00:00
|
|
|
#define PRINTLN(s) KernAux_Display_println(display, s)
|
|
|
|
#define PRINTLNF(format, ...) \
|
|
|
|
KernAux_Display_printlnf(display, format, __VA_ARGS__)
|
|
|
|
|
2022-01-13 14:01:51 +00:00
|
|
|
void KernAux_Multiboot2_Header_print(
|
|
|
|
const struct KernAux_Multiboot2_Header *const multiboot2_header,
|
2022-12-09 02:59:54 +00:00
|
|
|
const KernAux_Display display
|
2022-01-13 14:01:51 +00:00
|
|
|
) {
|
2022-06-13 16:28:00 +00:00
|
|
|
KERNAUX_ASSERT(multiboot2_header);
|
2022-12-09 02:59:54 +00:00
|
|
|
KERNAUX_ASSERT(display);
|
2022-05-24 23:01:51 +00:00
|
|
|
|
2022-12-10 20:15:58 +00:00
|
|
|
KERNAUX_CAST_CONST(unsigned long, magic, multiboot2_header->magic);
|
|
|
|
KERNAUX_CAST_CONST(unsigned long, total_size, multiboot2_header->total_size);
|
|
|
|
KERNAUX_CAST_CONST(unsigned long, checksum, multiboot2_header->checksum);
|
|
|
|
|
2022-12-09 02:59:54 +00:00
|
|
|
PRINTLN("Multiboot 2 header");
|
2022-12-10 20:15:58 +00:00
|
|
|
PRINTLNF(" magic: %lu", magic);
|
2022-12-09 02:59:54 +00:00
|
|
|
PRINTLNF(" arch: %u (%s)",
|
2022-01-14 06:20:16 +00:00
|
|
|
multiboot2_header->arch,
|
|
|
|
KernAux_Multiboot2_Header_Arch_to_str(multiboot2_header->arch)
|
|
|
|
);
|
2022-12-10 20:15:58 +00:00
|
|
|
PRINTLNF(" size: %lu", total_size);
|
|
|
|
PRINTLNF(" checksum: %lu", checksum);
|
2022-01-13 14:01:51 +00:00
|
|
|
|
2022-01-13 14:18:18 +00:00
|
|
|
const struct KernAux_Multiboot2_HTagBase *tag_base =
|
|
|
|
(struct KernAux_Multiboot2_HTagBase*)
|
|
|
|
KERNAUX_MULTIBOOT2_DATA(multiboot2_header);
|
|
|
|
|
|
|
|
while (tag_base <
|
|
|
|
(struct KernAux_Multiboot2_HTagBase*)
|
|
|
|
((uint8_t*)multiboot2_header + multiboot2_header->total_size))
|
|
|
|
{
|
|
|
|
if (!KernAux_Multiboot2_HTagBase_is_valid(tag_base)) return;
|
|
|
|
|
2022-12-09 02:59:54 +00:00
|
|
|
KernAux_Multiboot2_HTagBase_print(tag_base, display);
|
2022-01-13 14:18:18 +00:00
|
|
|
|
|
|
|
tag_base = KERNAUX_MULTIBOOT2_HTAG_NEXT(tag_base);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KernAux_Multiboot2_HTagBase_print(
|
|
|
|
const struct KernAux_Multiboot2_HTagBase *const tag_base,
|
2022-12-09 02:59:54 +00:00
|
|
|
const KernAux_Display display
|
2022-01-13 14:18:18 +00:00
|
|
|
) {
|
2022-06-13 16:28:00 +00:00
|
|
|
KERNAUX_ASSERT(tag_base);
|
2022-12-09 02:59:54 +00:00
|
|
|
KERNAUX_ASSERT(display);
|
2022-05-24 23:01:51 +00:00
|
|
|
|
2022-01-13 14:18:18 +00:00
|
|
|
if (!KernAux_Multiboot2_HTagBase_is_valid(tag_base)) return;
|
|
|
|
|
2022-12-10 20:15:58 +00:00
|
|
|
KERNAUX_CAST_CONST(unsigned long, flags, tag_base->flags);
|
|
|
|
KERNAUX_CAST_CONST(unsigned long, size, tag_base->size);
|
2022-01-13 14:22:07 +00:00
|
|
|
|
2022-12-10 20:15:58 +00:00
|
|
|
PRINTLN("Multiboot 2 header tag");
|
2022-12-09 02:59:54 +00:00
|
|
|
PRINTLNF(" type: %u (%s)",
|
2022-01-13 14:22:07 +00:00
|
|
|
tag_base->type,
|
|
|
|
KernAux_Multiboot2_HTag_to_str(tag_base->type)
|
|
|
|
);
|
2022-12-10 20:15:58 +00:00
|
|
|
PRINTLNF(" flags: %lu", flags);
|
|
|
|
PRINTLNF(" size: %lu", size);
|
2022-01-13 14:22:07 +00:00
|
|
|
|
|
|
|
switch (tag_base->type) {
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_NONE:
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_INFO_REQ:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_ADDR:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_ENTRY_ADDR:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_FLAGS:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_FRAMEBUFFER:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_MODULE_ALIGN:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_EFI_BOOT_SERVICES:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_EFI_I386_ENTRY_ADDR:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_EFI_AMD64_ENTRY_ADDR:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KERNAUX_MULTIBOOT2_HTAG_RELOCATABLE_HEADER:
|
|
|
|
{
|
|
|
|
// TODO: print
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2022-01-13 14:01:51 +00:00
|
|
|
}
|