MOS Source Code
Loading...
Searching...
No Matches
interrupt.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
4
6
7#include <mos/allocator.hpp>
8#include <mos_stdlib.hpp>
9
17
20
22{
23 // spinlock_acquire(&irq_handlers_lock);
24
26 {
27 if (handler->irq == irq)
28 if (handler->handler(irq, handler->data))
29 break; // interrupt was handled
30 }
31
32 // spinlock_release(&irq_handlers_lock);
33}
34
35void interrupt_handler_register(u32 irq, irq_serve_t handler, void *data)
36{
38 new_handler->irq = irq;
39 new_handler->handler = handler;
40 new_handler->data = data;
41
43 list_node_append(&irq_handlers, &new_handler->list_node);
45}
MOSAPI void list_node_append(list_node_t *head, list_node_t *item)
Definition list.cpp:68
#define list_foreach(t, v, h)
Iterate over a list.
Definition list.hpp:89
list_node_t list_head
A linked list head.
Definition list.hpp:23
void interrupt_entry(u32 irq)
Definition interrupt.cpp:21
static spinlock_t irq_handlers_lock
Definition interrupt.cpp:18
static list_head irq_handlers
Definition interrupt.cpp:19
void interrupt_handler_register(u32 irq, irq_serve_t handler, void *data)
Register an interrupt handler.
Definition interrupt.cpp:35
bool(* irq_serve_t)(u32 irq, void *data)
Function pointer type for interrupt handlers.
Definition interrupt.hpp:11
T * create(Args &&...args)
Definition allocator.hpp:10
#define spinlock_acquire(lock)
Definition spinlock.hpp:64
#define spinlock_release(lock)
Definition spinlock.hpp:65
irq_serve_t handler
Definition interrupt.cpp:14
unsigned int u32
Definition types.h:17