static int a10_intr(void *arg) { struct a10_aintc_softc *sc = arg; u_int irq; irq = a10_pending_irq(sc); if (irq == -1 || irq > A10_INTR_MAX_NIRQS) { device_printf(sc->sc_dev, "Spurious interrupt %d\n", irq); return (FILTER_HANDLED); } while (irq != -1) { if (irq > A10_INTR_MAX_NIRQS) { device_printf(sc->sc_dev, "Spurious interrupt %d\n", irq); return (FILTER_HANDLED); } if (intr_isrc_dispatch(&sc->isrcs[irq].isrc, curthread->td_intr_frame) != 0) { a10_intr_mask(sc, irq); a10_intr_eoi(sc, irq); device_printf(sc->sc_dev, "Stray interrupt %d disabled\n", irq); } arm_irq_memory_barrier(irq); irq = a10_pending_irq(sc); } return (FILTER_HANDLED); }
static void aw_nmi_post_ithread(device_t dev, struct intr_irqsrc *isrc) { arm_irq_memory_barrier(0); aw_nmi_enable_intr(dev, isrc); }
static void pl190_intc_post_filter(device_t dev, struct intr_irqsrc *isrc) { struct pl190_intc_irqsrc *src; src = (struct pl190_intc_irqsrc *)isrc; arm_irq_memory_barrier(src->irq); }
static void bcm_intc_enable_intr(device_t dev, struct intr_irqsrc *isrc) { struct bcm_intc_irqsrc *bii = (struct bcm_intc_irqsrc *)isrc; arm_irq_memory_barrier(bii->bii_irq); bcm_intc_isrc_unmask(device_get_softc(dev), bii); }
static void pl190_intc_post_ithread(device_t dev, struct intr_irqsrc *isrc) { struct pl190_intc_irqsrc *src; src = (struct pl190_intc_irqsrc *)isrc; pl190_intc_enable_intr(dev, isrc); arm_irq_memory_barrier(src->irq); }
static void ti_gpio_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) { struct ti_gpio_softc *sc = device_get_softc(dev); struct ti_gpio_irqsrc *tgi = (struct ti_gpio_irqsrc *)isrc; arm_irq_memory_barrier(tgi->tgi_irq); ti_gpio_isrc_unmask(sc, tgi); }
static void a10_intr_enable_intr(device_t dev, struct intr_irqsrc *isrc) { struct a10_aintc_softc *sc; u_int irq = ((struct a10_intr_irqsrc *)isrc)->irq; sc = device_get_softc(dev); arm_irq_memory_barrier(irq); a10_intr_unmask(sc, irq); }
static void aw_nmi_post_filter(device_t dev, struct intr_irqsrc *isrc) { struct aw_nmi_softc *sc; sc = device_get_softc(dev); arm_irq_memory_barrier(0); SC_NMI_WRITE(sc, NMI_IRQ_PENDING_REG, NMI_IRQ_ACK); }
static void rt1310_post_filter(device_t dev, struct intr_irqsrc *isrc) { u_int irq; struct rt1310_intc_softc *sc; arm_irq_memory_barrier(0); sc = intc_softc; irq = ((struct rt1310_irqsrc *)isrc)->ri_irq; intc_write_4(sc, RT_INTC_ICCR, 1 << irq); }
static int rt1310_intr(void *arg) { uint32_t irq; struct rt1310_intc_softc *sc = arg; irq = ffs(intc_read_4(sc, RT_INTC_IPR)) - 1; if (intr_isrc_dispatch(&sc->ri_isrcs[irq].ri_isrc, curthread->td_intr_frame) != 0) { intc_write_4(sc, RT_INTC_ICCR, 1 << irq); device_printf(sc->dev, "Stray irq %u disabled\n", irq); } arm_irq_memory_barrier(0); return (FILTER_HANDLED); }
static int bcm2835_intc_intr(void *arg) { int irq, num; struct bcm_intc_softc *sc = arg; for (num = 0; ; num++) { irq = bcm2835_intc_active_intr(sc); if (irq == -1) break; if (intr_isrc_dispatch(&sc->intc_isrcs[irq].bii_isrc, curthread->td_intr_frame) != 0) { bcm_intc_isrc_mask(sc, &sc->intc_isrcs[irq]); device_printf(sc->sc_dev, "Stray irq %u disabled\n", irq); } arm_irq_memory_barrier(0); /* XXX */ } if (num == 0) device_printf(sc->sc_dev, "Spurious interrupt detected\n"); return (FILTER_HANDLED); }
static void rt1310_pre_ithread(device_t dev, struct intr_irqsrc *isrc) { arm_irq_memory_barrier(0); rt1310_disable_intr(dev, isrc); }