Lines Matching defs:firq
551 struct bcm2835icu_irq *firq;
563 firq = sc->sc_irq[irqidx];
564 if (firq == NULL) {
565 firq = kmem_alloc(sizeof(*firq), KM_SLEEP);
566 firq->intr_sc = sc;
567 firq->intr_refcnt = 0;
568 firq->intr_arg = arg;
569 firq->intr_ipl = ipl;
570 firq->intr_mpsafe = iflags;
571 firq->intr_irq = irq;
572 TAILQ_INIT(&firq->intr_handlers);
574 firq->intr_ih = intr_establish_xname(irq, ipl,
577 firq->intr_ih = intr_establish_xname(irq, ipl,
578 IST_LEVEL | iflags, bcm2835_icu_intr, firq, xname);
580 if (firq->intr_ih == NULL) {
581 kmem_free(firq, sizeof(*firq));
584 sc->sc_irq[irqidx] = firq;
586 if (firq->intr_arg == NULL || arg == NULL) {
591 if (firq->intr_ipl != ipl) {
596 if (firq->intr_mpsafe != iflags) {
604 firqh->ih_irq = firq;
608 firq->intr_refcnt++;
609 TAILQ_INSERT_TAIL(&firq->intr_handlers, firqh, ih_next);
620 return firq->intr_ih;
628 struct bcm2835icu_irq *firq;
632 firq = sc->sc_irq[n];
633 if (firq == NULL || firq->intr_ih != ih)
636 KASSERT(firq->intr_refcnt > 0);
637 KASSERT(n == (firq->intr_irq - BCM2835_INT_BASE));
640 if (firq->intr_refcnt > 1)
643 intr_disestablish(firq->intr_ih);
645 firqh = TAILQ_FIRST(&firq->intr_handlers);
646 TAILQ_REMOVE(&firq->intr_handlers, firqh, ih_next);
650 kmem_free(firq, sizeof(*firq));
661 struct bcm2835icu_irq *firq = priv;
665 TAILQ_FOREACH(firqh, &firq->intr_handlers, ih_next) {