aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Haber <phaber@broadcom.com>2012-11-28 15:44:06 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-11-30 13:38:16 -0500
commit94d9902dc06a28a1b25cf56a7cdc057608bdf48b (patch)
treeb46da78d4e8f3bdcf261b7c7cf67a87d2173e88b
parentc4dea35e34f5f46e1701156153a09cce429d1ea9 (diff)
brcmsmac: cleanup in isr code
brcms_c_isr returns true if interrupt was for us and if dpc should be scheduled which is the same thing. Simplify it. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Piotr Haber <phaber@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c17
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/main.c18
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/pub.h2
3 files changed, 13 insertions, 24 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
index f917d621acca..976720ccf17a 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
@@ -896,27 +896,22 @@ static void brcms_remove(struct bcma_device *pdev)
896static irqreturn_t brcms_isr(int irq, void *dev_id) 896static irqreturn_t brcms_isr(int irq, void *dev_id)
897{ 897{
898 struct brcms_info *wl; 898 struct brcms_info *wl;
899 bool ours, wantdpc; 899 irqreturn_t ret = IRQ_NONE;
900 900
901 wl = (struct brcms_info *) dev_id; 901 wl = (struct brcms_info *) dev_id;
902 902
903 spin_lock(&wl->isr_lock); 903 spin_lock(&wl->isr_lock);
904 904
905 /* call common first level interrupt handler */ 905 /* call common first level interrupt handler */
906 ours = brcms_c_isr(wl->wlc, &wantdpc); 906 if (brcms_c_isr(wl->wlc)) {
907 if (ours) { 907 /* schedule second level handler */
908 /* if more to do... */ 908 tasklet_schedule(&wl->tasklet);
909 if (wantdpc) { 909 ret = IRQ_HANDLED;
910
911 /* ...and call the second level interrupt handler */
912 /* schedule dpc */
913 tasklet_schedule(&wl->tasklet);
914 }
915 } 910 }
916 911
917 spin_unlock(&wl->isr_lock); 912 spin_unlock(&wl->isr_lock);
918 913
919 return IRQ_RETVAL(ours); 914 return ret;
920} 915}
921 916
922/* 917/*
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 54ab2f70d362..054e1da47806 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -2546,10 +2546,6 @@ static inline u32 wlc_intstatus(struct brcms_c_info *wlc, bool in_isr)
2546 if (macintstatus == 0) 2546 if (macintstatus == 0)
2547 return 0; 2547 return 0;
2548 2548
2549 /* interrupts are already turned off for CFE build
2550 * Caution: For CFE Turning off the interrupts again has some undesired
2551 * consequences
2552 */
2553 /* turn off the interrupts */ 2549 /* turn off the interrupts */
2554 bcma_write32(core, D11REGOFFS(macintmask), 0); 2550 bcma_write32(core, D11REGOFFS(macintmask), 0);
2555 (void)bcma_read32(core, D11REGOFFS(macintmask)); 2551 (void)bcma_read32(core, D11REGOFFS(macintmask));
@@ -2592,33 +2588,31 @@ bool brcms_c_intrsupd(struct brcms_c_info *wlc)
2592 2588
2593/* 2589/*
2594 * First-level interrupt processing. 2590 * First-level interrupt processing.
2595 * Return true if this was our interrupt, false otherwise. 2591 * Return true if this was our interrupt
2596 * *wantdpc will be set to true if further brcms_c_dpc() processing is required, 2592 * and if further brcms_c_dpc() processing is required,
2597 * false otherwise. 2593 * false otherwise.
2598 */ 2594 */
2599bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc) 2595bool brcms_c_isr(struct brcms_c_info *wlc)
2600{ 2596{
2601 struct brcms_hardware *wlc_hw = wlc->hw; 2597 struct brcms_hardware *wlc_hw = wlc->hw;
2602 u32 macintstatus; 2598 u32 macintstatus;
2603 2599
2604 *wantdpc = false;
2605
2606 if (!wlc_hw->up || !wlc->macintmask) 2600 if (!wlc_hw->up || !wlc->macintmask)
2607 return false; 2601 return false;
2608 2602
2609 /* read and clear macintstatus and intstatus registers */ 2603 /* read and clear macintstatus and intstatus registers */
2610 macintstatus = wlc_intstatus(wlc, true); 2604 macintstatus = wlc_intstatus(wlc, true);
2611 2605
2612 if (macintstatus == 0xffffffff) 2606 if (macintstatus == 0xffffffff) {
2613 brcms_err(wlc_hw->d11core, 2607 brcms_err(wlc_hw->d11core,
2614 "DEVICEREMOVED detected in the ISR code path\n"); 2608 "DEVICEREMOVED detected in the ISR code path\n");
2609 return false;
2610 }
2615 2611
2616 /* it is not for us */ 2612 /* it is not for us */
2617 if (macintstatus == 0) 2613 if (macintstatus == 0)
2618 return false; 2614 return false;
2619 2615
2620 *wantdpc = true;
2621
2622 /* save interrupt status bits */ 2616 /* save interrupt status bits */
2623 wlc->macintstatus = macintstatus; 2617 wlc->macintstatus = macintstatus;
2624 2618
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pub.h b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
index 0d7af349d864..2aafe740ebd8 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
@@ -282,7 +282,7 @@ extern void brcms_c_intrson(struct brcms_c_info *wlc);
282extern u32 brcms_c_intrsoff(struct brcms_c_info *wlc); 282extern u32 brcms_c_intrsoff(struct brcms_c_info *wlc);
283extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask); 283extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask);
284extern bool brcms_c_intrsupd(struct brcms_c_info *wlc); 284extern bool brcms_c_intrsupd(struct brcms_c_info *wlc);
285extern bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc); 285extern bool brcms_c_isr(struct brcms_c_info *wlc);
286extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded); 286extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded);
287extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, 287extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc,
288 struct sk_buff *sdu, 288 struct sk_buff *sdu,