|
@@ -349,9 +349,9 @@ void ieee80211_sta_set_rx_nss(struct sta_info *sta)
|
|
|
sta->sta.rx_nss = max_t(u8, 1, ht_rx_nss);
|
|
|
}
|
|
|
|
|
|
-void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
- struct sta_info *sta, u8 opmode,
|
|
|
- enum ieee80211_band band, bool nss_only)
|
|
|
+u32 __ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
+ struct sta_info *sta, u8 opmode,
|
|
|
+ enum ieee80211_band band, bool nss_only)
|
|
|
{
|
|
|
struct ieee80211_local *local = sdata->local;
|
|
|
struct ieee80211_supported_band *sband;
|
|
@@ -363,7 +363,7 @@ void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
|
|
|
/* ignore - no support for BF yet */
|
|
|
if (opmode & IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF)
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
|
|
|
nss = opmode & IEEE80211_OPMODE_NOTIF_RX_NSS_MASK;
|
|
|
nss >>= IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT;
|
|
@@ -375,7 +375,7 @@ void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
}
|
|
|
|
|
|
if (nss_only)
|
|
|
- goto change;
|
|
|
+ return changed;
|
|
|
|
|
|
switch (opmode & IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK) {
|
|
|
case IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ:
|
|
@@ -398,7 +398,19 @@ void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
changed |= IEEE80211_RC_BW_CHANGED;
|
|
|
}
|
|
|
|
|
|
- change:
|
|
|
- if (changed)
|
|
|
+ return changed;
|
|
|
+}
|
|
|
+
|
|
|
+void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
|
|
|
+ struct sta_info *sta, u8 opmode,
|
|
|
+ enum ieee80211_band band, bool nss_only)
|
|
|
+{
|
|
|
+ struct ieee80211_local *local = sdata->local;
|
|
|
+ struct ieee80211_supported_band *sband = local->hw.wiphy->bands[band];
|
|
|
+
|
|
|
+ u32 changed = __ieee80211_vht_handle_opmode(sdata, sta, opmode,
|
|
|
+ band, nss_only);
|
|
|
+
|
|
|
+ if (changed > 0)
|
|
|
rate_control_rate_update(local, sband, sta, changed);
|
|
|
}
|