mittos64/src/kernel/boot/multiboot.c
2018-03-20 14:11:21 +01:00

43 lines
946 B
C

#include <multiboot.h>
#include <memory.h>
#include <debug.h>
#define MBOOT_REPLY 0x36D76289
struct kernel_boot_data_st kernel_boot_data;
int parse_multiboot2(struct mboot2_taglist *tags)
{
struct mboot2_tag *tag = incptr(tags, sizeof(struct mboot2_taglist));
while(tag->type)
{
switch(tag->type)
{
case MBOOT2_BOOTLOADER:
kernel_boot_data.bootloader = (char *)tag->data;
break;
case MBOOT2_COMMANDLINE:
kernel_boot_data.commandline = (char *)tag->data;
break;
default:
debug_warning("Unknown multiboot tag type:%d \n", tag->type);
}
int padded_size = tag->size + ((tag->size % 8)?(8-(tag->size%8)):0);
tag = incptr(tag, padded_size);
}
return 0;
}
int parse_multiboot(uint64_t magic, void *mboot_info)
{
if(magic == MBOOT_REPLY)
{
kernel_boot_data.multiboot_version = 2;
parse_multiboot2(mboot_info);
}
else
return 1;
return 0;
}