aboutsummaryrefslogtreecommitdiff
path: root/src/utils/multiboot.c
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-08 13:07:17 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-08 13:07:17 +0200
commit958e2dae042ca9e28f23e509d541730f30fa8502 (patch)
tree8911572335763866ed39cc7ec7855131929a0994 /src/utils/multiboot.c
parentdb553d05824ae463752c8b528feac963e41d9f1c (diff)
Switch to multiboot2 and improve interrupt management
Diffstat (limited to 'src/utils/multiboot.c')
-rw-r--r--src/utils/multiboot.c39
1 files changed, 39 insertions, 0 deletions
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;
+}