33#elif (__cplusplus >= 201103L)
36#error "Using KOS' IRQ API requires at least C++11"
69typedef struct irq_cb {
131#define irq_disable_scoped() __irq_disable_scoped(__LINE__)
168 uintptr_t stack_pointer,
170 const uintptr_t *args) {
287void irq_shutdown(
void);
289static inline void __irq_scoped_cleanup(
irq_mask_t *state) {
293#define ___irq_disable_scoped(l) \
294 irq_mask_t __scoped_irq_##l __attribute__((cleanup(__irq_scoped_cleanup))) = irq_disable()
296#define __irq_disable_scoped(l) ___irq_disable_scoped(l)
void hnd(const char *file, int line, const char *expr, const char *msg, const char *func)
Definition asserthnd.c:53
static struct @68 data[BARRIER_COUNT]
static pvr_poly_cxt_t cxt
Definition bubbles.c:28
static irq_context_t * irq_get_context(void)
Get the current IRQ context.
Definition irq.h:196
static void irq_create_context(irq_context_t *context, uintptr_t stack_pointer, uintptr_t routine, const uintptr_t *args)
Fill a newly allocated context block.
Definition irq.h:167
static void irq_set_context(irq_context_t *cxt)
Switch out contexts (for interrupt return).
Definition irq.h:183
irq_context_t * arch_irq_get_context(void)
void arch_irq_create_context(irq_context_t *context, uintptr_t stack_pointer, uintptr_t routine, const uintptr_t *args)
int arch_irq_set_handler(irq_t code, irq_hdl_t hnd, void *data)
irq_cb_t arch_irq_get_global_handler(void)
int arch_irq_set_global_handler(irq_hdl_t hnd, void *data)
void arch_irq_set_context(irq_context_t *cxt)
irq_cb_t arch_irq_get_handler(irq_t code)
static irq_cb_t irq_get_handler(irq_t code)
Get the address of the current handler for the IRQ type.
Definition irq.h:238
static irq_cb_t irq_get_global_handler(void)
Get the global exception handler.
Definition irq.h:265
static int irq_set_global_handler(irq_hdl_t hnd, void *data)
Set a global exception handler.
Definition irq.h:256
static int irq_set_handler(irq_t code, irq_hdl_t hnd, void *data)
Set or remove an IRQ handler.
Definition irq.h:225
static void irq_enable(void)
Enable all interrupts.
Definition irq.h:93
static irq_mask_t irq_disable(void)
Disable interrupts.
Definition irq.h:107
static void irq_restore(irq_mask_t state)
Restore interrupt state.
Definition irq.h:121
static bool irq_inside_int(void)
Returns whether inside of an interrupt context.
Definition irq.h:139
static void arch_irq_restore(irq_mask_t old)
Definition irq.h:240
static int arch_irq_inside_int(void)
Definition irq.h:236
irq_exception
Interrupt exception codes.
Definition irq.h:163
static void arch_irq_enable(void)
Definition irq.h:253
static irq_mask_t arch_irq_disable(void)
Definition irq.h:244
enum irq_exception irq_t
Architecture-specific interrupt exception codes.
Definition irq.h:51
uint32_t irq_mask_t
Type representing an interrupt mask state.
Definition irq.h:54
void(* irq_hdl_t)(irq_t code, irq_context_t *context, void *data)
The type of an IRQ handler.
Definition irq.h:62
Interrupt and exception handling.
The type of a full callback of an IRQ handler and userdata.
Definition irq.h:69
void * data
A pointer that will be passed along to the callback.
Definition irq.h:71
irq_hdl_t hdl
A pointer to a procedure to handle an exception.
Definition irq.h:70
Architecture-specific structure for holding the processor state.
Definition irq.h:94