diff options
author | Piotr Haber <phaber@broadcom.com> | 2012-11-28 15:44:06 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-11-30 13:38:16 -0500 |
commit | 94d9902dc06a28a1b25cf56a7cdc057608bdf48b (patch) | |
tree | b46da78d4e8f3bdcf261b7c7cf67a87d2173e88b | |
parent | c4dea35e34f5f46e1701156153a09cce429d1ea9 (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.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/main.c | 18 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/pub.h | 2 |
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) | |||
896 | static irqreturn_t brcms_isr(int irq, void *dev_id) | 896 | static 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 | */ |
2599 | bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc) | 2595 | bool 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); | |||
282 | extern u32 brcms_c_intrsoff(struct brcms_c_info *wlc); | 282 | extern u32 brcms_c_intrsoff(struct brcms_c_info *wlc); |
283 | extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask); | 283 | extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask); |
284 | extern bool brcms_c_intrsupd(struct brcms_c_info *wlc); | 284 | extern bool brcms_c_intrsupd(struct brcms_c_info *wlc); |
285 | extern bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc); | 285 | extern bool brcms_c_isr(struct brcms_c_info *wlc); |
286 | extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded); | 286 | extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded); |
287 | extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, | 287 | extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, |
288 | struct sk_buff *sdu, | 288 | struct sk_buff *sdu, |