X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/09a115a4c07e26b3a978c693c0d6d17abea80479..98fd6cb58b5bbc55cd9ceb45bd27b45a3b222df7:/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 862ef05..395cfe2 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -5,6 +5,18 @@ #ifndef __ASM__ #include + +struct exec_param +{ + unsigned int vector; + unsigned int err_code; + unsigned int eip; + unsigned int cs; + unsigned int eflags; + unsigned int esp; + unsigned int ss; +} __attribute__((packed)); + typedef struct { struct @@ -20,71 +32,16 @@ typedef struct reg32 es; reg32 fs; reg32 gs; - reg32 esp; - } registers; + // reg32 esp; + } __attribute__((packed)) registers; - unsigned int vector; - unsigned int err_code; - unsigned int eip; - unsigned int cs; - unsigned int eflags; - unsigned int esp; - unsigned int ss; + union + { + reg32 esp; + struct exec_param* execp; + }; } __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 intr_handler(isr_param* param);