Index: sys/x86/include/intr_machdep.h =================================================================== --- sys/x86/include/intr_machdep.h +++ sys/x86/include/intr_machdep.h @@ -143,12 +143,16 @@ int intr_add_handler(const char *name, int vector, driver_filter_t filter, driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep, int 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); #ifdef SMP int intr_bind(u_int vector, u_char cpu); #endif int intr_config_intr(int vector, enum intr_trigger trig, enum intr_polarity pol); int intr_describe(u_int vector, void *ih, const char *descr); +int intr_describe_intsrc(struct intsrc *isrc, void *ih, const char *descr); void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame); u_int intr_next_cpu(int domain); struct intsrc *intr_lookup_source(int vector); Index: sys/x86/x86/intr_machdep.c =================================================================== --- sys/x86/x86/intr_machdep.c +++ sys/x86/x86/intr_machdep.c @@ -277,11 +277,21 @@ int domain) { struct intsrc *isrc; - int error; isrc = intr_lookup_source(vector); if (isrc == NULL) 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, arg, intr_priority(flags), flags, cookiep); if (error == 0) { @@ -541,11 +551,19 @@ intr_describe(u_int vector, void *ih, const char *descr) { struct intsrc *isrc; - int error; isrc = intr_lookup_source(vector); if (isrc == NULL) 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); if (error) return (error);