X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cd09c4b222e4ddf45a42522563ae2471a829d1c8..e8e64a4f1d76aaeac3defa13243505cccd25c078:/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 fb4eb79..862ef05 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -1,19 +1,96 @@ #ifndef __LUNAIX_INTERRUPTS_H #define __LUNAIX_INTERRUPTS_H -typedef struct { +#include "vectors.h" + +#ifndef __ASM__ +#include +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; 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 + +#define ISR(iv) void _asm_isr##iv(); + +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) + +ISR(32) +ISR(33) + +ISR(201) +ISR(202) + +ISR(210) + +ISR(250) +ISR(251) +ISR(252) +ISR(253) +ISR(254) + +#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 -_asm_isr0(); +intr_handler(isr_param* param); void -interrupt_handler(isr_param* param); +intr_routine_init(); +#endif #endif /* __LUNAIX_INTERRUPTS_H */