static irqreturn_t brcms_isr(int irq, void *dev_id) { struct brcms_info *wl; bool ours, wantdpc; wl = (struct brcms_info *) dev_id; spin_lock(&wl->isr_lock); /* call common first level interrupt handler */ ours = brcms_c_isr(wl->wlc, &wantdpc); if (ours) { /* if more to do... */ if (wantdpc) { /* ...and call the second level interrupt handler */ /* schedule dpc */ tasklet_schedule(&wl->tasklet); } } spin_unlock(&wl->isr_lock); return IRQ_RETVAL(ours); }
static irqreturn_t brcms_isr(int irq, void *dev_id) { struct brcms_info *wl; bool ours, wantdpc; unsigned long flags; wl = (struct brcms_info *) dev_id; ISR_LOCK(wl, flags); /* call common first level interrupt handler */ ours = brcms_c_isr(wl->wlc, &wantdpc); if (ours) { /* if more to do... */ if (wantdpc) { /* ...and call the second level interrupt handler */ /* schedule dpc */ tasklet_schedule(&wl->tasklet); } } ISR_UNLOCK(wl, flags); return IRQ_RETVAL(ours); }
static irqreturn_t brcms_isr(int irq, void *dev_id) { struct brcms_info *wl; irqreturn_t ret = IRQ_NONE; wl = (struct brcms_info *) dev_id; spin_lock(&wl->isr_lock); /* call common first level interrupt handler */ if (brcms_c_isr(wl->wlc)) { /* schedule second level handler */ tasklet_schedule(&wl->tasklet); ret = IRQ_HANDLED; } spin_unlock(&wl->isr_lock); return ret; }