Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/freescale/imx/tzic.c
Show First 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | |||||
static inline void | static inline void | ||||
tzic_irq_unmask(struct tzic_softc *sc, u_int irq) | tzic_irq_unmask(struct tzic_softc *sc, u_int irq) | ||||
{ | { | ||||
tzic_write_4(sc, TZIC_ENSET(irq >> 5), (1u << (irq & 0x1f))); | tzic_write_4(sc, TZIC_ENSET(irq >> 5), (1u << (irq & 0x1f))); | ||||
} | } | ||||
static int | static int | ||||
tzic_intr(void *arg) | tzic_intr(INTR_IRQ_FILTER_ARGS(arg, tf)) | ||||
{ | { | ||||
INTR_IRQ_FILTER_TRAPFRAME(tf) | |||||
struct tzic_softc *sc = arg; | struct tzic_softc *sc = arg; | ||||
int b, i, irq; | int b, i, irq; | ||||
uint32_t pending; | uint32_t pending; | ||||
/* Get active interrupt */ | /* Get active interrupt */ | ||||
for (i = 0; i < TZIC_NIRQS / 32; ++i) { | for (i = 0; i < TZIC_NIRQS / 32; ++i) { | ||||
pending = tzic_read_4(sc, TZIC_PND(i)); | pending = tzic_read_4(sc, TZIC_PND(i)); | ||||
if ((b = 31 - __builtin_clz(pending)) < 0) | if ((b = 31 - __builtin_clz(pending)) < 0) | ||||
continue; | continue; | ||||
irq = i * 32 + b; | irq = i * 32 + b; | ||||
tzic_write_4(sc, TZIC_PRIOMASK, 0); | tzic_write_4(sc, TZIC_PRIOMASK, 0); | ||||
if (intr_isrc_dispatch(&sc->isrcs[irq].isrc, | if (intr_isrc_dispatch(&sc->isrcs[irq].isrc, tf) != 0) { | ||||
curthread->td_intr_frame) != 0) { | |||||
tzic_irq_mask(sc, irq); | tzic_irq_mask(sc, irq); | ||||
tzic_irq_eoi(sc); | tzic_irq_eoi(sc); | ||||
arm_irq_memory_barrier(irq); | arm_irq_memory_barrier(irq); | ||||
if (bootverbose) { | if (bootverbose) { | ||||
device_printf(sc->dev, | device_printf(sc->dev, | ||||
"Stray irq %u disabled\n", irq); | "Stray irq %u disabled\n", irq); | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 183 Lines • Show Last 20 Lines |