brcmsmac: fix statistic counter update function
authorArend van Spriel <arend@broadcom.com>
Wed, 29 Oct 2014 15:02:50 +0000 (16:02 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 30 Oct 2014 19:26:53 +0000 (15:26 -0400)
The 802.11 core statistics are retrieved from the core registers
but not stored. So the debug code was never triggered to give a
warning message on tx underruns or rx overflows. This patch fixes
this and assures the statistics are stored in the snapshot.

Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmsmac/main.c

index 1b474828d5b884fb957daf52ac59ed3c135b4b1c..bc9be78faafa6679b0193be9b0f875fb31f6f0bb 100644 (file)
@@ -3081,7 +3081,7 @@ static bool brcms_c_ps_allowed(struct brcms_c_info *wlc)
 static void brcms_c_statsupd(struct brcms_c_info *wlc)
 {
        int i;
-       struct macstat macstats;
+       struct macstat *macstats;
 #ifdef DEBUG
        u16 delta;
        u16 rxf0ovfl;
@@ -3092,31 +3092,31 @@ static void brcms_c_statsupd(struct brcms_c_info *wlc)
        if (!wlc->pub->up)
                return;
 
+       macstats = wlc->core->macstat_snapshot;
+
 #ifdef DEBUG
        /* save last rx fifo 0 overflow count */
-       rxf0ovfl = wlc->core->macstat_snapshot->rxf0ovfl;
+       rxf0ovfl = macstats->rxf0ovfl;
 
        /* save last tx fifo  underflow count */
        for (i = 0; i < NFIFO; i++)
-               txfunfl[i] = wlc->core->macstat_snapshot->txfunfl[i];
+               txfunfl[i] = macstats->txfunfl[i];
 #endif                         /* DEBUG */
 
        /* Read mac stats from contiguous shared memory */
-       brcms_b_copyfrom_objmem(wlc->hw, M_UCODE_MACSTAT, &macstats,
-                               sizeof(struct macstat), OBJADDR_SHM_SEL);
+       brcms_b_copyfrom_objmem(wlc->hw, M_UCODE_MACSTAT, macstats,
+                               sizeof(*macstats), OBJADDR_SHM_SEL);
 
 #ifdef DEBUG
        /* check for rx fifo 0 overflow */
-       delta = (u16) (wlc->core->macstat_snapshot->rxf0ovfl - rxf0ovfl);
+       delta = (u16)(macstats->rxf0ovfl - rxf0ovfl);
        if (delta)
                brcms_err(wlc->hw->d11core, "wl%d: %u rx fifo 0 overflows!\n",
                          wlc->pub->unit, delta);
 
        /* check for tx fifo underflows */
        for (i = 0; i < NFIFO; i++) {
-               delta =
-                   (u16) (wlc->core->macstat_snapshot->txfunfl[i] -
-                             txfunfl[i]);
+               delta = macstats->txfunfl[i] - txfunfl[i];
                if (delta)
                        brcms_err(wlc->hw->d11core,
                                  "wl%d: %u tx fifo %d underflows!\n",