From d36b2d80577acaf307697e644c7876601dedd9db Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sun, 1 Aug 2021 17:30:39 -0700 Subject: [PATCH] [kernel] Clean up interrupts.cpp There was a lot of old kruft in interrupts.cpp - clean it up and make irq_handler also use kassert for invalid states. --- src/kernel/interrupts.cpp | 31 ++++--------------------------- src/kernel/interrupts.h | 4 +++- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/src/kernel/interrupts.cpp b/src/kernel/interrupts.cpp index b6e2bfc..0ee2e7b 100644 --- a/src/kernel/interrupts.cpp +++ b/src/kernel/interrupts.cpp @@ -3,21 +3,13 @@ #include "kernel_memory.h" #include "kutil/printf.h" -#include "apic.h" -#include "console.h" #include "cpu.h" -#include "debug.h" #include "device_manager.h" -#include "gdt.h" #include "idt.h" #include "interrupts.h" #include "io.h" -#include "kernel_memory.h" -#include "log.h" #include "objects/process.h" #include "scheduler.h" -#include "syscall.h" -#include "tss.h" #include "vm_space.h" static const uint16_t PIC1 = 0x20; @@ -25,21 +17,9 @@ static const uint16_t PIC2 = 0xa0; constexpr uintptr_t apic_eoi_addr = 0xfee000b0 + ::memory::page_offset; -constexpr size_t increment_offset = 0x1000; - extern "C" { - void _halt(); - void isr_handler(cpu_state*); void irq_handler(cpu_state*); - -} - -isr -operator+(const isr &lhs, int rhs) -{ - using under_t = std::underlying_type::type; - return static_cast(static_cast(lhs) + rhs); } uint8_t @@ -186,15 +166,12 @@ isr_handler(cpu_state *regs) void irq_handler(cpu_state *regs) { - console *cons = console::get(); uint8_t irq = get_irq(regs->interrupt); if (! device_manager::get().dispatch_irq(irq)) { - cons->set_color(11); - cons->printf("\nReceived unknown IRQ: %d (vec %d)\n", - irq, regs->interrupt); - cons->set_color(); - - print_regs(*regs); + char message[100]; + snprintf(message, sizeof(message), + "Unknown IRQ: %d (vec 0x%x)", irq, regs->interrupt); + kassert(false, message); } *reinterpret_cast(apic_eoi_addr) = 0; diff --git a/src/kernel/interrupts.h b/src/kernel/interrupts.h index cec9521..b325edd 100644 --- a/src/kernel/interrupts.h +++ b/src/kernel/interrupts.h @@ -21,7 +21,9 @@ enum class isr : uint8_t }; /// Helper operator to add an offset to an isr vector -isr operator+(const isr &lhs, int rhs); +constexpr isr operator+(const isr &lhs, int rhs) { + return static_cast(static_cast(lhs) + rhs); +} extern "C" { /// Set the CPU interrupt enable flag (sti)