45 lines
684 B
C
45 lines
684 B
C
#include "idt.h"
|
|
#include "io.h"
|
|
#include "pic.h"
|
|
|
|
static void send_icw1(void)
|
|
{
|
|
outb(MASTER_PIC_A, ICW1);
|
|
outb(SLAVE_PIC_A, ICW1);
|
|
}
|
|
|
|
static void send_icw2(void)
|
|
{
|
|
outb(MASTER_PIC_B, IDT_RESERVED_ENTRIES);
|
|
outb(SLAVE_PIC_B, IDT_RESERVED_ENTRIES + 8);
|
|
}
|
|
|
|
static void send_icw3(void)
|
|
{
|
|
outb(MASTER_PIC_B, 0x4);
|
|
outb(SLAVE_PIC_B, 0x2);
|
|
}
|
|
|
|
|
|
static void send_icw4(void)
|
|
{
|
|
outb(MASTER_PIC_B, 0x1);
|
|
outb(SLAVE_PIC_B, 0x1);
|
|
}
|
|
|
|
static void mask_irqs(void)
|
|
{
|
|
outb(MASTER_PIC_B, 0xff ^ 0x2);
|
|
outb(SLAVE_PIC_B, 0xff);
|
|
}
|
|
|
|
void init_pic(void)
|
|
{
|
|
send_icw1();
|
|
send_icw2();
|
|
send_icw3();
|
|
send_icw4();
|
|
mask_irqs();
|
|
asm volatile("sti");
|
|
}
|