diff options
author | piso <piso@FreeBSD.org> | 2007-02-23 12:19:07 +0000 |
---|---|---|
committer | piso <piso@FreeBSD.org> | 2007-02-23 12:19:07 +0000 |
commit | 6a2ffa86e5b748ba71e36d37462a936eb9101be7 (patch) | |
tree | 10833d4edb6c0d0a5efcf7762d842a4c378404b0 /sys/ia64 | |
parent | 7b48c9d78377cdb9fc6e8bcc5406e28819aef6e3 (diff) | |
download | FreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.zip FreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.tar.gz |
o break newbus api: add a new argument of type driver_filter_t to
bus_setup_intr()
o add an int return code to all fast handlers
o retire INTR_FAST/IH_FAST
For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current
Reviewed by: many
Approved by: re@
Diffstat (limited to 'sys/ia64')
-rw-r--r-- | sys/ia64/ia64/interrupt.c | 13 | ||||
-rw-r--r-- | sys/ia64/ia64/nexus.c | 8 | ||||
-rw-r--r-- | sys/ia64/include/intr.h | 6 |
3 files changed, 15 insertions, 12 deletions
diff --git a/sys/ia64/ia64/interrupt.c b/sys/ia64/ia64/interrupt.c index fefb2e2..61d1bdc 100644 --- a/sys/ia64/ia64/interrupt.c +++ b/sys/ia64/ia64/interrupt.c @@ -283,8 +283,9 @@ ia64_send_eoi(uintptr_t vector) } int -ia64_setup_intr(const char *name, int irq, driver_intr_t handler, void *arg, - enum intr_type flags, void **cookiep, volatile long *cntp) +ia64_setup_intr(const char *name, int irq, driver_filter_t filter, + driver_intr_t handler, void *arg, enum intr_type flags, + void **cookiep, volatile long *cntp) { struct ia64_intr *i; int errcode; @@ -331,7 +332,7 @@ ia64_setup_intr(const char *name, int irq, driver_intr_t handler, void *arg, } /* Second, add this handler. */ - errcode = intr_event_add_handler(i->event, name, handler, arg, + errcode = intr_event_add_handler(i->event, name, filter, handler, arg, intr_priority(flags), flags, cookiep); if (errcode) return errcode; @@ -381,13 +382,13 @@ ia64_dispatch_intr(void *frame, unsigned long vector) thread = 0; critical_enter(); TAILQ_FOREACH(ih, &ie->ie_handlers, ih_next) { - if (!(ih->ih_flags & IH_FAST)) { + if (ih->ih_filter == NULL) { thread = 1; continue; } CTR4(KTR_INTR, "%s: exec %p(%p) for %s", __func__, - ih->ih_handler, ih->ih_argument, ih->ih_name); - ih->ih_handler(ih->ih_argument); + ih->ih_filter, ih->ih_argument, ih->ih_name); + ih->ih_filter(ih->ih_argument); } critical_exit(); diff --git a/sys/ia64/ia64/nexus.c b/sys/ia64/ia64/nexus.c index 7eb4801..166a3ba 100644 --- a/sys/ia64/ia64/nexus.c +++ b/sys/ia64/ia64/nexus.c @@ -89,7 +89,8 @@ static int nexus_deactivate_resource(device_t, device_t, int, int, static int nexus_release_resource(device_t, device_t, int, int, struct resource *); static int nexus_setup_intr(device_t, device_t, struct resource *, int flags, - void (*)(void *), void *, void **); + driver_filter_t filter, void (*)(void *), void *, + void **); static int nexus_teardown_intr(device_t, device_t, struct resource *, void *); static struct resource_list *nexus_get_reslist(device_t dev, device_t child); @@ -422,7 +423,8 @@ nexus_release_resource(device_t bus, device_t child, int type, int rid, */ static int nexus_setup_intr(device_t bus, device_t child, struct resource *irq, - int flags, void (*ihand)(void *), void *arg, void **cookiep) + int flags, driver_filter_t filter, void (*ihand)(void *), + void *arg, void **cookiep) { driver_t *driver; int error; @@ -445,7 +447,7 @@ nexus_setup_intr(device_t bus, device_t child, struct resource *irq, return (error); error = ia64_setup_intr(device_get_nameunit(child), - rman_get_start(irq), ihand, arg, flags, cookiep, 0); + rman_get_start(irq), filter, ihand, arg, flags, cookiep, 0); return (error); } diff --git a/sys/ia64/include/intr.h b/sys/ia64/include/intr.h index 90e0974..841d66c 100644 --- a/sys/ia64/include/intr.h +++ b/sys/ia64/include/intr.h @@ -51,9 +51,9 @@ extern u_int64_t ia64_lapic_address; struct sapic; void ia64_add_sapic(struct sapic *sa); -int ia64_setup_intr(const char *name, int irq, driver_intr_t handler, - void *arg, enum intr_type flags, void **cookiep, - volatile long *cntp); +int ia64_setup_intr(const char *name, int irq, driver_filter_t filter, + driver_intr_t handler, void *arg, enum intr_type flags, + void **cookiep, volatile long *cntp); int ia64_teardown_intr(void *cookie); void ia64_dispatch_intr(void *frame, unsigned long vector); |