#ifndef INTERRUPTS_H #define INTERRUPTS_H #ifdef __cplusplus extern "C" { #endif void isr(u8_t int_num, int_stack_t * int_stack); extern void isr_0(); extern void isr_1(); extern void isr_2(); extern void isr_3(); extern void isr_4(); extern void isr_5(); extern void isr_6(); extern void isr_7(); extern void isr_8(); extern void isr_9(); extern void isr_10(); extern void isr_11(); extern void isr_12(); extern void isr_13(); extern void isr_14(); extern void isr_15(); extern void isr_16(); extern void isr_17(); extern void isr_18(); extern void isr_19(); extern void isr_20(); extern void isr_21(); extern void isr_22(); extern void isr_23(); extern void isr_24(); extern void isr_25(); extern void isr_26(); extern void isr_27(); extern void isr_28(); extern void isr_29(); extern void isr_30(); extern void isr_31(); extern void isr_32(); extern void isr_33(); extern void isr_34(); extern void isr_35(); extern void isr_36(); extern void isr_37(); extern void isr_38(); extern void isr_39(); extern void isr_40(); extern void isr_41(); extern void isr_42(); extern void isr_43(); extern void isr_44(); extern void isr_45(); extern void isr_46(); extern void isr_47(); extern void isr_48(); extern void isr_49(); #ifdef __cplusplus } #endif #define MAKE_IDT_DESCRIPTOR(selector, offset, dpl) \ (u64_t) ( ( (((u64_t) offset) & 0xFFFF0000ull) << 32 ) /* offset 31:16 */ \ | ( ( (u64_t) 0x1ull) << 47 ) /* present */ \ | ( (((u64_t) dpl) & 0x3) << 45 ) /* DPL */ \ | ( ( (u64_t) 0xEull) << 40 ) /* TODO: gate? */ \ | ( (((u64_t) selector) & 0xFFFFull) << 16 ) /* selector */ \ | ( (((u64_t) offset) & 0x0000FFFFull) ) ) /* offset 15:0 */ void interrupts_bootstrap(); #define interrupts_enable() __asm__ __volatile__ ("sti"); #define interrupts_disable() __asm__ __volatile__ ("cli"); #endif