21#ifndef KERNEL_INTERRUPTS_H
22#define KERNEL_INTERRUPTS_H
29#include <kernel/types.h>
51struct interrupt_handler {
63struct interrupt_chip {
65 size_t interrupt_count;
100error_t interrupt_handle(
unsigned int nr);
101const char *interrupt_name(
unsigned int nr);
104#define INTERRUPT_HANDLER(_interrupt) _interrupt##_handler
110#define INTERRUPT_HANDLER_FUNCTION(_interrupt) \
111 interrupt_return_t INTERRUPT_HANDLER(_interrupt)(void *data)
116 arch_interrupts_disable();
122 arch_interrupts_enable();
128static inline bool interrupts_test_and_disable(
void)
130 return arch_interrupts_test_and_disable();
133static inline bool interrupts_enabled(
void)
135 return arch_interrupts_enabled();
153static inline scope_irq_off_t scope_irq_off_constructor(
void)
155 return (scope_irq_off_t){
156 .enabled = interrupts_test_and_disable(),
161static inline void scope_irq_off_destructor(scope_irq_off_t *guard)
172#define interrupts_disabled_scope() \
173 for (scope_irq_off_t guard CLEANUP(scope_irq_off_destructor) = \
174 scope_irq_off_constructor(); \
175 !guard.done; guard.done = true)
182extern struct interrupt_handler division_by_zero;
183extern struct interrupt_handler invalid_instruction;
x86 specific interrupt interface implementation
error_t interrupts_install_static_handler(unsigned int nr, struct interrupt_handler *)
Install a pre-configured interrupt handler.
Definition: interrupts.c:122
interrupt_return
Values returned by an interrupt handler.
Definition: interrupts.h:36
error_t interrupts_install_handler(unsigned int irq, interrupt_handler_func_t, void *)
Dynamically set an interrupt handler.
Definition: interrupts.c:131
static void interrupts_enable(void)
Enable interrupts on the current CPU.
Definition: interrupts.h:120
enum interrupt_return interrupt_return_t
Values returned by an interrupt handler.
interrupt_handler_func_t interrupts_get_handler(unsigned int irq, void **)
Retreive the current handler for a given IRQ.
Definition: interrupts.c:153
static void interrupts_disable(void)
Disable interrupts on the current CPU.
Definition: interrupts.h:114
static void interrupts_restore(bool enabled)
Restore the previous interrupt state.
Definition: interrupts.h:142
interrupt_return_t(* interrupt_handler_func_t)(void *)
Function pointer to an interrupt handler.
Definition: interrupts.h:49
@ INTERRUPT_IGNORED
Definition: interrupts.h:38
@ INTERRUPT_HANDLED
Definition: interrupts.h:37
Frame passed onto the interrupt handlers by our stub handler.
Definition: interrupts.h:118
A single hardware IRQ vector.
Definition: interrupts.h:58
The head of a doubly linked list.
Definition: linked_list.h:43
Intrusive doubly-linked list node.
Definition: linked_list.h:27