static int gusc_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, #if __FreeBSD_version >= 700031 driver_filter_t *filter, #endif driver_intr_t *intr, void *arg, void **cookiep) { sc_p scp = (sc_p)device_get_softc(dev); devclass_t devclass; #if __FreeBSD_version >= 700031 if (filter != NULL) { printf("gusc.c: we cannot use a filter here\n"); return (EINVAL); } #endif devclass = device_get_devclass(child); if (strcmp(devclass_get_name(devclass), "midi") == 0) { scp->midi_intr.intr = intr; scp->midi_intr.arg = arg; return 0; } else if (strcmp(devclass_get_name(devclass), "pcm") == 0) { scp->pcm_intr.intr = intr; scp->pcm_intr.arg = arg; return 0; } return bus_generic_setup_intr(dev, child, irq, flags, #if __FreeBSD_version >= 700031 filter, #endif intr, arg, cookiep); }
static int simplebus_setup_intr(device_t bus, device_t child, struct resource *res, int flags, driver_filter_t *filter, driver_intr_t *ihand, void *arg, void **cookiep) { struct simplebus_devinfo *di; enum intr_trigger trig; enum intr_polarity pol; int error, rid; di = device_get_ivars(child); if (di == NULL) return (ENXIO); if (res == NULL) return (EINVAL); rid = rman_get_rid(res); if (rid >= DI_MAX_INTR_NUM) return (ENOENT); trig = di->di_intr_sl[rid].trig; pol = di->di_intr_sl[rid].pol; if (trig != INTR_TRIGGER_CONFORM || pol != INTR_POLARITY_CONFORM) { error = bus_generic_config_intr(bus, rman_get_start(res), trig, pol); if (error) return (error); } error = bus_generic_setup_intr(bus, child, res, flags, filter, ihand, arg, cookiep); return (error); }
int alpha_platform_pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_intr_t *intr, void *arg, void **cookiep) { #ifdef DEV_ISA /* * XXX - If we aren't the resource manager for this IRQ, assume that * it is actually handled by the ISA PIC. */ if(irq->r_rm != &irq_rman) return isa_setup_intr(dev, child, irq, flags, intr, arg, cookiep); else #endif return bus_generic_setup_intr(dev, child, irq, flags, intr, arg, cookiep); }
static int gusc_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_intr_t *intr, void *arg, void **cookiep) { sc_p scp = (sc_p)device_get_softc(dev); devclass_t devclass; devclass = device_get_devclass(child); if (strcmp(devclass_get_name(devclass), "midi") == 0) { scp->midi_intr.intr = intr; scp->midi_intr.arg = arg; return 0; } else if (strcmp(devclass_get_name(devclass), "pcm") == 0) { scp->pcm_intr.intr = intr; scp->pcm_intr.arg = arg; return 0; } return bus_generic_setup_intr(dev, child, irq, flags, intr, arg, cookiep, NULL, NULL); }
static int sbus_setup_intr(device_t dev, device_t child, struct resource *ires, int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep) { struct sbus_softc *sc; u_long vec; sc = device_get_softc(dev); /* * Make sure the vector is fully specified and we registered * our interrupt controller for it. */ vec = rman_get_start(ires); if (INTIGN(vec) != sc->sc_ign || intr_vectors[vec].iv_ic != &sbus_ic) { device_printf(dev, "invalid interrupt vector 0x%lx\n", vec); return (EINVAL); } return (bus_generic_setup_intr(dev, child, ires, flags, filt, intr, arg, cookiep)); }
int fhc_setup_intr(device_t bus, device_t child, struct resource *r, int flags, driver_intr_t *func, void *arg, void **cookiep) { struct fhc_softc *sc; struct fhc_clr *fc; int error; int rid; sc = device_get_softc(bus); rid = rman_get_rid(r); fc = malloc(sizeof(*fc), M_DEVBUF, M_WAITOK | M_ZERO); fc->fc_func = func; fc->fc_arg = arg; fc->fc_bt = sc->sc_bt[rid]; fc->fc_bh = sc->sc_bh[rid]; bus_space_write_4(sc->sc_bt[rid], sc->sc_bh[rid], FHC_IMAP, r->r_start); bus_space_read_4(sc->sc_bt[rid], sc->sc_bh[rid], FHC_IMAP); error = bus_generic_setup_intr(bus, child, r, flags, fhc_intr_stub, fc, cookiep); if (error != 0) { free(fc, M_DEVBUF); return (error); } fc->fc_cookie = *cookiep; *cookiep = fc; bus_space_write_4(sc->sc_bt[rid], sc->sc_bh[rid], FHC_ICLR, 0x0); bus_space_write_4(sc->sc_bt[rid], sc->sc_bh[rid], FHC_IMAP, INTMAP_ENABLE(r->r_start, PCPU_GET(mid))); bus_space_read_4(sc->sc_bt[rid], sc->sc_bh[rid], FHC_IMAP); return (error); }