|
@@ -4658,17 +4658,30 @@ void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index,
|
|
|
struct ieee80211_ht_info *sta_ht_inf)
|
|
|
{
|
|
|
__le32 sta_flags;
|
|
|
+ u8 mimo_ps_mode;
|
|
|
|
|
|
if (!sta_ht_inf || !sta_ht_inf->ht_supported)
|
|
|
goto done;
|
|
|
|
|
|
+ mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_MIMO_PS) >> 2;
|
|
|
+
|
|
|
sta_flags = priv->stations[index].sta.station_flags;
|
|
|
|
|
|
- if (((sta_ht_inf->cap & IEEE80211_HT_CAP_MIMO_PS >> 2))
|
|
|
- == IWL_MIMO_PS_DYNAMIC)
|
|
|
+ sta_flags &= ~(STA_FLG_RTS_MIMO_PROT_MSK | STA_FLG_MIMO_DIS_MSK);
|
|
|
+
|
|
|
+ switch (mimo_ps_mode) {
|
|
|
+ case WLAN_HT_CAP_MIMO_PS_STATIC:
|
|
|
+ sta_flags |= STA_FLG_MIMO_DIS_MSK;
|
|
|
+ break;
|
|
|
+ case WLAN_HT_CAP_MIMO_PS_DYNAMIC:
|
|
|
sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK;
|
|
|
- else
|
|
|
- sta_flags &= ~STA_FLG_RTS_MIMO_PROT_MSK;
|
|
|
+ break;
|
|
|
+ case WLAN_HT_CAP_MIMO_PS_DISABLED:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ IWL_WARNING("Invalid MIMO PS mode %d", mimo_ps_mode);
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
sta_flags |= cpu_to_le32(
|
|
|
(u32)sta_ht_inf->ampdu_factor << STA_FLG_MAX_AGG_SIZE_POS);
|
|
@@ -4679,7 +4692,7 @@ void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index,
|
|
|
if (iwl4965_is_fat_tx_allowed(priv, sta_ht_inf))
|
|
|
sta_flags |= STA_FLG_FAT_EN_MSK;
|
|
|
else
|
|
|
- sta_flags &= (~STA_FLG_FAT_EN_MSK);
|
|
|
+ sta_flags &= ~STA_FLG_FAT_EN_MSK;
|
|
|
|
|
|
priv->stations[index].sta.station_flags = sta_flags;
|
|
|
done:
|