k-chow/k/events/pic/pic.c
Julien CLEMENT cf020eae84 feat(keyboard): implement generic ring buffer and add getkey
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
2021-07-26 10:41:51 +02:00

56 lines
932 B
C

#include "events/idt.h"
#include "io.h"
#include "pic.h"
#include "stdio.h"
#include "keyboard.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();
init_keyboard();
asm volatile("sti");
}
void acknowledge(uint32_t int_vector)
{
uint8_t ocw2 = 0x20;
if (int_vector >= IDT_RESERVED_ENTRIES + 8)
outb(SLAVE_PIC_A, ocw2);
outb(MASTER_PIC_A, ocw2);
}