Changeset View
Changeset View
Standalone View
Standalone View
sys/x86/x86/intr_machdep.c
Show First 20 Lines • Show All 271 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
int | int | ||||
intr_add_handler(const char *name, int vector, driver_filter_t filter, | intr_add_handler(const char *name, int vector, driver_filter_t filter, | ||||
driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep, | driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep, | ||||
int domain) | int domain) | ||||
{ | { | ||||
struct intsrc *isrc; | struct intsrc *isrc; | ||||
int error; | |||||
isrc = intr_lookup_source(vector); | isrc = intr_lookup_source(vector); | ||||
if (isrc == NULL) | if (isrc == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
return (intr_add_handler_intsrc(name, isrc, filter, handler, arg, | |||||
flags, cookiep, domain)); | |||||
} | |||||
int | |||||
intr_add_handler_intsrc(const char *name, struct intsrc *isrc, | |||||
driver_filter_t filter, driver_intr_t handler, void *arg, | |||||
enum intr_type flags, void **cookiep, int domain) | |||||
{ | |||||
int error; | |||||
error = intr_event_add_handler(isrc->is_event, name, filter, handler, | error = intr_event_add_handler(isrc->is_event, name, filter, handler, | ||||
arg, intr_priority(flags), flags, cookiep); | arg, intr_priority(flags), flags, cookiep); | ||||
if (error == 0) { | if (error == 0) { | ||||
sx_xlock(&intrsrc_lock); | sx_xlock(&intrsrc_lock); | ||||
intrcnt_updatename(isrc); | intrcnt_updatename(isrc); | ||||
isrc->is_handlers++; | isrc->is_handlers++; | ||||
if (isrc->is_handlers == 1) { | if (isrc->is_handlers == 1) { | ||||
isrc->is_domain = domain; | isrc->is_domain = domain; | ||||
▲ Show 20 Lines • Show All 243 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
#endif | #endif | ||||
/* Add a description to an active interrupt handler. */ | /* Add a description to an active interrupt handler. */ | ||||
int | int | ||||
intr_describe(u_int vector, void *ih, const char *descr) | intr_describe(u_int vector, void *ih, const char *descr) | ||||
{ | { | ||||
struct intsrc *isrc; | struct intsrc *isrc; | ||||
int error; | |||||
isrc = intr_lookup_source(vector); | isrc = intr_lookup_source(vector); | ||||
if (isrc == NULL) | if (isrc == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
return (intr_describe_intsrc(isrc, ih, descr)); | |||||
} | |||||
int | |||||
intr_describe_intsrc(struct intsrc *isrc, void *ih, const char *descr) | |||||
{ | |||||
int error; | |||||
error = intr_event_describe_handler(isrc->is_event, ih, descr); | error = intr_event_describe_handler(isrc->is_event, ih, descr); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
intrcnt_updatename(isrc); | intrcnt_updatename(isrc); | ||||
return (0); | return (0); | ||||
} | } | ||||
void | void | ||||
▲ Show 20 Lines • Show All 307 Lines • Show Last 20 Lines |