#ifndef IRQ_H #define IRQ_H #define PIC1 0x20 #define PIC2 0xA0 #define PIC1_COMMAND (PIC1) #define PIC2_COMMAND (PIC2) #define PIC1_DATA (PIC1 + 1) #define PIC2_DATA (PIC2 + 1) #define PIC_EOI 0x20 #define ACK_MASTER_IRQ outportb(PIC1, PIC_EOI); #define ACK_SLAVE_IRQ outportb(PIC1, PIC_EOI); outportb(PIC2, PIC_EOI); typedef void (*isr_t); struct idt_entry { unsigned short base_low; unsigned short selector; unsigned char zero; unsigned char flags; unsigned short base_high; } __attribute((__packed__)); struct idt_descriptor { unsigned short limit; unsigned int base; } __attribute((__packed__)); void init_irq(); void sti(); void cli(); #endif /* IRQ_H */