bus: Add bus_alloc_legacy_irq_resource()
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Tue, 11 Oct 2011 11:23:12 +0000 (19:23 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Tue, 11 Oct 2011 11:23:12 +0000 (19:23 +0800)
This is a convenient wrapper function for legacy (mainly ISA) drivers to
alloc IRQ resource

sys/kern/subr_bus.c
sys/sys/bus.h

index 58b507e..f0f244c 100644 (file)
@@ -46,6 +46,7 @@
 #include <sys/filio.h>
 #include <sys/event.h>
 #include <sys/signalvar.h>
+#include <sys/machintr.h>
 
 #include <machine/stdarg.h>    /* for device_printf() */
 
@@ -2817,6 +2818,15 @@ bus_alloc_resource(device_t dev, int type, int *rid, u_long start, u_long end,
                                  count, flags, -1));
 }
 
+struct resource *
+bus_alloc_legacy_irq_resource(device_t dev, int *rid, u_long irq, u_int flags)
+{
+       if (dev->parent == 0)
+               return(0);
+       return BUS_ALLOC_RESOURCE(dev->parent, dev, SYS_RES_IRQ, rid,
+           irq, irq, 1, flags, machintr_intr_cpuid(irq));
+}
+
 int
 bus_activate_resource(device_t dev, int type, int rid, struct resource *r)
 {
index fd6e786..8ac4c72 100644 (file)
@@ -310,6 +310,8 @@ void bus_release_resources(device_t dev, const struct resource_spec *rs,
 struct resource *bus_alloc_resource(device_t dev, int type, int *rid,
                                     u_long start, u_long end, u_long count,
                                     u_int flags);
+struct resource *bus_alloc_legacy_irq_resource(device_t dev, int *rid,
+                                    u_long irq, u_int flags);
 int    bus_activate_resource(device_t dev, int type, int rid, 
                              struct resource *r);
 int    bus_deactivate_resource(device_t dev, int type, int rid,