X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7b0dccbab69e806a63c4504c3ddb82e45241985b..af8e873ae38b72a56a89485c62bb5ccd22a9f8a7:/lunaix-os/includes/arch/x86/interrupts.h diff --git a/lunaix-os/includes/arch/x86/interrupts.h b/lunaix-os/includes/arch/x86/interrupts.h index 3ac415a..3643a9e 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -1,36 +1,28 @@ #ifndef __LUNAIX_INTERRUPTS_H #define __LUNAIX_INTERRUPTS_H - -#define FAULT_DIVISION_ERROR 0 -#define FAULT_TRAP_DEBUG_EXCEPTION 1 -#define INT_NMI 2 -#define TRAP_BREAKPOINT 3 -#define TRAP_OVERFLOW 4 -#define FAULT_BOUND_EXCEED 5 -#define FAULT_INVALID_OPCODE 6 -#define FAULT_NO_MATH_PROCESSOR 7 -#define ABORT_DOUBLE_FAULT 8 -#define FAULT_RESERVED_0 9 -#define FAULT_INVALID_TSS 10 -#define FAULT_SEG_NOT_PRESENT 11 -#define FAULT_STACK_SEG_FAULT 12 -#define FAULT_GENERAL_PROTECTION 13 -#define FAULT_PAGE_FAULT 14 -#define FAULT_RESERVED_1 15 -#define FAULT_X87_FAULT 16 -#define FAULT_ALIGNMENT_CHECK 17 -#define ABORT_MACHINE_CHECK 18 -#define FAULT_SIMD_FP_EXCEPTION 19 -#define FAULT_VIRTUALIZATION_EXCEPTION 20 -#define FAULT_CONTROL_PROTECTION 21 - -#define LUNAIX_SYS_PANIC 32 +#include "vectors.h" #ifndef __ASM__ #include -typedef struct { - gp_regs registers; +typedef struct +{ + struct + { + reg32 eax; + reg32 ebx; + reg32 ecx; + reg32 edx; + reg32 edi; + reg32 ebp; + reg32 esi; + reg32 ds; + reg32 es; + reg32 fs; + reg32 gs; + reg32 esp; + } registers; + unsigned int vector; unsigned int err_code; unsigned int eip; @@ -40,78 +32,65 @@ typedef struct { unsigned int ss; } __attribute__((packed)) isr_param; -void -_asm_isr0(); +typedef void (*int_subscriber)(const isr_param*); -void -_asm_isr1(); +#pragma region ISR_DECLARATION -void -_asm_isr2(); +#define ISR(iv) void _asm_isr##iv(); -void -_asm_isr3(); +ISR(0) +ISR(1) +ISR(2) +ISR(3) +ISR(4) +ISR(5) +ISR(6) +ISR(7) +ISR(8) +ISR(9) +ISR(10) +ISR(11) +ISR(12) +ISR(13) +ISR(14) +ISR(15) +ISR(16) +ISR(17) +ISR(18) +ISR(19) +ISR(20) +ISR(21) -void -_asm_isr4(); +ISR(32) +ISR(33) +ISR(34) -void -_asm_isr5(); +ISR(201) +ISR(202) -void -_asm_isr6(); +ISR(210) -void -_asm_isr7(); - -void -_asm_isr8(); - -void -_asm_isr9(); - -void -_asm_isr10(); +ISR(250) +ISR(251) +ISR(252) +ISR(253) +ISR(254) -void -_asm_isr11(); - -void -_asm_isr12(); - -void -_asm_isr13(); - -void -_asm_isr14(); - -void -_asm_isr15(); - -void -_asm_isr16(); - -void -_asm_isr17(); - -void -_asm_isr18(); - -void -_asm_isr19(); +#pragma endregion void -_asm_isr20(); +intr_subscribe(const uint8_t vector, int_subscriber); void -_asm_isr21(); +intr_unsubscribe(const uint8_t vector, int_subscriber); +void intr_set_fallback_handler(int_subscriber); void -_asm_isr32(); +intr_handler(isr_param* param); void -interrupt_handler(isr_param* param); +intr_routine_init(); #endif