#ifndef _SYS_INTERRUPT_H_ #define _SYS_INTERRUPT_H_ #include struct interrupt_context { /* pushed on the stack, before the handler is called */ uint64_t kerrno; uint64_t cr2; uint64_t rdi; uint64_t rsi; uint64_t rbp; uint64_t not_rsp; uint64_t rbx; uint64_t rdx; uint64_t rcx; uint64_t rax; uint64_t r8; uint64_t r9; uint64_t r10; uint64_t r11; uint64_t r12; uint64_t r13; uint64_t r14; uint64_t r15; /* assembly interrupt trampoline handles these */ uint64_t int_no; uint64_t err_code; /* following pushed onto stack by CPU */ uint64_t rip; uint64_t cs; uint64_t rflags; uint64_t rsp; uint64_t ss; }; struct interrupt_handler { void (*handler)(struct interrupt_context *, void *); void *context; struct interrupt_handler *next; struct interrupt_handler *prev; }; void interrupt_handler_null(); void isr128(); void isr129(); void isr0(); void isr1(); void isr2(); void isr3(); void isr4(); void isr5(); void isr6(); void isr7(); void isr8(); void isr9(); void isr10(); void isr11(); void isr12(); void isr13(); void isr14(); void isr15(); void isr16(); void isr17(); void isr18(); void isr19(); void isr20(); void isr21(); void isr22(); void isr23(); void isr24(); void isr25(); void isr26(); void isr27(); void isr28(); void isr29(); void isr30(); void isr31(); void isr128(); void isr130(); void isr131(); void irq0(); void irq1(); void irq2(); void irq3(); void irq4(); void irq5(); void irq6(); void irq7(); void irq8(); void irq9(); void irq10(); void irq11(); void irq12(); void irq13(); void irq14(); void irq15(); #define IRQ0 32 #define IRQ1 33 #define IRQ2 34 #define IRQ3 35 #define IRQ4 36 #define IRQ5 37 #define IRQ6 38 #define IRQ7 39 #define IRQ8 40 #define IRQ9 41 #define IRQ10 42 #define IRQ11 43 #define IRQ12 44 #define IRQ13 45 #define IRQ14 46 #define IRQ15 47 void init_interrupts(); int interrupts_enabled(); void enable_interrupts(); void disable_interrupts(); int interrupts_set(int enable); void interrupt_add_handler(unsigned int intno, struct interrupt_handler *handler); void interrupt_remove_handler(unsigned int intno, struct interrupt_handler *handler); #endif