diff options
Diffstat (limited to 'include/arch/i686/isr.h')
| -rw-r--r-- | include/arch/i686/isr.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/include/arch/i686/isr.h b/include/arch/i686/isr.h new file mode 100644 index 0000000..4cc7f1b --- /dev/null +++ b/include/arch/i686/isr.h @@ -0,0 +1,51 @@ +#include <stdint.h> + +/* these are all implemented in isr-as.S */ +extern void _isr0(void); +extern void _isr1(void); +extern void _isr2(void); +extern void _isr3(void); +extern void _isr4(void); +extern void _isr5(void); +extern void _isr6(void); +extern void _isr7(void); +extern void _isr8(void); +extern void _isr9(void); +extern void _isr10(void); +extern void _isr11(void); +extern void _isr12(void); +extern void _isr13(void); +extern void _isr14(void); +extern void _isr15(void); +extern void _isr16(void); +extern void _isr17(void); +extern void _isr18(void); +extern void _isr19(void); +extern void _isr20(void); +extern void _isr21(void); +extern void _isr22(void); +extern void _isr23(void); +extern void _isr24(void); +extern void _isr25(void); +extern void _isr26(void); +extern void _isr27(void); +extern void _isr28(void); +extern void _isr29(void); +extern void _isr30(void); +extern void _isr31(void); + +/* installs ISR's 0-31 */ +void isr_init(void); + +/* This defines what the stack looks like after an ISR was running */ +struct regs_t { + uint32_t gs, fs, es, ds; /* pushed the segs last */ + uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; /* pushed by 'pusha' */ + uint32_t int_no; /* interrupt stubs do this */ + uint32_t err_code; /* exceptions push this */ + uint32_t eip, cs, eflags, useresp, ss; /* pushed by the processor automatically */ +} __attribute__((packed)); + +#define IRQ(x) (32+x) + +void set_interrupt_handler(uint8_t interrupt, void (*func)(struct regs_t*)); |