From 958e2dae042ca9e28f23e509d541730f30fa8502 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Thu, 8 Apr 2021 13:07:17 +0200 Subject: Switch to multiboot2 and improve interrupt management --- src/utils/multiboot.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/utils/multiboot.c (limited to 'src/utils/multiboot.c') diff --git a/src/utils/multiboot.c b/src/utils/multiboot.c new file mode 100644 index 0000000..891bd57 --- /dev/null +++ b/src/utils/multiboot.c @@ -0,0 +1,39 @@ +#include "multiboot.h" + +extern u8* MB_INFO; + +char mb_load_tag(char **data, char type){ + char *c_info_size=MB_INFO; + char *c_tag_type=c_info_size+8; + char *c_tag_size=c_info_size+12; + + for(int i=0;i<10;i++){ + int tag_type=*((int*)c_tag_type); + int tag_size=*((int*)c_tag_size); + if(tag_type==type){ + *data=c_tag_type; + return 0; + } + + c_tag_type=c_tag_type+tag_size+4; + // Skip padding for 64 bits + int p=c_tag_type; + while((p & 0x7) != 0) + p++; + // Assign address after padding + c_tag_type=p; + c_tag_size=c_tag_type+4; + + } + return 1; +} +char mb_load_bl_name(MBI_TAG_BL_NAME *data){ + char *to_load; + if(!mb_load_tag(&to_load,2)){ + memcpy(to_load,data,8); + to_load+=8; + data->name=to_load; + return 0; + } + return 1; +} -- cgit v1.2.3