static int s3c2410_bus_ipend(struct uart_softc *sc) { uint32_t ufstat, txmask, rxmask; uintptr_t irq; int ipend = 0; uart_lock(sc->sc_hwmtx); ufstat = bus_space_read_4(sc->sc_bas.bst, sc->sc_bas.bsh, SSCOM_UFSTAT); uart_unlock(sc->sc_hwmtx); txmask = rxmask = 0; switch (s3c2xx0_softc->sc_cpu) { case CPU_S3C2410: txmask = UFSTAT_TXCOUNT; rxmask = UFSTAT_RXCOUNT; break; case CPU_S3C2440: txmask = S3C2440_UFSTAT_TXCOUNT; rxmask = S3C2440_UFSTAT_RXCOUNT; break; } if ((ufstat & txmask) == 0) { if (sc->sc_txbusy != 0) ipend |= SER_INT_TXIDLE; irq = rman_get_start(sc->sc_ires); arm_mask_irq(get_sub_irq(irq, TX_OFF)); } if ((ufstat & rxmask) > 0) { ipend |= SER_INT_RXREADY; } return (ipend); }
static void s3c2410_bus_grab(struct uart_softc *sc) { uintptr_t irq; irq = rman_get_start(sc->sc_ires); arm_mask_irq(get_sub_irq(irq, RX_OFF)); }
/** * omap_teardown_intr * * RETURNS: * 0 on success */ int omap_teardown_intr(device_t dev, device_t child, struct resource *res, void *cookie) { unsigned int i; /* Mask (disable) all the interrupts in the range ... will probably be only one */ for (i = rman_get_start(res); (i < NIRQ) && (i <= rman_get_end(res)); i++) { arm_mask_irq(i); } return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie)); }
int arm_remove_irqhandler(int irq, void *cookie) { struct intr_event *event; int error; event = intr_events[irq]; arm_mask_irq(irq); error = intr_event_remove_handler(cookie); if (!CK_SLIST_EMPTY(&event->ie_handlers)) arm_unmask_irq(irq); return (error); }
void arm_handler_execute(struct trapframe *frame, int irqnb) { struct intr_event *event; int i; PCPU_INC(cnt.v_intr); i = -1; while ((i = arm_get_next_irq(i)) != -1) { intrcnt[i]++; event = intr_events[i]; if (intr_event_handle(event, frame) != 0) { /* XXX: Log stray IRQs */ arm_mask_irq(i); } } }
void intr_irq_handler(struct trapframe *frame) { struct intr_event *event; int i; VM_CNT_INC(v_intr); i = -1; while ((i = arm_get_next_irq(i)) != -1) { intrcnt[i]++; event = intr_events[i]; if (intr_event_handle(event, frame) != 0) { /* XXX: Log stray IRQs */ arm_mask_irq(i); } } #ifdef HWPMC_HOOKS if (pmc_hook && (PCPU_GET(curthread)->td_pflags & TDP_CALLCHAIN)) pmc_hook(PCPU_GET(curthread), PMC_FN_USER_CALLCHAIN, frame); #endif }