X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/98fd6cb58b5bbc55cd9ceb45bd27b45a3b222df7..04ee277abd77fc51c5ab02ee58790a859607ea24:/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 395cfe2..0d7c815 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -6,42 +6,48 @@ #ifndef __ASM__ #include -struct exec_param +struct exec_param; + +struct regcontext { - unsigned int vector; - unsigned int err_code; - unsigned int eip; - unsigned int cs; - unsigned int eflags; - unsigned int esp; - unsigned int ss; + 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 { - 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; - } __attribute__((packed)) registers; - + unsigned int depth; + struct regcontext registers; union { reg32 esp; - struct exec_param* execp; + volatile struct exec_param* execp; }; } __attribute__((packed)) isr_param; +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);