mac80211: only bother printing highest data rate on debugfs if its set
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Mon, 7 Dec 2009 20:57:50 +0000 (15:57 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 22 Dec 2009 18:56:02 +0000 (13:56 -0500)
IEEE-802.11n spec says the RX highest data rate field does
not specify the highest supported RX data rate if its not set.
Ignore it if not set then. Refer to section 7.3.56.4

Cc: johannes@sipsolutions.net
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
include/linux/ieee80211.h
net/mac80211/debugfs_sta.c

index e8d43d0ff2c3d6a306101fda08c80a8326ec37e5..098bedcde9bba5ae5f496437f1549f77443df101 100644 (file)
@@ -775,7 +775,10 @@ struct ieee80211_bar {
 /**
  * struct ieee80211_mcs_info - MCS information
  * @rx_mask: RX mask
- * @rx_highest: highest supported RX rate
+ * @rx_highest: highest supported RX rate. If set represents
+ *     the highest supported RX data rate in units of 1 Mbps.
+ *     If this field is 0 this value should not be used to
+ *     consider the highest RX data rate supported.
  * @tx_params: TX parameters
  */
 struct ieee80211_mcs_info {
index c833b6ce9902653602f770ef9f89ba33f9ff93aa..0d4a759ba72c1ae0e60129dd3d095002f0da9eb9 100644 (file)
@@ -218,11 +218,19 @@ static ssize_t sta_ht_capa_read(struct file *file, char __user *userbuf,
                p += scnprintf(p, sizeof(buf)+buf-p, "ampdu factor/density: %d/%d\n",
                                htc->ampdu_factor, htc->ampdu_density);
                p += scnprintf(p, sizeof(buf)+buf-p, "MCS mask:");
+
                for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
                        p += scnprintf(p, sizeof(buf)+buf-p, " %.2x",
                                        htc->mcs.rx_mask[i]);
-               p += scnprintf(p, sizeof(buf)+buf-p, "\nMCS rx highest: %d\n",
-                               le16_to_cpu(htc->mcs.rx_highest));
+               p += scnprintf(p, sizeof(buf)+buf-p, "\n");
+
+               /* If not set this is meaningless */
+               if (le16_to_cpu(htc->mcs.rx_highest)) {
+                       p += scnprintf(p, sizeof(buf)+buf-p,
+                                      "MCS rx highest: %d Mbps\n",
+                                      le16_to_cpu(htc->mcs.rx_highest));
+               }
+
                p += scnprintf(p, sizeof(buf)+buf-p, "MCS tx params: %x\n",
                                htc->mcs.tx_params);
        }