• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/mips/broadcom/

Lines Matching refs:cpuirq

93 		sc->isrcs[ivec].cpuirq = NULL;
112 * Initialize the given @p cpuirq state as unavailable.
115 * @param cpuirq The CPU IRQ state to be initialized.
118 * @retval non-zero if initializing @p cpuirq otherwise fails, a regular
123 struct bcm_mips_cpuirq *cpuirq)
127 KASSERT(cpuirq->sc == NULL, ("cpuirq already initialized"));
128 cpuirq->sc = sc;
129 cpuirq->mips_irq = 0;
130 cpuirq->irq_rid = -1;
131 cpuirq->irq_res = NULL;
132 cpuirq->irq_cookie = NULL;
133 cpuirq->isrc_solo = NULL;
134 cpuirq->refs = 0;
142 * Allocate required resources and initialize the given @p cpuirq state.
145 * @param cpuirq The CPU IRQ state to be initialized.
152 * @retval non-zero if initializing @p cpuirq otherwise fails, a regular
156 bcm_mips_init_cpuirq(struct bcm_mips_softc *sc, struct bcm_mips_cpuirq *cpuirq,
174 KASSERT(cpuirq->sc == NULL, ("cpuirq already initialized"));
194 INTR_TYPE_MISC | INTR_MPSAFE | INTR_EXCL, filter, NULL, cpuirq,
209 cpuirq->sc = sc;
210 cpuirq->mips_irq = irq;
211 cpuirq->irq_rid = rid;
212 cpuirq->irq_res = res;
213 cpuirq->irq_cookie = cookie;
214 cpuirq->isrc_solo = NULL;
215 cpuirq->refs = 0;
222 * Free any resources associated with the given @p cpuirq state.
225 * @param cpuirq A CPU IRQ instance previously successfully initialized
229 * @retval non-zero if finalizing @p cpuirq otherwise fails, a regular
233 bcm_mips_fini_cpuirq(struct bcm_mips_softc *sc, struct bcm_mips_cpuirq *cpuirq)
239 if (cpuirq->sc == NULL) {
240 KASSERT(cpuirq->irq_res == NULL, ("leaking cpuirq resource"));
246 if (cpuirq->refs != 0) {
251 if (cpuirq->irq_cookie != NULL) {
252 KASSERT(cpuirq->irq_res != NULL, ("resource missing"));
254 error = bus_teardown_intr(sc->dev, cpuirq->irq_res,
255 cpuirq->irq_cookie);
261 cpuirq->irq_cookie = NULL;
264 if (cpuirq->irq_res != NULL) {
265 bus_release_resource(sc->dev, SYS_RES_IRQ, cpuirq->irq_rid,
266 cpuirq->irq_res);
267 cpuirq->irq_res = NULL;
270 if (cpuirq->irq_rid != -1) {
271 bus_delete_resource(sc->dev, SYS_RES_IRQ, cpuirq->irq_rid);
272 cpuirq->irq_rid = -1;
533 struct bcm_mips_cpuirq *cpuirq;
540 if (isrc->cpuirq != NULL) {
541 KASSERT(isrc->cpuirq->refs > 0, ("assigned IRQ has no "
572 cpuirq = &sc->cpuirqs[BCM_MIPS_IRQ_SHARED];
591 cpuirq = &sc->cpuirqs[BCM_MIPS_IRQ_SHARED];
605 cpuirq = &sc->cpuirqs[i];
613 isrc->ivec, cpuirq->mips_irq);
615 KASSERT(isrc->cpuirq == NULL, ("CPU IRQ already assigned"));
618 KASSERT(cpuirq->refs == 1 || cpuirq->isrc_solo == NULL,
619 ("single isrc dispatch enabled on cpuirq with multiple refs"));
621 /* Verify that bumping the cpuirq refcount below will not overflow */
622 if (cpuirq->refs == UINT_MAX)
625 /* Increment cpuirq refcount on behalf of the isrc */
626 cpuirq->refs++;
632 isrc->cpuirq = cpuirq;
635 if (cpuirq->refs == 1 && cpuirq->mips_irq != BCM_MIPS_IRQ_SHARED)
636 cpuirq->isrc_solo = isrc;
652 struct bcm_mips_cpuirq *cpuirq;
665 cpuirq = isrc->cpuirq;
666 isrc->cpuirq = NULL;
668 KASSERT(cpuirq != NULL, ("no assigned IRQ"));
669 KASSERT(cpuirq->refs > 0, ("cpuirq over-release"));
672 if (cpuirq->refs == 1 && cpuirq->isrc_solo != NULL) {
673 KASSERT(cpuirq->isrc_solo == isrc, ("invalid solo isrc"));
674 cpuirq->isrc_solo = NULL;
677 cpuirq->refs--;