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);
