mwifiex: fix Tx data rate display issue
authorAmitkumar Karwar <akarwar@marvell.com>
Tue, 27 Sep 2011 03:37:25 +0000 (20:37 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 30 Sep 2011 19:57:00 +0000 (15:57 -0400)
"iw dev mlan0 link" shows wrong data rate, because data rate is
not sent properly to cfg80211 stack. Also stack is not updated
with mcs and Tx data flags information.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/cfg80211.c

index a7c773e..e61a6c0 100644 (file)
@@ -543,12 +543,28 @@ mwifiex_dump_station_info(struct mwifiex_private *priv,
                ret = -EFAULT;
        }
 
+       /*
+        * Bit 0 in tx_htinfo indicates that current Tx rate is 11n rate. Valid
+        * MCS index values for us are 0 to 7.
+        */
+       if ((priv->tx_htinfo & BIT(0)) && (priv->tx_rate < 8)) {
+               sinfo->txrate.mcs = priv->tx_rate;
+               sinfo->txrate.flags |= RATE_INFO_FLAGS_MCS;
+               /* 40MHz rate */
+               if (priv->tx_htinfo & BIT(1))
+                       sinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
+               /* SGI enabled */
+               if (priv->tx_htinfo & BIT(2))
+                       sinfo->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
+       }
+
        sinfo->rx_bytes = priv->stats.rx_bytes;
        sinfo->tx_bytes = priv->stats.tx_bytes;
        sinfo->rx_packets = priv->stats.rx_packets;
        sinfo->tx_packets = priv->stats.tx_packets;
        sinfo->signal = priv->qual_level;
-       sinfo->txrate.legacy = rate.rate;
+       /* bit rate is in 500 kb/s units. Convert it to 100kb/s units */
+       sinfo->txrate.legacy = rate.rate * 5;
 
        return ret;
 }