IRQs
include/irq/irq.h View source View on GitHubStructs
Section titled “Structs”irq_action
Section titled “irq_action”struct irq_action {
irq_handler_t handler;
void *data;
struct list_head list;
}; irq_chip
Section titled “irq_chip”struct irq_chip {
const 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_us_t interval);
}; irq_desc
Section titled “irq_desc”struct irq_desc {
uint8_t vector;
enum irq_flags flags;
const 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;
}; irq_context
Section titled “irq_context”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 error_code;
uint64_t rip;
uint64_t cs;
uint64_t rflags;
uint64_t rsp;
uint64_t ss;
}; irq_result
Section titled “irq_result”enum irq_result {
IRQ_NONE = 0,
IRQ_HANDLED = 1,
}; irq_flags
Section titled “irq_flags”enum irq_flags {
IRQ_FLAG_SHARED = 1,
IRQ_FLAG_LEVEL_TRIGGERED = 1 << 1,
IRQ_FLAG_EDGE_TRIGGERED = 1 << 2,
IRQ_FLAG_NONE = 0,
}; Type Aliases
Section titled “Type Aliases”irq_handler_t
Section titled “irq_handler_t”typedef enum irq_result (*irq_handler_t)(void * ctx, uint8_t vector, struct irq_context * ictx); Functions
Section titled “Functions”irq_context_to_crash_regs
Section titled “irq_context_to_crash_regs”void irq_context_to_crash_regs(const struct irq_context *ictx, struct crash_regs *out); irq_register
Section titled “irq_register”void irq_register(char *name, uint8_t vector, irq_handler_t handler, void *ctx, enum irq_flags flags); irq_register_full
Section titled “irq_register_full”void irq_register_full(struct irq_desc *d); irq_set_chip
Section titled “irq_set_chip”void irq_set_chip(uint8_t vector, struct irq_chip *chip, void *data); irq_mark_self_in_interrupt
Section titled “irq_mark_self_in_interrupt”uint32_t irq_mark_self_in_interrupt(bool new); irq_mark_self_in_nmi
Section titled “irq_mark_self_in_nmi”uint32_t irq_mark_self_in_nmi(bool new); irq_in_nmi
Section titled “irq_in_nmi”bool irq_in_nmi(void); irq_in_interrupt
Section titled “irq_in_interrupt”bool irq_in_interrupt(void); irq_not_in_interrupt
Section titled “irq_not_in_interrupt”bool irq_not_in_interrupt(void); irq_vector_is_exception
Section titled “irq_vector_is_exception”bool irq_vector_is_exception(uint8_t vector); ipi_send
Section titled “ipi_send”void ipi_send(uint32_t apic_id, uint8_t vector); nmi_send
Section titled “nmi_send”void nmi_send(uint32_t apic_id); irq_set_alloc
Section titled “irq_set_alloc”void irq_set_alloc(int32_t entry, bool used); irq_alloc_entry
Section titled “irq_alloc_entry”int32_t irq_alloc_entry(void); irq_free_entry
Section titled “irq_free_entry”void irq_free_entry(int32_t entry); irq_is_installed
Section titled “irq_is_installed”bool irq_is_installed(int32_t entry); irq_free_entry
Section titled “irq_free_entry”void irq_free_entry(int32_t entry); irq_disable
Section titled “irq_disable”void irq_disable(irq_t irq); irq_enable
Section titled “irq_enable”void irq_enable(irq_t irq); Macros
Section titled “Macros”IRQ_DIV_BY_Z
Section titled “IRQ_DIV_BY_Z”#define IRQ_DIV_BY_Z 0x0 IRQ_DEBUG
Section titled “IRQ_DEBUG”#define IRQ_DEBUG 0x1 IRQ_NMI
Section titled “IRQ_NMI”#define IRQ_NMI 0x2 IRQ_BREAKPOINT
Section titled “IRQ_BREAKPOINT”#define IRQ_BREAKPOINT 0x3 IRQ_DBF
Section titled “IRQ_DBF”#define IRQ_DBF 0x8 IRQ_SSF
Section titled “IRQ_SSF”#define IRQ_SSF 0xC IRQ_GPF
Section titled “IRQ_GPF”#define IRQ_GPF 0xD IRQ_PAGE_FAULT
Section titled “IRQ_PAGE_FAULT”#define IRQ_PAGE_FAULT 0xE IRQ_TIMER
Section titled “IRQ_TIMER”#define IRQ_TIMER 0x20 IRQ_SCHEDULER
Section titled “IRQ_SCHEDULER”#define IRQ_SCHEDULER IRQ_TIMER IRQ_TLB_SHOOTDOWN
Section titled “IRQ_TLB_SHOOTDOWN”#define IRQ_TLB_SHOOTDOWN 0x22 IRQ_NOP
Section titled “IRQ_NOP”#define IRQ_NOP 0x24 IRQ_DPC
Section titled “IRQ_DPC”#define IRQ_DPC 0x25 IRQ_EXCEPTION_COUNT
Section titled “IRQ_EXCEPTION_COUNT”#define IRQ_EXCEPTION_COUNT 32