X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/80890b99fec2630ef0a1a0805d894c3d86c16506..946c3fdd31300074cc78841795bd47af908ddddb:/lunaix-os/includes/arch/x86/interrupts.h?ds=sidebyside diff --git a/lunaix-os/includes/arch/x86/interrupts.h b/lunaix-os/includes/arch/x86/interrupts.h index 2c93c39..0d7c815 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -1,162 +1,52 @@ #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 - -// 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 - -// Keyboard -#define PC_KBD_IV 204 - -#define RTC_TIMER_IV 210 - - -#define PC_AT_IRQ_RTC 8 -#define PC_AT_IRQ_KBD 1 +#include "vectors.h" #ifndef __ASM__ #include -typedef struct { - gp_regs registers; - unsigned int vector; - unsigned int err_code; - unsigned int eip; - unsigned int cs; - unsigned int eflags; - unsigned int esp; - 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 -_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_isr204(); - -void -_asm_isr210(); - -#pragma endregion - -void -intr_subscribe(const uint8_t vector, int_subscriber); - -void -intr_unsubscribe(const uint8_t vector, int_subscriber); +struct exec_param; + +struct regcontext +{ + reg32 eax; + reg32 ebx; + reg32 ecx; + reg32 edx; + reg32 edi; + reg32 ebp; + reg32 esi; + reg32 ds; + reg32 es; + reg32 fs; + reg32 gs; +} __attribute__((packed)); + +typedef struct +{ + unsigned int depth; + struct regcontext registers; + union + { + reg32 esp; + volatile struct exec_param* execp; + }; +} __attribute__((packed)) isr_param; -void -intr_set_fallback_handler(int_subscriber); +struct exec_param +{ + isr_param* saved_prev_ctx; + u32_t vector; + u32_t err_code; + u32_t eip; + u32_t cs; + u32_t eflags; + u32_t esp; + u32_t ss; +} __attribute__((packed)); + +#define ISR_PARAM_SIZE sizeof(isr_param) void intr_handler(isr_param* param);