#ifndef _JOVE_x86_64_IDT_H #define _JOVE_x86_64_IDT_H 1 #include "processor.h" typedef struct jove_IVTState { uint64_t r15, r14, r13, r12, r11, r10, r9, r8; uint64_t rbp, rdi, rsi, rdx, rcx, rbx, rax; uint64_t num, err; uint64_t rip, cs, rflags, rsp, ss; } ivt_state_t; enum { EXCEPTION_DIVISION = 0, EXCEPTION_DEBUG, EXCEPTION_NMI, EXCEPTION_BREAKPOINT, EXCEPTION_OVERFLOW, EXCEPTION_BRE, EXCEPTION_INVLOP, EXCEPTION_DEVNA, EXCEPTION_DOUBLE, EXCEPTION_CSO, EXCEPTION_INVALID_TSS, EXCEPTION_SEG_MISSING, EXCEPTION_SS, EXCEPTION_GPF, EXCEPTION_PF }; typedef void (*kernel_isr_handler_t)(ivt_state_t*); extern kernel_isr_handler_t kernel_isr_handles[256]; void kpanic_state(ivt_state_t *state, const char *fmt, ...); void ivt_setup(void); void idt_setup(processor_t *processor); #endif