summaryrefslogtreecommitdiffstats
path: root/sys/ia64
diff options
context:
space:
mode:
authorpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
committerpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
commit6a2ffa86e5b748ba71e36d37462a936eb9101be7 (patch)
tree10833d4edb6c0d0a5efcf7762d842a4c378404b0 /sys/ia64
parent7b48c9d78377cdb9fc6e8bcc5406e28819aef6e3 (diff)
downloadFreeBSD-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.c13
-rw-r--r--sys/ia64/ia64/nexus.c8
-rw-r--r--sys/ia64/include/intr.h6
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);
OpenPOWER on IntegriCloud