X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/de334342a8a134a7c5b15e175d1c2ff87e6dbb2a..2bcb7a074fa1b63e5954092bdcb8752915d3e9e6:/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 70e7149..6d3c4b1 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -5,8 +5,12 @@ #ifndef __ASM__ #include + +struct exec_param; + typedef struct { + unsigned int depth; struct { reg32 eax; @@ -20,27 +24,28 @@ typedef struct reg32 es; reg32 fs; reg32 gs; + } __attribute__((packed)) registers; + + union + { 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; + volatile struct exec_param* execp; + }; } __attribute__((packed)) isr_param; -typedef void (*int_subscriber)(const isr_param*); - -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); +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);