mac80211: re-organize the rx rate calculation logic
authorSaravana <saravanad@posedge.com>
Wed, 28 Nov 2012 12:59:38 +0000 (18:29 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 29 Nov 2012 14:33:05 +0000 (15:33 +0100)
Currently the logic to fill a struct rate_info with
a STA's last RX rate is accessible only in the cfg.c.
As the RX rate calculation might be needed elsewhere,
split this out into a separate function.

Signed-off-by: Saravana <saravanad@posedge.com>
[fix various whitespace issues, reword commit log]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c
net/mac80211/sta_info.h

index 97cf615..d645610 100644 (file)
@@ -398,6 +398,38 @@ void sta_set_rate_info_tx(struct sta_info *sta,
                rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
 }
 
+void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
+{
+       rinfo->flags = 0;
+
+       if (sta->last_rx_rate_flag & RX_FLAG_HT) {
+               rinfo->flags |= RATE_INFO_FLAGS_MCS;
+               rinfo->mcs = sta->last_rx_rate_idx;
+       } else if (sta->last_rx_rate_flag & RX_FLAG_VHT) {
+               rinfo->flags |= RATE_INFO_FLAGS_VHT_MCS;
+               rinfo->nss = sta->last_rx_rate_vht_nss;
+               rinfo->mcs = sta->last_rx_rate_idx;
+       } else {
+               struct ieee80211_supported_band *sband;
+
+               sband = sta->local->hw.wiphy->bands[
+                               ieee80211_get_sdata_band(sta->sdata)];
+               rinfo->legacy =
+                       sband->bitrates[sta->last_rx_rate_idx].bitrate;
+       }
+
+       if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
+               rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
+       if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
+               rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
+       if (sta->last_rx_rate_flag & RX_FLAG_80MHZ)
+               rinfo->flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH;
+       if (sta->last_rx_rate_flag & RX_FLAG_80P80MHZ)
+               rinfo->flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH;
+       if (sta->last_rx_rate_flag & RX_FLAG_160MHZ)
+               rinfo->flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH;
+}
+
 static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
 {
        struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -444,34 +476,7 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
        }
 
        sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
-
-       sinfo->rxrate.flags = 0;
-       if (sta->last_rx_rate_flag & RX_FLAG_HT) {
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_MCS;
-               sinfo->rxrate.mcs = sta->last_rx_rate_idx;
-       } else if (sta->last_rx_rate_flag & RX_FLAG_VHT) {
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_VHT_MCS;
-               sinfo->rxrate.nss = sta->last_rx_rate_vht_nss;
-               sinfo->rxrate.mcs = sta->last_rx_rate_idx;
-       } else {
-               struct ieee80211_supported_band *sband;
-
-               sband = sta->local->hw.wiphy->bands[
-                               ieee80211_get_sdata_band(sta->sdata)];
-               sinfo->rxrate.legacy =
-                       sband->bitrates[sta->last_rx_rate_idx].bitrate;
-       }
-
-       if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
-       if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
-       if (sta->last_rx_rate_flag & RX_FLAG_80MHZ)
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH;
-       if (sta->last_rx_rate_flag & RX_FLAG_80P80MHZ)
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH;
-       if (sta->last_rx_rate_flag & RX_FLAG_160MHZ)
-               sinfo->rxrate.flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH;
+       sta_set_rate_info_rx(sta, &sinfo->rxrate);
 
        if (ieee80211_vif_is_mesh(&sdata->vif)) {
 #ifdef CONFIG_MAC80211_MESH
index dce7693..1489bca 100644 (file)
@@ -554,6 +554,8 @@ int sta_info_flush(struct ieee80211_local *local,
 void sta_set_rate_info_tx(struct sta_info *sta,
                          const struct ieee80211_tx_rate *rate,
                          struct rate_info *rinfo);
+void sta_set_rate_info_rx(struct sta_info *sta,
+                         struct rate_info *rinfo);
 void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
                          unsigned long exp_time);