diff options
author | John W. Linville <linville@tuxdriver.com> | 2013-02-15 13:59:53 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-02-15 13:59:53 -0500 |
commit | ded652a67464b1fa66616954bc608ead9ec02fb6 (patch) | |
tree | 7b4bf1ab3723ed6a906393a5c9f129381cf8e592 /drivers/net | |
parent | b56e681b6210a635af4e4eb93ce81b4654851033 (diff) | |
parent | 93c78c5debeb9c7101ecc73347d4730c26a98c05 (diff) |
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'drivers/net')
20 files changed, 52 insertions, 96 deletions
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index 714558d1ba78..54150b6a39ae 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -1204,7 +1204,7 @@ static u8 ath_rc_build_ht_caps(struct ath_softc *sc, struct ieee80211_sta *sta) | |||
1204 | caps |= WLAN_RC_TS_FLAG | WLAN_RC_DS_FLAG; | 1204 | caps |= WLAN_RC_TS_FLAG | WLAN_RC_DS_FLAG; |
1205 | else if (sta->ht_cap.mcs.rx_mask[1]) | 1205 | else if (sta->ht_cap.mcs.rx_mask[1]) |
1206 | caps |= WLAN_RC_DS_FLAG; | 1206 | caps |= WLAN_RC_DS_FLAG; |
1207 | if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) { | 1207 | if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) { |
1208 | caps |= WLAN_RC_40_FLAG; | 1208 | caps |= WLAN_RC_40_FLAG; |
1209 | if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) | 1209 | if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) |
1210 | caps |= WLAN_RC_SGI_FLAG; | 1210 | caps |= WLAN_RC_SGI_FLAG; |
diff --git a/drivers/net/wireless/iwlegacy/4965-rs.c b/drivers/net/wireless/iwlegacy/4965-rs.c index f3b8e91aa3dc..e8324b5e5bfe 100644 --- a/drivers/net/wireless/iwlegacy/4965-rs.c +++ b/drivers/net/wireless/iwlegacy/4965-rs.c | |||
@@ -1183,8 +1183,7 @@ il4965_rs_switch_to_mimo2(struct il_priv *il, struct il_lq_sta *lq_sta, | |||
1183 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) | 1183 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) |
1184 | return -1; | 1184 | return -1; |
1185 | 1185 | ||
1186 | if (((sta->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >> 2) == | 1186 | if (sta->smps_mode == IEEE80211_SMPS_STATIC) |
1187 | WLAN_HT_CAP_SM_PS_STATIC) | ||
1188 | return -1; | 1187 | return -1; |
1189 | 1188 | ||
1190 | /* Need both Tx chains/antennas to support MIMO */ | 1189 | /* Need both Tx chains/antennas to support MIMO */ |
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c index 4ed2949f314d..e006ea831320 100644 --- a/drivers/net/wireless/iwlegacy/common.c +++ b/drivers/net/wireless/iwlegacy/common.c | |||
@@ -1830,32 +1830,30 @@ il_set_ht_add_station(struct il_priv *il, u8 idx, struct ieee80211_sta *sta) | |||
1830 | { | 1830 | { |
1831 | struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->ht_cap; | 1831 | struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->ht_cap; |
1832 | __le32 sta_flags; | 1832 | __le32 sta_flags; |
1833 | u8 mimo_ps_mode; | ||
1834 | 1833 | ||
1835 | if (!sta || !sta_ht_inf->ht_supported) | 1834 | if (!sta || !sta_ht_inf->ht_supported) |
1836 | goto done; | 1835 | goto done; |
1837 | 1836 | ||
1838 | mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_SM_PS) >> 2; | ||
1839 | D_ASSOC("spatial multiplexing power save mode: %s\n", | 1837 | D_ASSOC("spatial multiplexing power save mode: %s\n", |
1840 | (mimo_ps_mode == WLAN_HT_CAP_SM_PS_STATIC) ? "static" : | 1838 | (sta->smps_mode == IEEE80211_SMPS_STATIC) ? "static" : |
1841 | (mimo_ps_mode == WLAN_HT_CAP_SM_PS_DYNAMIC) ? "dynamic" : | 1839 | (sta->smps_mode == IEEE80211_SMPS_DYNAMIC) ? "dynamic" : |
1842 | "disabled"); | 1840 | "disabled"); |
1843 | 1841 | ||
1844 | sta_flags = il->stations[idx].sta.station_flags; | 1842 | sta_flags = il->stations[idx].sta.station_flags; |
1845 | 1843 | ||
1846 | sta_flags &= ~(STA_FLG_RTS_MIMO_PROT_MSK | STA_FLG_MIMO_DIS_MSK); | 1844 | sta_flags &= ~(STA_FLG_RTS_MIMO_PROT_MSK | STA_FLG_MIMO_DIS_MSK); |
1847 | 1845 | ||
1848 | switch (mimo_ps_mode) { | 1846 | switch (sta->smps_mode) { |
1849 | case WLAN_HT_CAP_SM_PS_STATIC: | 1847 | case IEEE80211_SMPS_STATIC: |
1850 | sta_flags |= STA_FLG_MIMO_DIS_MSK; | 1848 | sta_flags |= STA_FLG_MIMO_DIS_MSK; |
1851 | break; | 1849 | break; |
1852 | case WLAN_HT_CAP_SM_PS_DYNAMIC: | 1850 | case IEEE80211_SMPS_DYNAMIC: |
1853 | sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK; | 1851 | sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK; |
1854 | break; | 1852 | break; |
1855 | case WLAN_HT_CAP_SM_PS_DISABLED: | 1853 | case IEEE80211_SMPS_OFF: |
1856 | break; | 1854 | break; |
1857 | default: | 1855 | default: |
1858 | IL_WARN("Invalid MIMO PS mode %d\n", mimo_ps_mode); | 1856 | IL_WARN("Invalid MIMO PS mode %d\n", sta->smps_mode); |
1859 | break; | 1857 | break; |
1860 | } | 1858 | } |
1861 | 1859 | ||
diff --git a/drivers/net/wireless/iwlwifi/dvm/agn.h b/drivers/net/wireless/iwlwifi/dvm/agn.h index f41ae79e6bc0..41ec27cb6efe 100644 --- a/drivers/net/wireless/iwlwifi/dvm/agn.h +++ b/drivers/net/wireless/iwlwifi/dvm/agn.h | |||
@@ -338,7 +338,7 @@ int iwl_sta_update_ht(struct iwl_priv *priv, struct iwl_rxon_context *ctx, | |||
338 | 338 | ||
339 | bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv, | 339 | bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv, |
340 | struct iwl_rxon_context *ctx, | 340 | struct iwl_rxon_context *ctx, |
341 | struct ieee80211_sta_ht_cap *ht_cap); | 341 | struct ieee80211_sta *sta); |
342 | 342 | ||
343 | static inline int iwl_sta_id(struct ieee80211_sta *sta) | 343 | static inline int iwl_sta_id(struct ieee80211_sta *sta) |
344 | { | 344 | { |
diff --git a/drivers/net/wireless/iwlwifi/dvm/rs.c b/drivers/net/wireless/iwlwifi/dvm/rs.c index a131227c49e9..abe304267261 100644 --- a/drivers/net/wireless/iwlwifi/dvm/rs.c +++ b/drivers/net/wireless/iwlwifi/dvm/rs.c | |||
@@ -1289,8 +1289,7 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv, | |||
1289 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) | 1289 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) |
1290 | return -1; | 1290 | return -1; |
1291 | 1291 | ||
1292 | if (((sta->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >> 2) | 1292 | if (sta->smps_mode == IEEE80211_SMPS_STATIC) |
1293 | == WLAN_HT_CAP_SM_PS_STATIC) | ||
1294 | return -1; | 1293 | return -1; |
1295 | 1294 | ||
1296 | /* Need both Tx chains/antennas to support MIMO */ | 1295 | /* Need both Tx chains/antennas to support MIMO */ |
@@ -1305,7 +1304,7 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv, | |||
1305 | tbl->max_search = IWL_MAX_SEARCH; | 1304 | tbl->max_search = IWL_MAX_SEARCH; |
1306 | rate_mask = lq_sta->active_mimo2_rate; | 1305 | rate_mask = lq_sta->active_mimo2_rate; |
1307 | 1306 | ||
1308 | if (iwl_is_ht40_tx_allowed(priv, ctx, &sta->ht_cap)) | 1307 | if (iwl_is_ht40_tx_allowed(priv, ctx, sta)) |
1309 | tbl->is_ht40 = 1; | 1308 | tbl->is_ht40 = 1; |
1310 | else | 1309 | else |
1311 | tbl->is_ht40 = 0; | 1310 | tbl->is_ht40 = 0; |
@@ -1345,8 +1344,7 @@ static int rs_switch_to_mimo3(struct iwl_priv *priv, | |||
1345 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) | 1344 | if (!conf_is_ht(conf) || !sta->ht_cap.ht_supported) |
1346 | return -1; | 1345 | return -1; |
1347 | 1346 | ||
1348 | if (((sta->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >> 2) | 1347 | if (sta->smps_mode == IEEE80211_SMPS_STATIC) |
1349 | == WLAN_HT_CAP_SM_PS_STATIC) | ||
1350 | return -1; | 1348 | return -1; |
1351 | 1349 | ||
1352 | /* Need both Tx chains/antennas to support MIMO */ | 1350 | /* Need both Tx chains/antennas to support MIMO */ |
@@ -1361,7 +1359,7 @@ static int rs_switch_to_mimo3(struct iwl_priv *priv, | |||
1361 | tbl->max_search = IWL_MAX_11N_MIMO3_SEARCH; | 1359 | tbl->max_search = IWL_MAX_11N_MIMO3_SEARCH; |
1362 | rate_mask = lq_sta->active_mimo3_rate; | 1360 | rate_mask = lq_sta->active_mimo3_rate; |
1363 | 1361 | ||
1364 | if (iwl_is_ht40_tx_allowed(priv, ctx, &sta->ht_cap)) | 1362 | if (iwl_is_ht40_tx_allowed(priv, ctx, sta)) |
1365 | tbl->is_ht40 = 1; | 1363 | tbl->is_ht40 = 1; |
1366 | else | 1364 | else |
1367 | tbl->is_ht40 = 0; | 1365 | tbl->is_ht40 = 0; |
@@ -1410,7 +1408,7 @@ static int rs_switch_to_siso(struct iwl_priv *priv, | |||
1410 | tbl->max_search = IWL_MAX_SEARCH; | 1408 | tbl->max_search = IWL_MAX_SEARCH; |
1411 | rate_mask = lq_sta->active_siso_rate; | 1409 | rate_mask = lq_sta->active_siso_rate; |
1412 | 1410 | ||
1413 | if (iwl_is_ht40_tx_allowed(priv, ctx, &sta->ht_cap)) | 1411 | if (iwl_is_ht40_tx_allowed(priv, ctx, sta)) |
1414 | tbl->is_ht40 = 1; | 1412 | tbl->is_ht40 = 1; |
1415 | else | 1413 | else |
1416 | tbl->is_ht40 = 0; | 1414 | tbl->is_ht40 = 0; |
diff --git a/drivers/net/wireless/iwlwifi/dvm/sta.c b/drivers/net/wireless/iwlwifi/dvm/sta.c index 2d33760a9dc2..94ef33838bc6 100644 --- a/drivers/net/wireless/iwlwifi/dvm/sta.c +++ b/drivers/net/wireless/iwlwifi/dvm/sta.c | |||
@@ -173,7 +173,7 @@ int iwl_send_add_sta(struct iwl_priv *priv, | |||
173 | 173 | ||
174 | bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv, | 174 | bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv, |
175 | struct iwl_rxon_context *ctx, | 175 | struct iwl_rxon_context *ctx, |
176 | struct ieee80211_sta_ht_cap *ht_cap) | 176 | struct ieee80211_sta *sta) |
177 | { | 177 | { |
178 | if (!ctx->ht.enabled || !ctx->ht.is_40mhz) | 178 | if (!ctx->ht.enabled || !ctx->ht.is_40mhz) |
179 | return false; | 179 | return false; |
@@ -183,20 +183,11 @@ bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv, | |||
183 | return false; | 183 | return false; |
184 | #endif | 184 | #endif |
185 | 185 | ||
186 | /* | 186 | /* special case for RXON */ |
187 | * Remainder of this function checks ht_cap, but if it's | 187 | if (!sta) |
188 | * NULL then we can do HT40 (special case for RXON) | ||
189 | */ | ||
190 | if (!ht_cap) | ||
191 | return true; | 188 | return true; |
192 | 189 | ||
193 | if (!ht_cap->ht_supported) | 190 | return sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
194 | return false; | ||
195 | |||
196 | if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)) | ||
197 | return false; | ||
198 | |||
199 | return true; | ||
200 | } | 191 | } |
201 | 192 | ||
202 | static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, | 193 | static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, |
@@ -205,7 +196,6 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, | |||
205 | __le32 *flags, __le32 *mask) | 196 | __le32 *flags, __le32 *mask) |
206 | { | 197 | { |
207 | struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->ht_cap; | 198 | struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->ht_cap; |
208 | u8 mimo_ps_mode; | ||
209 | 199 | ||
210 | *mask = STA_FLG_RTS_MIMO_PROT_MSK | | 200 | *mask = STA_FLG_RTS_MIMO_PROT_MSK | |
211 | STA_FLG_MIMO_DIS_MSK | | 201 | STA_FLG_MIMO_DIS_MSK | |
@@ -217,26 +207,24 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, | |||
217 | if (!sta || !sta_ht_inf->ht_supported) | 207 | if (!sta || !sta_ht_inf->ht_supported) |
218 | return; | 208 | return; |
219 | 209 | ||
220 | mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_SM_PS) >> 2; | ||
221 | |||
222 | IWL_DEBUG_INFO(priv, "STA %pM SM PS mode: %s\n", | 210 | IWL_DEBUG_INFO(priv, "STA %pM SM PS mode: %s\n", |
223 | sta->addr, | 211 | sta->addr, |
224 | (mimo_ps_mode == WLAN_HT_CAP_SM_PS_STATIC) ? | 212 | (sta->smps_mode == IEEE80211_SMPS_STATIC) ? |
225 | "static" : | 213 | "static" : |
226 | (mimo_ps_mode == WLAN_HT_CAP_SM_PS_DYNAMIC) ? | 214 | (sta->smps_mode == IEEE80211_SMPS_DYNAMIC) ? |
227 | "dynamic" : "disabled"); | 215 | "dynamic" : "disabled"); |
228 | 216 | ||
229 | switch (mimo_ps_mode) { | 217 | switch (sta->smps_mode) { |
230 | case WLAN_HT_CAP_SM_PS_STATIC: | 218 | case IEEE80211_SMPS_STATIC: |
231 | *flags |= STA_FLG_MIMO_DIS_MSK; | 219 | *flags |= STA_FLG_MIMO_DIS_MSK; |
232 | break; | 220 | break; |
233 | case WLAN_HT_CAP_SM_PS_DYNAMIC: | 221 | case IEEE80211_SMPS_DYNAMIC: |
234 | *flags |= STA_FLG_RTS_MIMO_PROT_MSK; | 222 | *flags |= STA_FLG_RTS_MIMO_PROT_MSK; |
235 | break; | 223 | break; |
236 | case WLAN_HT_CAP_SM_PS_DISABLED: | 224 | case IEEE80211_SMPS_OFF: |
237 | break; | 225 | break; |
238 | default: | 226 | default: |
239 | IWL_WARN(priv, "Invalid MIMO PS mode %d\n", mimo_ps_mode); | 227 | IWL_WARN(priv, "Invalid MIMO PS mode %d\n", sta->smps_mode); |
240 | break; | 228 | break; |
241 | } | 229 | } |
242 | 230 | ||
@@ -246,7 +234,7 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, | |||
246 | *flags |= cpu_to_le32( | 234 | *flags |= cpu_to_le32( |
247 | (u32)sta_ht_inf->ampdu_density << STA_FLG_AGG_MPDU_DENSITY_POS); | 235 | (u32)sta_ht_inf->ampdu_density << STA_FLG_AGG_MPDU_DENSITY_POS); |
248 | 236 | ||
249 | if (iwl_is_ht40_tx_allowed(priv, ctx, &sta->ht_cap)) | 237 | if (iwl_is_ht40_tx_allowed(priv, ctx, sta)) |
250 | *flags |= STA_FLG_HT40_EN_MSK; | 238 | *flags |= STA_FLG_HT40_EN_MSK; |
251 | } | 239 | } |
252 | 240 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c index 60a4291ca221..56b636d9ab30 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rs.c +++ b/drivers/net/wireless/iwlwifi/mvm/rs.c | |||
@@ -1209,23 +1209,9 @@ static s32 rs_get_best_rate(struct iwl_mvm *mvm, | |||
1209 | return new_rate; | 1209 | return new_rate; |
1210 | } | 1210 | } |
1211 | 1211 | ||
1212 | static bool iwl_is_ht40_tx_allowed(struct iwl_mvm *mvm, | 1212 | static bool iwl_is_ht40_tx_allowed(struct ieee80211_sta *sta) |
1213 | struct ieee80211_sta_ht_cap *ht_cap) | ||
1214 | { | 1213 | { |
1215 | /* | 1214 | return sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
1216 | * Remainder of this function checks ht_cap, but if it's | ||
1217 | * NULL then we can do HT40 (special case for RXON) | ||
1218 | */ | ||
1219 | if (!ht_cap) | ||
1220 | return true; | ||
1221 | |||
1222 | if (!ht_cap->ht_supported) | ||
1223 | return false; | ||
1224 | |||
1225 | if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)) | ||
1226 | return false; | ||
1227 | |||
1228 | return true; | ||
1229 | } | 1215 | } |
1230 | 1216 | ||
1231 | /* | 1217 | /* |
@@ -1243,8 +1229,7 @@ static int rs_switch_to_mimo2(struct iwl_mvm *mvm, | |||
1243 | if (!sta->ht_cap.ht_supported) | 1229 | if (!sta->ht_cap.ht_supported) |
1244 | return -1; | 1230 | return -1; |
1245 | 1231 | ||
1246 | if (((sta->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >> 2) | 1232 | if (sta->smps_mode == IEEE80211_SMPS_STATIC) |
1247 | == WLAN_HT_CAP_SM_PS_STATIC) | ||
1248 | return -1; | 1233 | return -1; |
1249 | 1234 | ||
1250 | /* Need both Tx chains/antennas to support MIMO */ | 1235 | /* Need both Tx chains/antennas to support MIMO */ |
@@ -1258,7 +1243,7 @@ static int rs_switch_to_mimo2(struct iwl_mvm *mvm, | |||
1258 | tbl->max_search = IWL_MAX_SEARCH; | 1243 | tbl->max_search = IWL_MAX_SEARCH; |
1259 | rate_mask = lq_sta->active_mimo2_rate; | 1244 | rate_mask = lq_sta->active_mimo2_rate; |
1260 | 1245 | ||
1261 | if (iwl_is_ht40_tx_allowed(mvm, &sta->ht_cap)) | 1246 | if (iwl_is_ht40_tx_allowed(sta)) |
1262 | tbl->is_ht40 = 1; | 1247 | tbl->is_ht40 = 1; |
1263 | else | 1248 | else |
1264 | tbl->is_ht40 = 0; | 1249 | tbl->is_ht40 = 0; |
@@ -1296,8 +1281,7 @@ static int rs_switch_to_mimo3(struct iwl_mvm *mvm, | |||
1296 | if (!sta->ht_cap.ht_supported) | 1281 | if (!sta->ht_cap.ht_supported) |
1297 | return -1; | 1282 | return -1; |
1298 | 1283 | ||
1299 | if (((sta->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >> 2) | 1284 | if (sta->smps_mode == IEEE80211_SMPS_STATIC) |
1300 | == WLAN_HT_CAP_SM_PS_STATIC) | ||
1301 | return -1; | 1285 | return -1; |
1302 | 1286 | ||
1303 | /* Need both Tx chains/antennas to support MIMO */ | 1287 | /* Need both Tx chains/antennas to support MIMO */ |
@@ -1311,7 +1295,7 @@ static int rs_switch_to_mimo3(struct iwl_mvm *mvm, | |||
1311 | tbl->max_search = IWL_MAX_11N_MIMO3_SEARCH; | 1295 | tbl->max_search = IWL_MAX_11N_MIMO3_SEARCH; |
1312 | rate_mask = lq_sta->active_mimo3_rate; | 1296 | rate_mask = lq_sta->active_mimo3_rate; |
1313 | 1297 | ||
1314 | if (iwl_is_ht40_tx_allowed(mvm, &sta->ht_cap)) | 1298 | if (iwl_is_ht40_tx_allowed(sta)) |
1315 | tbl->is_ht40 = 1; | 1299 | tbl->is_ht40 = 1; |
1316 | else | 1300 | else |
1317 | tbl->is_ht40 = 0; | 1301 | tbl->is_ht40 = 0; |
@@ -1356,7 +1340,7 @@ static int rs_switch_to_siso(struct iwl_mvm *mvm, | |||
1356 | tbl->max_search = IWL_MAX_SEARCH; | 1340 | tbl->max_search = IWL_MAX_SEARCH; |
1357 | rate_mask = lq_sta->active_siso_rate; | 1341 | rate_mask = lq_sta->active_siso_rate; |
1358 | 1342 | ||
1359 | if (iwl_is_ht40_tx_allowed(mvm, &sta->ht_cap)) | 1343 | if (iwl_is_ht40_tx_allowed(sta)) |
1360 | tbl->is_ht40 = 1; | 1344 | tbl->is_ht40 = 1; |
1361 | else | 1345 | else |
1362 | tbl->is_ht40 = 0; | 1346 | tbl->is_ht40 = 0; |
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index b73e497fe770..cffdf4fbf161 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -2247,6 +2247,7 @@ static int __init init_mac80211_hwsim(void) | |||
2247 | /* ask mac80211 to reserve space for magic */ | 2247 | /* ask mac80211 to reserve space for magic */ |
2248 | hw->vif_data_size = sizeof(struct hwsim_vif_priv); | 2248 | hw->vif_data_size = sizeof(struct hwsim_vif_priv); |
2249 | hw->sta_data_size = sizeof(struct hwsim_sta_priv); | 2249 | hw->sta_data_size = sizeof(struct hwsim_sta_priv); |
2250 | hw->chanctx_data_size = sizeof(struct hwsim_chanctx_priv); | ||
2250 | 2251 | ||
2251 | memcpy(data->channels_2ghz, hwsim_channels_2ghz, | 2252 | memcpy(data->channels_2ghz, hwsim_channels_2ghz, |
2252 | sizeof(hwsim_channels_2ghz)); | 2253 | sizeof(hwsim_channels_2ghz)); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index e26ec9d817cf..4d91795dc6a2 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c | |||
@@ -354,10 +354,7 @@ static void rt2x00queue_create_tx_descriptor_ht(struct rt2x00_dev *rt2x00dev, | |||
354 | * when using more then one tx stream (>MCS7). | 354 | * when using more then one tx stream (>MCS7). |
355 | */ | 355 | */ |
356 | if (sta && txdesc->u.ht.mcs > 7 && | 356 | if (sta && txdesc->u.ht.mcs > 7 && |
357 | ((sta->ht_cap.cap & | 357 | sta->smps_mode == IEEE80211_SMPS_DYNAMIC) |
358 | IEEE80211_HT_CAP_SM_PS) >> | ||
359 | IEEE80211_HT_CAP_SM_PS_SHIFT) == | ||
360 | WLAN_HT_CAP_SM_PS_DYNAMIC) | ||
361 | __set_bit(ENTRY_TXD_HT_MIMO_PS, &txdesc->flags); | 358 | __set_bit(ENTRY_TXD_HT_MIMO_PS, &txdesc->flags); |
362 | } else { | 359 | } else { |
363 | txdesc->u.ht.mcs = rt2x00_get_rate_mcs(hwrate->mcs); | 360 | txdesc->u.ht.mcs = rt2x00_get_rate_mcs(hwrate->mcs); |
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c index 0f8b05185eda..99c5cea3fe21 100644 --- a/drivers/net/wireless/rtlwifi/base.c +++ b/drivers/net/wireless/rtlwifi/base.c | |||
@@ -523,8 +523,8 @@ static void _rtl_query_shortgi(struct ieee80211_hw *hw, | |||
523 | if (mac->opmode == NL80211_IFTYPE_STATION) | 523 | if (mac->opmode == NL80211_IFTYPE_STATION) |
524 | bw_40 = mac->bw_40; | 524 | bw_40 = mac->bw_40; |
525 | else if (mac->opmode == NL80211_IFTYPE_AP || | 525 | else if (mac->opmode == NL80211_IFTYPE_AP || |
526 | mac->opmode == NL80211_IFTYPE_ADHOC) | 526 | mac->opmode == NL80211_IFTYPE_ADHOC) |
527 | bw_40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40; | 527 | bw_40 = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
528 | 528 | ||
529 | if (bw_40 && sgi_40) | 529 | if (bw_40 && sgi_40) |
530 | tcb_desc->use_shortgi = true; | 530 | tcb_desc->use_shortgi = true; |
@@ -634,8 +634,7 @@ static void _rtl_query_bandwidth_mode(struct ieee80211_hw *hw, | |||
634 | return; | 634 | return; |
635 | if (mac->opmode == NL80211_IFTYPE_AP || | 635 | if (mac->opmode == NL80211_IFTYPE_AP || |
636 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 636 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
637 | if (!(sta->ht_cap.ht_supported) || | 637 | if (sta->bandwidth == IEEE80211_STA_RX_BW_20) |
638 | !(sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)) | ||
639 | return; | 638 | return; |
640 | } else if (mac->opmode == NL80211_IFTYPE_STATION) { | 639 | } else if (mac->opmode == NL80211_IFTYPE_STATION) { |
641 | if (!mac->bw_40 || !(sta->ht_cap.ht_supported)) | 640 | if (!mac->bw_40 || !(sta->ht_cap.ht_supported)) |
diff --git a/drivers/net/wireless/rtlwifi/rc.c b/drivers/net/wireless/rtlwifi/rc.c index 6ad8bb758961..f9f059dadb73 100644 --- a/drivers/net/wireless/rtlwifi/rc.c +++ b/drivers/net/wireless/rtlwifi/rc.c | |||
@@ -116,9 +116,8 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv, | |||
116 | if (txrc->short_preamble) | 116 | if (txrc->short_preamble) |
117 | rate->flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE; | 117 | rate->flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE; |
118 | if (mac->opmode == NL80211_IFTYPE_AP || | 118 | if (mac->opmode == NL80211_IFTYPE_AP || |
119 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 119 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
120 | if (sta && (sta->ht_cap.cap & | 120 | if (sta && (sta->bandwidth >= IEEE80211_STA_RX_BW_40)) |
121 | IEEE80211_HT_CAP_SUP_WIDTH_20_40)) | ||
122 | rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH; | 121 | rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH; |
123 | } else { | 122 | } else { |
124 | if (mac->bw_40) | 123 | if (mac->bw_40) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c index d1f34f6ffbdf..1b65db7fd651 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c | |||
@@ -1846,9 +1846,9 @@ static void rtl92ce_update_hal_rate_mask(struct ieee80211_hw *hw, | |||
1846 | struct rtl_sta_info *sta_entry = NULL; | 1846 | struct rtl_sta_info *sta_entry = NULL; |
1847 | u32 ratr_bitmap; | 1847 | u32 ratr_bitmap; |
1848 | u8 ratr_index; | 1848 | u8 ratr_index; |
1849 | u8 curtxbw_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) | 1849 | u8 curtxbw_40mhz = (sta->bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0; |
1850 | ? 1 : 0; | 1850 | u8 curshortgi_40mhz = curtxbw_40mhz && |
1851 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? | 1851 | (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
1852 | 1 : 0; | 1852 | 1 : 0; |
1853 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | 1853 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? |
1854 | 1 : 0; | 1854 | 1 : 0; |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c index da0e9022a99a..b9b1a6e0b16e 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | |||
@@ -626,8 +626,7 @@ void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw, | |||
626 | } else if (mac->opmode == NL80211_IFTYPE_AP || | 626 | } else if (mac->opmode == NL80211_IFTYPE_AP || |
627 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 627 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
628 | if (sta) | 628 | if (sta) |
629 | bw_40 = sta->ht_cap.cap & | 629 | bw_40 = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
630 | IEEE80211_HT_CAP_SUP_WIDTH_20_40; | ||
631 | } | 630 | } |
632 | 631 | ||
633 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; | 632 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/rtlwifi/rtl8192de/hw.c index f4051f4f0390..aa5b42521bb4 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192de/hw.c | |||
@@ -1970,8 +1970,7 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw, | |||
1970 | struct rtl_sta_info *sta_entry = NULL; | 1970 | struct rtl_sta_info *sta_entry = NULL; |
1971 | u32 ratr_bitmap; | 1971 | u32 ratr_bitmap; |
1972 | u8 ratr_index; | 1972 | u8 ratr_index; |
1973 | u8 curtxbw_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) | 1973 | u8 curtxbw_40mhz = (sta->bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0; |
1974 | ? 1 : 0; | ||
1975 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? | 1974 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
1976 | 1 : 0; | 1975 | 1 : 0; |
1977 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | 1976 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c index cdb570ffb4b5..941080e03c06 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c | |||
@@ -574,8 +574,7 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, | |||
574 | } else if (mac->opmode == NL80211_IFTYPE_AP || | 574 | } else if (mac->opmode == NL80211_IFTYPE_AP || |
575 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 575 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
576 | if (sta) | 576 | if (sta) |
577 | bw_40 = sta->ht_cap.cap & | 577 | bw_40 = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
578 | IEEE80211_HT_CAP_SUP_WIDTH_20_40; | ||
579 | } | 578 | } |
580 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; | 579 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; |
581 | rtl_get_tcb_desc(hw, info, sta, skb, ptcb_desc); | 580 | rtl_get_tcb_desc(hw, info, sta, skb, ptcb_desc); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c index 28526a7361f5..084e7773bce2 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c | |||
@@ -2085,8 +2085,7 @@ static void rtl92se_update_hal_rate_mask(struct ieee80211_hw *hw, | |||
2085 | struct rtl_sta_info *sta_entry = NULL; | 2085 | struct rtl_sta_info *sta_entry = NULL; |
2086 | u32 ratr_bitmap; | 2086 | u32 ratr_bitmap; |
2087 | u8 ratr_index = 0; | 2087 | u8 ratr_index = 0; |
2088 | u8 curtxbw_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) | 2088 | u8 curtxbw_40mhz = (sta->bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0; |
2089 | ? 1 : 0; | ||
2090 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? | 2089 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
2091 | 1 : 0; | 2090 | 1 : 0; |
2092 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | 2091 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c index f8431a3c2c9d..7b0a2e75b8b8 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c | |||
@@ -621,8 +621,7 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw, | |||
621 | } else if (mac->opmode == NL80211_IFTYPE_AP || | 621 | } else if (mac->opmode == NL80211_IFTYPE_AP || |
622 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 622 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
623 | if (sta) | 623 | if (sta) |
624 | bw_40 = sta->ht_cap.cap & | 624 | bw_40 = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
625 | IEEE80211_HT_CAP_SUP_WIDTH_20_40; | ||
626 | } | 625 | } |
627 | 626 | ||
628 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; | 627 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c index 149804816ac4..9a0c71c2e15e 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | |||
@@ -1866,8 +1866,7 @@ static void rtl8723ae_update_hal_rate_mask(struct ieee80211_hw *hw, | |||
1866 | struct rtl_sta_info *sta_entry = NULL; | 1866 | struct rtl_sta_info *sta_entry = NULL; |
1867 | u32 ratr_bitmap; | 1867 | u32 ratr_bitmap; |
1868 | u8 ratr_index; | 1868 | u8 ratr_index; |
1869 | u8 curtxbw_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) | 1869 | u8 curtxbw_40mhz = (sta->bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0; |
1870 | ? 1 : 0; | ||
1871 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? | 1870 | u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? |
1872 | 1 : 0; | 1871 | 1 : 0; |
1873 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? | 1872 | u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c index b1fd2b328abf..ac081297db50 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c | |||
@@ -395,8 +395,7 @@ void rtl8723ae_tx_fill_desc(struct ieee80211_hw *hw, | |||
395 | } else if (mac->opmode == NL80211_IFTYPE_AP || | 395 | } else if (mac->opmode == NL80211_IFTYPE_AP || |
396 | mac->opmode == NL80211_IFTYPE_ADHOC) { | 396 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
397 | if (sta) | 397 | if (sta) |
398 | bw_40 = sta->ht_cap.cap & | 398 | bw_40 = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
399 | IEEE80211_HT_CAP_SUP_WIDTH_20_40; | ||
400 | } | 399 | } |
401 | 400 | ||
402 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; | 401 | seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4; |
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c index a10b7a7a215a..da3ef1b10a9c 100644 --- a/drivers/net/wireless/ti/wl18xx/main.c +++ b/drivers/net/wireless/ti/wl18xx/main.c | |||
@@ -1374,7 +1374,7 @@ static void wl18xx_sta_rc_update(struct wl1271 *wl, | |||
1374 | struct ieee80211_sta *sta, | 1374 | struct ieee80211_sta *sta, |
1375 | u32 changed) | 1375 | u32 changed) |
1376 | { | 1376 | { |
1377 | bool wide = sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40; | 1377 | bool wide = sta->bandwidth >= IEEE80211_STA_RX_BW_40; |
1378 | 1378 | ||
1379 | wl1271_debug(DEBUG_MAC80211, "mac80211 sta_rc_update wide %d", wide); | 1379 | wl1271_debug(DEBUG_MAC80211, "mac80211 sta_rc_update wide %d", wide); |
1380 | 1380 | ||