:: commit 2f4311b2c04dc2f5f768002635126dd3b6ca7f4b

mintsuki <mintsuki@protonmail.com> — 2020-01-25 01:11

parents: cddacc280a

Disable interrupts before jumping to kernel

diff --git a/src/main.c b/src/main.c
index a8fd145e..c857e0c1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -71,7 +71,8 @@ void main(int boot_drive) {
 
     // Boot the kernel.
     asm volatile (
-        "jmp 0x100000"
+        "cli\n\t"
+        "jmp 0x100000\n\t"
         :
         : "b" (cmdline)
         : "memory"
diff --git a/src/sys/interrupt.c b/src/sys/interrupt.c
index b71f375f..15328a4b 100644
--- a/src/sys/interrupt.c
+++ b/src/sys/interrupt.c
@@ -22,6 +22,19 @@ uint8_t rm_pic1_mask = 0xff;
 uint8_t pm_pic0_mask = 0xff;
 uint8_t pm_pic1_mask = 0xff;
 
+struct idt_entry_t {
+    uint16_t offset_lo;
+    uint16_t selector;
+    uint8_t unused;
+    uint8_t type_attr;
+    uint16_t offset_hi;
+} __attribute__((packed));
+
+struct idt_ptr_t {
+    uint16_t size;
+    uint32_t address;
+} __attribute__((packed));
+
 #define IDT_MAX_ENTRIES 16
 
 static struct idt_entry_t idt[IDT_MAX_ENTRIES];
diff --git a/src/sys/interrupt.h b/src/sys/interrupt.h
index d03b5cdb..87966708 100644
--- a/src/sys/interrupt.h
+++ b/src/sys/interrupt.h
@@ -11,19 +11,6 @@ extern uint8_t rm_pic1_mask;
 extern uint8_t pm_pic0_mask;
 extern uint8_t pm_pic1_mask;
 
-struct idt_entry_t {
-    uint16_t offset_lo;
-    uint16_t selector;
-    uint8_t unused;
-    uint8_t type_attr;
-    uint16_t offset_hi;
-} __attribute__((packed));
-
-struct idt_ptr_t {
-    uint16_t size;
-    uint32_t address;
-} __attribute__((packed));
-
 void init_idt(void);
 void register_interrupt_handler(size_t, void *, uint8_t);
 
tab: 248 wrap: offon