X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9406e904ddad5db2ba2dd550e21bbb224899fd79..287a5f7ae6a3bec3d679a5de394e915b56c7367d:/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 6265720..4ffc86f 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -1,30 +1,50 @@ #ifndef __LUNAIX_INTERRUPTS_H #define __LUNAIX_INTERRUPTS_H -#define FAULT_DIVISION_ERROR 0x0 -#define FAULT_TRAP_DEBUG_EXCEPTION 0x1 -#define INT_NMI 0x2 -#define TRAP_BREAKPOINT 0x3 -#define TRAP_OVERFLOW 0x4 -#define FAULT_BOUND_EXCEED 0x5 -#define FAULT_INVALID_OPCODE 0x6 -#define FAULT_NO_MATH_PROCESSOR 0x7 -#define ABORT_DOUBLE_FAULT 0x8 -#define FAULT_RESERVED_0 0x9 -#define FAULT_INVALID_TSS 0xa -#define FAULT_SEG_NOT_PRESENT 0xb -#define FAULT_STACK_SEG_FAULT 0xc -#define FAULT_GENERAL_PROTECTION 0xd -#define FAULT_PAGE_FAULT 0xe -#define FAULT_RESERVED_1 0xf -#define FAULT_X87_FAULT 0x10 -#define FAULT_ALIGNMENT_CHECK 0x11 -#define ABORT_MACHINE_CHECK 0x12 -#define FAULT_SIMD_FP_EXCEPTION 0x13 -#define FAULT_VIRTUALIZATION_EXCEPTION 0x14 -#define FAULT_CONTROL_PROTECTION 0x15 +#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 + +// LunaixOS related +#define LUNAIX_SYS_PANIC 32 + +#define EX_INTERRUPT_BEGIN 200 +// APIC related +#define APIC_ERROR_IV 200 +#define APIC_LINT0_IV 201 +#define APIC_TIMER_IV 202 +#define APIC_SPIV_IV 203 + +#define RTC_TIMER_IV 210 + + +#define PC_AT_IRQ_RTC 8 +#define PC_AT_IRQ_KBD_BUF_FULL 1 + +#ifndef __ASM__ +#include typedef struct { + gp_regs registers; unsigned int vector; unsigned int err_code; unsigned int eip; @@ -34,13 +54,110 @@ typedef struct { unsigned int ss; } __attribute__((packed)) isr_param; +typedef void (*int_subscriber)(isr_param*); + +#pragma region ISR_DECLARATION void _asm_isr0(); +void +_asm_isr1(); + +void +_asm_isr2(); + +void +_asm_isr3(); + +void +_asm_isr4(); + +void +_asm_isr5(); + +void +_asm_isr6(); + +void +_asm_isr7(); + +void +_asm_isr8(); + +void +_asm_isr9(); + +void +_asm_isr10(); + +void +_asm_isr11(); + +void +_asm_isr12(); + void _asm_isr13(); void -interrupt_handler(isr_param* param); +_asm_isr14(); + +void +_asm_isr15(); + +void +_asm_isr16(); + +void +_asm_isr17(); + +void +_asm_isr18(); + +void +_asm_isr19(); + +void +_asm_isr20(); + +void +_asm_isr21(); + +void +_asm_isr32(); + +void +_asm_isr200(); + +void +_asm_isr201(); + +void +_asm_isr202(); + +void +_asm_isr203(); + +void +_asm_isr210(); + +#pragma endregion + +void +intr_subscribe(const uint8_t vector, int_subscriber); + +void +intr_unsubscribe(const uint8_t vector, int_subscriber); + +void +intr_set_fallback_handler(int_subscriber); + +void +intr_handler(isr_param* param); + +void +intr_routine_init(); + +#endif #endif /* __LUNAIX_INTERRUPTS_H */