Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_intr.c
Show First 20 Lines • Show All 255 Lines • ▼ Show 20 Lines | |||||
intr_event_create(struct intr_event **event, void *source, int flags, int irq, | intr_event_create(struct intr_event **event, void *source, int flags, int irq, | ||||
void (*pre_ithread)(void *), void (*post_ithread)(void *), | void (*pre_ithread)(void *), void (*post_ithread)(void *), | ||||
void (*post_filter)(void *), int (*assign_cpu)(void *, int), | void (*post_filter)(void *), int (*assign_cpu)(void *, int), | ||||
const char *fmt, ...) | const char *fmt, ...) | ||||
{ | { | ||||
struct intr_event *ie; | struct intr_event *ie; | ||||
va_list ap; | va_list ap; | ||||
/* The only valid flag during creation is IE_SOFT. */ | /* Check for internal flags. */ | ||||
if ((flags & ~IE_SOFT) != 0) | if ((flags & ~(IE_SOFT | IE_BUS_PRIV)) != 0) | ||||
return (EINVAL); | return (EINVAL); | ||||
ie = malloc(sizeof(struct intr_event), M_ITHREAD, M_WAITOK | M_ZERO); | ie = malloc(sizeof(struct intr_event), M_ITHREAD, M_WAITOK | M_ZERO); | ||||
ie->ie_source = source; | ie->ie_source = source; | ||||
ie->ie_pre_ithread = pre_ithread; | ie->ie_pre_ithread = pre_ithread; | ||||
ie->ie_post_ithread = post_ithread; | ie->ie_post_ithread = post_ithread; | ||||
ie->ie_post_filter = post_filter; | ie->ie_post_filter = post_filter; | ||||
ie->ie_assign_cpu = assign_cpu; | ie->ie_assign_cpu = assign_cpu; | ||||
ie->ie_flags = flags; | ie->ie_flags = flags; | ||||
▲ Show 20 Lines • Show All 134 Lines • ▼ Show 20 Lines | |||||
intr_lookup(int irq) | intr_lookup(int irq) | ||||
{ | { | ||||
struct intr_event *ie; | struct intr_event *ie; | ||||
mtx_lock(&event_lock); | mtx_lock(&event_lock); | ||||
TAILQ_FOREACH(ie, &event_list, ie_list) | TAILQ_FOREACH(ie, &event_list, ie_list) | ||||
if (ie->ie_irq == irq && | if (ie->ie_irq == irq && | ||||
(ie->ie_flags & IE_SOFT) == 0 && | (ie->ie_flags & IE_SOFT) == 0 && | ||||
(ie->ie_flags & IE_BUS_PRIV) == 0 && | |||||
CK_SLIST_FIRST(&ie->ie_handlers) != NULL) | CK_SLIST_FIRST(&ie->ie_handlers) != NULL) | ||||
break; | break; | ||||
mtx_unlock(&event_lock); | mtx_unlock(&event_lock); | ||||
return (ie); | return (ie); | ||||
} | } | ||||
int | int | ||||
intr_setaffinity(int irq, int mode, void *m) | intr_setaffinity(int irq, int mode, void *m) | ||||
▲ Show 20 Lines • Show All 1,246 Lines • Show Last 20 Lines |