X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cd09c4b222e4ddf45a42522563ae2471a829d1c8..ddb4e08c76afcae5e40e0bcb418683dfb2a22aa8:/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..70e7149 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -1,19 +1,53 @@ #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)(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); + void -_asm_isr0(); +intr_handler(isr_param* param); void -interrupt_handler(isr_param* param); +intr_routine_init(); +#endif #endif /* __LUNAIX_INTERRUPTS_H */