diff options
author | Tyler Murphy <=> | 2023-07-17 19:34:52 -0400 |
---|---|---|
committer | Tyler Murphy <=> | 2023-07-17 19:34:52 -0400 |
commit | 7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5 (patch) | |
tree | 4e86ff20e73171285156631db043e12aaf63bf04 /kernel/src/interrupt/pic.c | |
parent | paging (diff) | |
download | finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.gz finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.bz2 finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.zip |
refactoring
Diffstat (limited to 'kernel/src/interrupt/pic.c')
-rw-r--r-- | kernel/src/interrupt/pic.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/kernel/src/interrupt/pic.c b/kernel/src/interrupt/pic.c deleted file mode 100644 index 86056a1..0000000 --- a/kernel/src/interrupt/pic.c +++ /dev/null @@ -1,85 +0,0 @@ -#include <sys.h> -#include <print.h> - -#include "pic.h" - -#define PIC1_COMMAND_PORT 0x20 -#define PIC1_DATA_PORT 0x21 -#define PIC2_COMMAND_PORT 0xA0 -#define PIC2_DATA_PORT 0xA1 - -void pic_remap(uint8_t offset) { - - debugk("Remapping PIC"); - - char a1 = inb(PIC1_DATA_PORT); - char a2 = inb(PIC2_DATA_PORT); - // control word 1 - // 0x11: initialize, enable ICW4 - outb(PIC1_COMMAND_PORT, 0x11); - io_wait(); - outb(PIC2_COMMAND_PORT, 0x11); - io_wait(); - // control word 2 - // interrupt offset - outb(PIC1_DATA_PORT, offset); - io_wait(); - outb(PIC2_DATA_PORT, offset + 8); - io_wait(); - // control word 3 - // primary pic: set which pin secondary is connected to - // (pin 2) - outb(PIC1_DATA_PORT, 0x04); - io_wait(); - outb(PIC2_DATA_PORT, 2); - io_wait(); - // control word 3 - // 0x01: enable 8086 mode - outb(PIC1_DATA_PORT, 0x01); - io_wait(); - outb(PIC2_DATA_PORT, 0x01); - io_wait(); - // clear data registers - outb(PIC1_DATA_PORT, a1); - outb(PIC2_DATA_PORT, a2); - - succek("PIC has been remapped to offset 0x%X", offset); -} - -void pic_mask(int irq) { - uint8_t port; - if(irq < 8) { - port = PIC1_DATA_PORT; - } else { - irq -= 8; - port = PIC2_DATA_PORT; - } - uint8_t mask = inb(port); - outb(port, mask | (1 << irq)); -} - -void pic_unmask(int irq) { - uint8_t port; - if(irq < 8) { - port = PIC1_DATA_PORT; - } else { - irq -= 8; - port = PIC2_DATA_PORT; - } - uint8_t mask = inb(port); - outb(port, mask & ~(1 << irq)); -} - -void pic_disable(void) { - outb(PIC1_DATA_PORT, 0xff); - io_wait(); - outb(PIC2_DATA_PORT, 0xff); - io_wait(); -} - -void pic_eoi(int irq) { - if(irq >= 8) { - outb(PIC2_COMMAND_PORT, 0x20); - } - outb(PIC1_COMMAND_PORT, 0x20); -} |