Lines Matching full:irq
221 struct ti_pruss_irqsc* irq; in ti_pruss_irq_read() local
227 irq = cdev->si_drv1; in ti_pruss_irq_read()
236 mtx_lock(&irq->sc_mtx); in ti_pruss_irq_read()
238 if (irq->tstamps.ctl.cnt - priv->cnt > TI_TS_ARRAY) in ti_pruss_irq_read()
240 priv->cnt = irq->tstamps.ctl.cnt; in ti_pruss_irq_read()
241 priv->idx = irq->tstamps.ctl.idx; in ti_pruss_irq_read()
242 mtx_unlock(&irq->sc_mtx); in ti_pruss_irq_read()
248 level = irq->tstamps.ctl.idx - idx; in ti_pruss_irq_read()
254 mtx_unlock(&irq->sc_mtx); in ti_pruss_irq_read()
258 error = msleep(irq, &irq->sc_mtx, PCATCH | PDROP, in ti_pruss_irq_read()
263 mtx_lock(&irq->sc_mtx); in ti_pruss_irq_read()
267 mtx_unlock(&irq->sc_mtx); in ti_pruss_irq_read()
269 error = uiomove(&irq->tstamps.ts[idx], ts_len, uio); in ti_pruss_irq_read()
281 int irq; member
312 ti_pruss_interrupts_enable(struct ti_pruss_softc *sc, int8_t irq, bool enable) in ti_pruss_interrupts_enable() argument
314 if (enable && ((sc->sc_irq_devs[irq].channel == -1) || in ti_pruss_interrupts_enable()
315 (sc->sc_irq_devs[irq].event== -1))) in ti_pruss_interrupts_enable()
322 sc->sc_irq_devs[irq].enable = enable; in ti_pruss_interrupts_enable()
324 if (sc->sc_irq_devs[irq].sc_pdev) { in ti_pruss_interrupts_enable()
325 destroy_dev(sc->sc_irq_devs[irq].sc_pdev); in ti_pruss_interrupts_enable()
326 sc->sc_irq_devs[irq].sc_pdev = NULL; in ti_pruss_interrupts_enable()
330 sc->sc_irq_devs[irq].sc_pdev = make_dev(&ti_pruss_cdevirq, 0, UID_ROOT, GID_WHEEL, in ti_pruss_interrupts_enable()
331 0600, "pruss%d.irq%d", device_get_unit(sc->sc_pdev->si_drv1), irq); in ti_pruss_interrupts_enable()
332 sc->sc_irq_devs[irq].sc_pdev->si_drv1 = &sc->sc_irq_devs[irq]; in ti_pruss_interrupts_enable()
334 sc->sc_irq_devs[irq].tstamps.ctl.idx = 0; in ti_pruss_interrupts_enable()
338 ti_pruss_reg_write(sc, reg, sc->sc_irq_devs[irq].channel); in ti_pruss_interrupts_enable()
341 ti_pruss_reg_write(sc, reg, sc->sc_irq_devs[irq].event ); in ti_pruss_interrupts_enable()
360 const int8_t irq = arg2; in ti_pruss_event_map() local
366 if(sc->sc_irq_devs[irq].event == -1) in ti_pruss_event_map()
369 snprintf(event, sizeof(event), "%d", sc->sc_irq_devs[irq].event); in ti_pruss_event_map()
377 ti_pruss_interrupts_enable(sc, irq, false); in ti_pruss_event_map()
378 sc->sc_irq_devs[irq].event = -1; in ti_pruss_event_map()
380 if (sc->sc_irq_devs[irq].channel == -1) { in ti_pruss_event_map()
386 const int8_t channelnr = sc->sc_irq_devs[irq].channel; in ti_pruss_event_map()
395 sc->sc_irq_devs[irq].channel = channelnr; in ti_pruss_event_map()
396 sc->sc_irq_devs[irq].event = eventnr; in ti_pruss_event_map()
412 const int8_t irq = arg2; in ti_pruss_channel_map() local
416 if (sc->sc_irq_devs[irq].channel == -1) in ti_pruss_channel_map()
419 snprintf(channel, sizeof(channel), "%d", sc->sc_irq_devs[irq].channel); in ti_pruss_channel_map()
427 ti_pruss_interrupts_enable(sc, irq, false); in ti_pruss_channel_map()
429 sc->sc_irq_devs[irq].channel); in ti_pruss_channel_map()
430 sc->sc_irq_devs[irq].channel = -1; in ti_pruss_channel_map()
441 sc->sc_irq_devs[irq].channel = channelnr; in ti_pruss_channel_map()
442 sc->sc_irq_devs[irq].last = -1; in ti_pruss_channel_map()
446 irq, channelnr); in ti_pruss_channel_map()
459 const int8_t irq = arg2; in ti_pruss_interrupt_enable() local
469 return ti_pruss_interrupts_enable(sc, irq, irqenable); in ti_pruss_interrupt_enable()
616 OID_AUTO, "irq", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, in ti_pruss_attach()
644 "A", "Channel attached to this irq"); in ti_pruss_attach()
648 "A", "Event attached to this irq"); in ti_pruss_attach()
659 ti_pruss_irq_args[i].irq = i; in ti_pruss_attach()
671 mtx_init(&sc->sc_irq_devs[i].sc_mtx, "TI PRUSS IRQ", NULL, MTX_DEF); in ti_pruss_attach()
713 printf("IRQ %d KQueue not empty!\n", i ); in ti_pruss_detach()
737 * Host-2 to Host-9 of PRU-ICSS IRQ-controller. in ti_pruss_intr()
739 const int pru_int = iap->irq + TI_PRUSS_PRU_IRQS; in ti_pruss_intr()
752 struct ti_pruss_irqsc* irq = &sc->sc_irq_devs[pru_channel]; in ti_pruss_intr() local
753 size_t wr = irq->tstamps.ctl.idx; in ti_pruss_intr()
757 irq->tstamps.ts[wr] = ts.tv_sec * 1000000000 + ts.tv_nsec; in ti_pruss_intr()
761 atomic_add_32(&irq->tstamps.ctl.cnt, 1); in ti_pruss_intr()
763 irq->tstamps.ctl.idx = wr; in ti_pruss_intr()
765 KNOTE_UNLOCKED(&irq->sc_selinfo.si_note, pru_int); in ti_pruss_intr()
766 wakeup(irq); in ti_pruss_intr()
767 selwakeup(&irq->sc_selinfo); in ti_pruss_intr()