cfg80211: refactor cfg80211_calculate_bitrate()
authorJohannes Berg <johannes.berg@intel.com>
Wed, 15 Feb 2017 14:02:08 +0000 (15:02 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 6 Mar 2017 08:21:44 +0000 (09:21 +0100)
This function contains the HT calculations, which makes no
sense - split that out into a separate function. As a side
effect, this makes the 60G flag independent from HT_MCS so
remove the MCS one from wil6210 (also deleting a duplicate
assignment.)

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/ath/wil6210/cfg80211.c
net/wireless/util.c

index 83155b5..79d1070 100644 (file)
@@ -178,9 +178,8 @@ int wil_cid_fill_sinfo(struct wil6210_priv *wil, int cid,
                        BIT(NL80211_STA_INFO_RX_DROP_MISC) |
                        BIT(NL80211_STA_INFO_TX_FAILED);
 
-       sinfo->txrate.flags = RATE_INFO_FLAGS_MCS | RATE_INFO_FLAGS_60G;
+       sinfo->txrate.flags = RATE_INFO_FLAGS_60G;
        sinfo->txrate.mcs = le16_to_cpu(reply.evt.bf_mcs);
-       sinfo->rxrate.flags = RATE_INFO_FLAGS_MCS | RATE_INFO_FLAGS_60G;
        sinfo->rxrate.mcs = stats->last_mcs_rx;
        sinfo->rx_bytes = stats->rx_bytes;
        sinfo->rx_packets = stats->rx_packets;
index daef500..737c9c2 100644 (file)
@@ -1097,6 +1097,35 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
        return err;
 }
 
+static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate)
+{
+       int modulation, streams, bitrate;
+
+       /* the formula below does only work for MCS values smaller than 32 */
+       if (WARN_ON_ONCE(rate->mcs >= 32))
+               return 0;
+
+       modulation = rate->mcs & 7;
+       streams = (rate->mcs >> 3) + 1;
+
+       bitrate = (rate->bw == RATE_INFO_BW_40) ? 13500000 : 6500000;
+
+       if (modulation < 4)
+               bitrate *= (modulation + 1);
+       else if (modulation == 4)
+               bitrate *= (modulation + 2);
+       else
+               bitrate *= (modulation + 3);
+
+       bitrate *= streams;
+
+       if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
+               bitrate = (bitrate / 9) * 10;
+
+       /* do NOT round down here */
+       return (bitrate + 50000) / 100000;
+}
+
 static u32 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
 {
        static const u32 __mcs2bitrate[] = {
@@ -1230,39 +1259,14 @@ static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
 
 u32 cfg80211_calculate_bitrate(struct rate_info *rate)
 {
-       int modulation, streams, bitrate;
-
-       if (!(rate->flags & RATE_INFO_FLAGS_MCS) &&
-           !(rate->flags & RATE_INFO_FLAGS_VHT_MCS))
-               return rate->legacy;
+       if (rate->flags & RATE_INFO_FLAGS_MCS)
+               return cfg80211_calculate_bitrate_ht(rate);
        if (rate->flags & RATE_INFO_FLAGS_60G)
                return cfg80211_calculate_bitrate_60g(rate);
        if (rate->flags & RATE_INFO_FLAGS_VHT_MCS)
                return cfg80211_calculate_bitrate_vht(rate);
 
-       /* the formula below does only work for MCS values smaller than 32 */
-       if (WARN_ON_ONCE(rate->mcs >= 32))
-               return 0;
-
-       modulation = rate->mcs & 7;
-       streams = (rate->mcs >> 3) + 1;
-
-       bitrate = (rate->bw == RATE_INFO_BW_40) ? 13500000 : 6500000;
-
-       if (modulation < 4)
-               bitrate *= (modulation + 1);
-       else if (modulation == 4)
-               bitrate *= (modulation + 2);
-       else
-               bitrate *= (modulation + 3);
-
-       bitrate *= streams;
-
-       if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
-               bitrate = (bitrate / 9) * 10;
-
-       /* do NOT round down here */
-       return (bitrate + 50000) / 100000;
+       return rate->legacy;
 }
 EXPORT_SYMBOL(cfg80211_calculate_bitrate);