net: wireless: bcmdhd: Fill station_info packet fields
authorDmitry Shmidt <dimitrysh@google.com>
Fri, 27 Jul 2012 01:02:38 +0000 (18:02 -0700)
committerDmitry Shmidt <dimitrysh@google.com>
Fri, 27 Jul 2012 17:04:44 +0000 (10:04 -0700)
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
drivers/net/wireless/bcmdhd/wl_cfg80211.c

index 2365bdd4a540a09c2a47e20810b9c11bf2a7249b..b10a5efff0ac0e09c8d9177229fb41e56dc44800 100644 (file)
@@ -2999,6 +2999,7 @@ wl_cfg80211_get_station(struct wiphy *wiphy, struct net_device *dev,
                        sta->idle * 1000));
 #endif
        } else if (wl_get_mode_by_netdev(wl, dev) == WL_MODE_BSS) {
+               get_pktcnt_t pktcnt;
                u8 *curmacp = wl_read_prof(wl, dev, WL_PROF_BSSID);
                err = -ENODEV;
                if (!wl_get_drv_status(wl, CONNECTED, dev) ||
@@ -3035,6 +3036,19 @@ wl_cfg80211_get_station(struct wiphy *wiphy, struct net_device *dev,
                sinfo->signal = rssi;
                WL_DBG(("RSSI %d dBm\n", rssi));
 
+               err = wldev_ioctl(dev, WLC_GET_PKTCNTS, &pktcnt,
+                                 sizeof(pktcnt), false);
+               if (!err) {
+                       sinfo->filled |= (STATION_INFO_RX_PACKETS |
+                                         STATION_INFO_RX_DROP_MISC |
+                                         STATION_INFO_TX_PACKETS |
+                                         STATION_INFO_TX_FAILED);
+                       sinfo->rx_packets = pktcnt.rx_good_pkt;
+                       sinfo->rx_dropped_misc = pktcnt.rx_bad_pkt;
+                       sinfo->tx_packets = pktcnt.tx_good_pkt;
+                       sinfo->tx_failed  = pktcnt.tx_bad_pkt;
+               }
+
 get_station_err:
                if (err && (err != -ETIMEDOUT) && (err != -EIO)) {
                        /* Disconnect due to zero BSSID or error to get RSSI */