mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 00:14:32 -08:00
We started actually running up against the page boundary for kernel stacks and thus double-faulting on page faults from kernel space. So I finally added IST stacks. Note that we currently just increment/decrement the IST entry by a page when we enter the handler to avoid clobbering on re-entry, but this means: * these handlers need to be able to operate with only a page of stack * kernel stacks always have to be >1 pages * the amount of nesting possible is tied to the kernel stack size. These seem fine for now, but we should maybe find a way to use something besides g_kernel_stacks to set up the IST stacks if/when this becomes an issue.
35 lines
745 B
C
35 lines
745 B
C
#pragma once
|
|
/// \file interrupts.h
|
|
/// Free functions and definitions related to interrupt service vectors
|
|
#include <stdint.h>
|
|
|
|
|
|
/// Enum of all defined ISR/IRQ vectors
|
|
enum class isr : uint8_t
|
|
{
|
|
#define ISR(i, s, name) name = i,
|
|
#define EISR(i, s, name) name = i,
|
|
#define IRQ(i, q, name) name = i,
|
|
#include "interrupt_isrs.inc"
|
|
#undef IRQ
|
|
#undef EISR
|
|
#undef ISR
|
|
|
|
_zero = 0
|
|
};
|
|
|
|
/// Helper operator to add an offset to an isr vector
|
|
isr operator+(const isr &lhs, int rhs);
|
|
|
|
extern "C" {
|
|
/// Set the CPU interrupt enable flag (sti)
|
|
void interrupts_enable();
|
|
|
|
/// Set the CPU interrupt disable flag (cli)
|
|
void interrupts_disable();
|
|
}
|
|
|
|
/// Fill the IDT with our ISRs, and disable the legacy
|
|
/// PIC interrupts.
|
|
void interrupts_init();
|