summaryrefslogtreecommitdiff
path: root/kernel/src/interrupt/idt.c
diff options
context:
space:
mode:
authorTyler Murphy <=>2023-07-17 19:34:52 -0400
committerTyler Murphy <=>2023-07-17 19:34:52 -0400
commit7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5 (patch)
tree4e86ff20e73171285156631db043e12aaf63bf04 /kernel/src/interrupt/idt.c
parentpaging (diff)
downloadfinix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.gz
finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.bz2
finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.zip
refactoring
Diffstat (limited to 'kernel/src/interrupt/idt.c')
-rw-r--r--kernel/src/interrupt/idt.c118
1 files changed, 0 insertions, 118 deletions
diff --git a/kernel/src/interrupt/idt.c b/kernel/src/interrupt/idt.c
deleted file mode 100644
index aaa7034..0000000
--- a/kernel/src/interrupt/idt.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <sys.h>
-#include <print.h>
-#include <panic.h>
-
-#include "acpi/acpi.h"
-#include "drivers/ps2kb.h"
-#include "drivers/ps2mouse.h"
-#include "time.h"
-#include "tty/color.h"
-#include "idt.h"
-#include "pic.h"
-#include "tty/term.h"
-
-#define WIDTH 30
-static char buf[WIDTH];
-static int timer = -1;
-
-void idt_pic_eoi(uint8_t exception) {
- pic_eoi(exception - PIC_REMAP_OFFSET);
-}
-
-void idt_pic_timer(void) {
-
- timer += 1;
- if (timer % 20 != 0) return;
-
- uint32_t state = term_save();
-
- term_setfg(VGA_LIGHT_GREEN);
- term_setpos(TERM_W - WIDTH - 1, 0);
- for (size_t i = 0; i < WIDTH; i++) putchar(' ');
- term_setpos(TERM_W - WIDTH - 1, 0);
-
- timetostr(rtc_localtime(), "%a %b %d %Y %H:%M:%S", buf, WIDTH);
- printk("%s", buf);
-
- term_load(state);
-}
-
-void idt_pic_keyboard(void) {
- ps2kb_recv();
-}
-
-void idt_pic_mouse(void) {
- ps2mouse_recv();
-}
-
-void idt_exception_handler(uint8_t exception) {
- char* msg;
- switch(exception) {
- case 0x00:
- msg = "Division by zero";
- break;
- case 0x02:
- msg = "NMI";
- break;
- case 0x04:
- msg = "Overflow";
- break;
- case 0x06:
- msg = "invalid opcode";
- break;
- case 0x08:
- msg = "double fault";
- break;
- case 0x0A:
- msg = "invalid task state segment";
- break;
- case 0x0C:
- msg = "stack segment fault";
- break;
- case 0x0D:
- msg = "general protection fault";
- break;
- case 0x0E:
- msg = "page fault";
- break;
- default:
- msg = "unknown exception";
- break;
- }
- panic("E%u: %s", exception, msg);
-}
-
-__attribute__((aligned(0x10)))
-static struct IdtEntry idt[256];
-static struct Idtr idtr;
-extern void* isr_stub_table[];
-
-static void set_descriptor(uint8_t vector, void* isr, uint8_t flags) {
- struct IdtEntry* entry = &idt[vector];
- entry->isr_low = (size_t)isr & 0xffff;
- entry->kernel_cs = 0x08;
- entry->attributes = flags;
- entry->isr_high = (size_t)isr >> 16;
- entry->_reserved = 0;
-}
-
-void idt_init(void) {
-
- debugk("Loading IDT");
-
- idtr.base = (uintptr_t)&idt[0];
- idtr.limit = (uint16_t)sizeof(struct IdtEntry) * IDT_SIZE - 1;
-
- for(int i = 0; i < IDT_INTERRUPTS; i++) {
- set_descriptor(i, isr_stub_table[i], 0x8e);
- }
-
- __asm__ volatile ("lidt %0" : : "m"(idtr));
-
- succek("IDT has been loaded");
-}
-