Skip to content

IRQs

struct irq_action {
irq_handler_t handler;
void *data;
struct list_head list;
};

struct irq_action referenced types:

struct irq_chip {
char *name;
void (*mask)(struct irq_desc *);
void (*unmask)(struct irq_desc *);
void (*eoi)(struct irq_desc *);
void (*set_affinity)(struct irq_desc *, struct cpu_mask *);
int (*set_rate_limit)(struct irq_desc *, time_t interval);
};
struct irq_desc {
uint8_t vector;
enum irq_flags flags;
char *name;
struct irq_chip *chip;
void *chip_data;
struct list_head actions;
struct cpu_mask affinity;
struct cpu_mask masked_cpus;
bool present;
bool allocated;
bool enabled;
};

struct irq_desc referenced types:

struct irq_context {
uint64_t rax;
uint64_t rbx;
uint64_t rcx;
uint64_t rdx;
uint64_t rbp;
uint64_t rdi;
uint64_t rsi;
uint64_t r8;
uint64_t r9;
uint64_t r10;
uint64_t r11;
uint64_t r12;
uint64_t r13;
uint64_t r14;
uint64_t r15;
uint64_t rip;
uint64_t cs;
uint64_t rflags;
uint64_t rsp;
uint64_t ss;
};
enum irq_result {
IRQ_NONE = 0,
IRQ_HANDLED = 1,
};
enum irq_flags {
IRQ_FLAG_SHARED = 1,
IRQ_FLAG_LEVEL_TRIGGERED = 1 << 1,
IRQ_FLAG_EDGE_TRIGGERED = 1 << 2,
IRQ_FLAG_NONE = 0,
};
typedef enum irq_result (*irq_handler_t)(void * ctx, uint8_t vector, struct irq_context * ictx);

type alias irq_handler_t referenced types:

void irq_mark_self_in_interrupt(bool new);
bool irq_in_interrupt(void);
bool irq_in_thread_context(void);
#define IRQ_DIV_BY_Z 0x0
#define IRQ_DEBUG 0x1
#define IRQ_NMI 0x2
#define IRQ_BREAKPOINT 0x3
#define IRQ_DBF 0x8
#define IRQ_SSF 0xC
#define IRQ_GPF 0xD
#define IRQ_PAGE_FAULT 0xE
#define IRQ_TIMER 0x20
#define IRQ_SCHEDULER IRQ_TIMER
#define IRQ_TLB_SHOOTDOWN 0x22
#define IRQ_NOP 0x24