diff --git a/lib/irq.c b/lib/irq.c new file mode 100644 index 0000000..6c78754 --- /dev/null +++ b/lib/irq.c @@ -0,0 +1,36 @@ +void setpic(void) +{ + /* MASTER */ + /* Initialisation de ICW1 */ + outbp(0x20,0x11); + /* Initialisation de ICW2 - vecteur de depart = 32 */ + outbp(0x21,0x20); + /* Initialisation de ICW3 */ + outbp(0x21,0x04); + /* Initialisation de ICW4 */ + outbp(0x21,0x01); + /* masquage des interruptions */ + outbp(0x21,0xFF); + /* SLAVE */ + /* Initialisation de ICW1 */ + outbp(0xA0,0x11); + /* Initialisation de ICW2 - vecteur de depart = 96 */ + outbp(0xA1,0x70); + /* Initialisation de ICW3 */ + outbp(0xA1,0x02); + /* Initialisation de ICW4 */ + outbp(0xA1,0x01); + /* masquage des interruptions */ + outbp(0xA1,0xFF); + /* Demasquage des irqs */ + outbp(0x21,0xFD); +} + +void makeidtdesc(u32 offset, u16 select, u16 type, idtdesc* desc) +{ + desc->offset0_15 = (offset & 0xffff); + desc->select = select; + desc->type = type; + desc->offset16_31 = (offset & 0xffff0000) >> 16; + return; +}