From 0ad50c878838640ce53c202ab028d7b2c5810fe6 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Tue, 28 Sep 2021 09:04:01 -0500 Subject: arch: i386: add support for 8259 PIC Add support for the 8259 programmable interrupt controller. Signed-off-by: Danny Holman --- arch/i386/include/kernel/pic.h | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 arch/i386/include/kernel/pic.h (limited to 'arch/i386/include') diff --git a/arch/i386/include/kernel/pic.h b/arch/i386/include/kernel/pic.h new file mode 100644 index 0000000..c3ede4f --- /dev/null +++ b/arch/i386/include/kernel/pic.h @@ -0,0 +1,45 @@ +#ifndef I386_PIC_H +#define I386_PIC_H + +#include + +#define PIC1 0x20 +#define PIC2 0x28 +#define PIC1_COMMAND PIC1 +#define PIC1_DATA (PIC1+1) +#define PIC2_COMMAND PIC2 +#define PIC2_DATA (PIC2+1) + +#define ICW1_ICW4 0x01 +#define ICW1_SINGLE 0x02 +#define ICW1_INTERVAL4 0x04 +#define ICW1_LEVEL 0x08 +#define ICW1_INIT 0x10 + +#define ICW4_8086 0x01 +#define ICW4_AUTO 0x02 +#define ICW4_BUF_SLAVE 0x08 +#define ICW4_BUF_MASTER 0x0C +#define ICW4_SFNM 0x10 + +static inline void outb(uint16_t port, uint8_t value) { + asm volatile("outb %0, %1" : : "a"(value), "Nd"(port)); +} + +static inline uint8_t inb(uint16_t port) { + uint8_t ret; + asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port)); + return ret; +} + +static inline void io_wait(void) { + outb(0x80, 0); +} + +void pic_eoi(unsigned char irq); +void pic_remap(void); + +void irq_set_mask(uint8_t irq); +void irq_clear_mask(uint8_t irq); + +#endif -- cgit v1.2.3