summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-4965.c
diff options
context:
space:
mode:
authorRon Rindjunsky <ron.rindjunsky@intel.com>2007-11-26 16:14:40 +0200
committerDavid S. Miller <davem@davemloft.net>2008-01-28 15:05:44 -0800
commit67d620357a186adc0f4e7d1f5b095ea2c77e7072 (patch)
treed5ee39e9837d01aefdccfb8fc084b561f8fa7367 /drivers/net/wireless/iwlwifi/iwl-4965.c
parentfd105e79d19439d29a6561178fb5fe511e141f6b (diff)
iwlwifi: 802.11n comply HT add station flow with mac80211 framework
This patch conforms the addition of a new station to the iwlwifi station table according to the new mac80211's HT framework Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 2724208aca7..55d61000e34 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -4617,39 +4617,33 @@ void iwl4965_set_rxon_ht(struct iwl4965_priv *priv, struct iwl_ht_info *ht_info)
return;
}
-void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index)
+void iwl4965_set_ht_add_station(struct iwl4965_priv *priv, u8 index,
+ struct ieee80211_ht_info *sta_ht_inf)
{
__le32 sta_flags;
- struct sta_ht_info *ht_info = &priv->current_assoc_ht;
- priv->current_channel_width = IWL_CHANNEL_WIDTH_20MHZ;
- if (!ht_info->is_ht)
+ if (!sta_ht_inf || !sta_ht_inf->ht_supported)
goto done;
sta_flags = priv->stations[index].sta.station_flags;
- if (ht_info->tx_mimo_ps_mode == IWL_MIMO_PS_DYNAMIC)
+ if (((sta_ht_inf->cap & IEEE80211_HT_CAP_MIMO_PS >> 2))
+ == IWL_MIMO_PS_DYNAMIC)
sta_flags |= STA_FLG_RTS_MIMO_PROT_MSK;
else
sta_flags &= ~STA_FLG_RTS_MIMO_PROT_MSK;
sta_flags |= cpu_to_le32(
- (u32)ht_info->ampdu_factor << STA_FLG_MAX_AGG_SIZE_POS);
+ (u32)sta_ht_inf->ampdu_factor << STA_FLG_MAX_AGG_SIZE_POS);
sta_flags |= cpu_to_le32(
- (u32)ht_info->mpdu_density << STA_FLG_AGG_MPDU_DENSITY_POS);
-
- sta_flags &= (~STA_FLG_FAT_EN_MSK);
- ht_info->tx_chan_width = IWL_CHANNEL_WIDTH_20MHZ;
- ht_info->chan_width_cap = IWL_CHANNEL_WIDTH_20MHZ;
+ (u32)sta_ht_inf->ampdu_density << STA_FLG_AGG_MPDU_DENSITY_POS);
- if (iwl4965_is_fat_tx_allowed(priv, ht_info)) {
+ if (iwl4965_is_fat_tx_allowed(priv, sta_ht_inf))
sta_flags |= STA_FLG_FAT_EN_MSK;
- ht_info->chan_width_cap = IWL_CHANNEL_WIDTH_40MHZ;
- if (ht_info->supported_chan_width == IWL_CHANNEL_WIDTH_40MHZ)
- ht_info->tx_chan_width = IWL_CHANNEL_WIDTH_40MHZ;
- }
- priv->current_channel_width = ht_info->tx_chan_width;
+ else
+ sta_flags &= (~STA_FLG_FAT_EN_MSK);
+
priv->stations[index].sta.station_flags = sta_flags;
done:
return;