Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/intr.h
Show First 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | struct intr_map_data { | ||||
enum intr_map_data_type type; | enum intr_map_data_type type; | ||||
}; | }; | ||||
struct intr_map_data_msi { | struct intr_map_data_msi { | ||||
struct intr_map_data hdr; | struct intr_map_data hdr; | ||||
interrupt_t *isrc; | interrupt_t *isrc; | ||||
}; | }; | ||||
#ifdef notyet | |||||
#define INTR_SOLO INTR_MD1 | |||||
typedef int intr_irq_filter_t(void *arg, struct trapframe *tf); | |||||
#else | |||||
typedef int intr_irq_filter_t(void *arg); | |||||
#endif | |||||
typedef int intr_child_irq_filter_t(void *arg, uintptr_t irq); | typedef int intr_child_irq_filter_t(void *arg, uintptr_t irq); | ||||
#define INTR_ISRC_NAMELEN (MAXCOMLEN + 1) | #define INTR_ISRC_NAMELEN (MAXCOMLEN + 1) | ||||
#define INTR_ISRCF_IPI 0x01 /* IPI interrupt */ | #define INTR_ISRCF_IPI 0x01 /* IPI interrupt */ | ||||
#define INTR_ISRCF_PPI 0x02 /* PPI interrupt */ | #define INTR_ISRCF_PPI 0x02 /* PPI interrupt */ | ||||
#define INTR_ISRCF_BOUND 0x04 /* bound to a CPU */ | #define INTR_ISRCF_BOUND 0x04 /* bound to a CPU */ | ||||
struct intr_pic; | struct intr_pic; | ||||
/* Interrupt source definition. */ | /* Interrupt source definition. */ | ||||
struct intr_irqsrc { | struct intr_irqsrc { | ||||
device_t isrc_dev; /* where isrc is mapped */ | device_t isrc_dev; /* where isrc is mapped */ | ||||
u_int isrc_irq; /* unique identificator */ | u_int isrc_irq; /* unique identificator */ | ||||
u_int isrc_flags; | u_int isrc_flags; | ||||
char isrc_name[INTR_ISRC_NAMELEN]; | char isrc_name[INTR_ISRC_NAMELEN]; | ||||
cpuset_t isrc_cpu; /* on which CPUs is enabled */ | cpuset_t isrc_cpu; /* on which CPUs is enabled */ | ||||
u_int isrc_index; | u_int isrc_index; | ||||
u_long * isrc_count; | u_long * isrc_count; | ||||
u_int isrc_handlers; | u_int isrc_handlers; | ||||
struct intr_event * isrc_event; | struct intr_event * isrc_event; | ||||
#ifdef INTR_SOLO | |||||
intr_irq_filter_t * isrc_filter; | |||||
void * isrc_arg; | |||||
#endif | |||||
/* Used by MSI interrupts to store the iommu details */ | /* Used by MSI interrupts to store the iommu details */ | ||||
void * isrc_iommu; | void * isrc_iommu; | ||||
}; | }; | ||||
/* Intr interface for PIC. */ | /* Intr interface for PIC. */ | ||||
int intr_isrc_deregister(interrupt_t *); | int intr_isrc_deregister(interrupt_t *); | ||||
int intr_isrc_register(interrupt_t *, device_t, u_int, const char *, ...) | int intr_isrc_register(interrupt_t *, device_t, u_int, const char *, ...) | ||||
__printflike(4, 5); | __printflike(4, 5); | ||||
#ifdef SMP | #ifdef SMP | ||||
bool intr_isrc_init_on_cpu(interrupt_t *isrc, u_int cpu); | bool intr_isrc_init_on_cpu(interrupt_t *isrc, u_int cpu); | ||||
#endif | #endif | ||||
u_long intr_isrc_dispatch(interrupt_t *, struct trapframe *); | u_long intr_isrc_dispatch(interrupt_t *, struct trapframe *); | ||||
u_int intr_irq_next_cpu(u_int current_cpu, cpuset_t *cpumask); | u_int intr_irq_next_cpu(u_int current_cpu, cpuset_t *cpumask); | ||||
struct intr_pic *intr_pic_register(device_t, intptr_t); | struct intr_pic *intr_pic_register(device_t, intptr_t); | ||||
int intr_pic_deregister(device_t, intptr_t); | int intr_pic_deregister(device_t, intptr_t); | ||||
int intr_pic_claim_root(device_t, intptr_t, intr_irq_filter_t *, void *, u_int); | int intr_pic_claim_root(device_t, intptr_t, driver_filter_t *, void *, u_int); | ||||
int intr_pic_add_handler(device_t, struct intr_pic *, | int intr_pic_add_handler(device_t, struct intr_pic *, | ||||
intr_child_irq_filter_t *, void *, uintptr_t, uintptr_t); | intr_child_irq_filter_t *, void *, uintptr_t, uintptr_t); | ||||
bool intr_is_per_cpu(struct resource *); | bool intr_is_per_cpu(struct resource *); | ||||
extern device_t intr_irq_root_dev; | extern device_t intr_irq_root_dev; | ||||
/* Intr interface for BUS. */ | /* Intr interface for BUS. */ | ||||
▲ Show 20 Lines • Show All 47 Lines • Show Last 20 Lines |