mirror of https://github.com/E-Almqvist/eOS
parent
da65e49c60
commit
26cc3ff8c3
@ -1,25 +1,38 @@ |
|||||||
#include "pic.h" |
#include "pic.h" |
||||||
#include "io.h" |
#include "io.h" |
||||||
|
|
||||||
void PIC_sendEOI(uint8 irq) { |
void pic_send_eoi(uint8 irq) { |
||||||
if( irq >= 8 )
|
if( irq >= 8 )
|
||||||
outb(PIC2_CMD, PIC_EOI); |
outb(PIC2_CMD, PIC_EOI); |
||||||
outb(PIC1_CMD, PIC_EOI); |
outb(PIC1_CMD, PIC_EOI); |
||||||
} |
} |
||||||
|
|
||||||
void PIC_remap(uint offset_1, uint offset_2) { |
void pic_remap(uint offset_1, uint offset_2) { |
||||||
uint8 a1, a2;
|
uint8 a1, a2;
|
||||||
a1 = inb(PIC1_DATA); |
a1 = inb(PIC1_DATA); |
||||||
a2 = inb(PIC2_DATA); |
a2 = inb(PIC2_DATA); |
||||||
|
|
||||||
// Start the init sequance
|
// Start the init sequance
|
||||||
outb_w( PIC1_CMD, ICW_INIT_MASK ); |
outb_w(PIC1_CMD, ICW_INIT_MASK); |
||||||
|
|
||||||
outb_w(PIC2_CMD, ICW_INIT_MASK ); |
outb_w(PIC2_CMD, ICW_INIT_MASK); |
||||||
|
|
||||||
outb_w(PIC1_DATA, offset_1); // ICW2 master offset
|
outb_w(PIC1_DATA, offset_1); // ICW2 master offset
|
||||||
outb_w(PIC2_DATA, offset_2); // ICW2 slave offset
|
outb_w(PIC2_DATA, offset_2); // ICW2 slave offset
|
||||||
|
|
||||||
outb_w(PIC1_DATA, 0x4);
|
outb_w(PIC1_DATA, 0x4);
|
||||||
outb_w(PIC2_DATA, 0x2); |
outb_w(PIC2_DATA, 0x2); |
||||||
|
|
||||||
|
outb_w(PIC1_DATA, ICW4_8086); |
||||||
|
outb_w(PIC2_DATA, ICW4_8086); |
||||||
|
|
||||||
|
// restore old masks
|
||||||
|
outb(PIC1_DATA, a1); |
||||||
|
outb(PIC2_DATA, a2); |
||||||
|
} |
||||||
|
|
||||||
|
// disable the PIC
|
||||||
|
void pic_disable() { |
||||||
|
outb(PIC1_DATA, 0xff); |
||||||
|
outb(PIC2_DATA, 0xff); |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue