Files
nt-lite/code/kernel/ke_irq.c
T

26 lines
638 B
C

// ke_irq.c — IRQ dispatch, kernel-side
#include "ke_irq.h"
#include "hal_api.h"
#define MAX_IRQS 24
static void (*gIrqHandlers[MAX_IRQS])(void);
static const HAL_API *gHal;
void KeIrqInitialize(const HAL_API *hal) {
gHal = hal;
}
void KeIrqRegister(uint8_t irq, void (*handler)(void)) {
if (irq >= MAX_IRQS || !handler) return;
gIrqHandlers[irq] = handler;
gHal->Intc.RouteIrq(irq);
}
void KeIrqDispatch(uint8_t irq) {
// eoi first, handler second because it doesn't work otherwise.
gHal->Intc.SendEoi();
if (irq < MAX_IRQS && gIrqHandlers[irq])
gIrqHandlers[irq]();
}