diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-sta.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.c | 21 | 
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index 5798fe49c77..44ab03a12e4 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c @@ -719,6 +719,14 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,  {  	unsigned long flags;  	int ret = 0; +	__le16 key_flags = 0; + +	key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK); +	key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); +	key_flags &= ~STA_KEY_FLG_INVALID; + +	if (sta_id == priv->hw_params.bcast_sta_id) +		key_flags |= STA_KEY_MULTICAST_MSK;  	keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;  	keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; @@ -738,6 +746,9 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,  	WARN(priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET,  		"no space for a new key"); +	priv->stations[sta_id].sta.key.key_flags = key_flags; + +  	/* This copy is acutally not needed: we get the key with each TX */  	memcpy(priv->stations[sta_id].keyinfo.key, keyconf->key, 16); @@ -754,9 +765,7 @@ void iwl_update_tkip_key(struct iwl_priv *priv,  {  	u8 sta_id = IWL_INVALID_STATION;  	unsigned long flags; -	__le16 key_flags = 0;  	int i; -	DECLARE_MAC_BUF(mac);  	sta_id = iwl_find_station(priv, addr);  	if (sta_id == IWL_INVALID_STATION) { @@ -771,16 +780,8 @@ void iwl_update_tkip_key(struct iwl_priv *priv,  		return;  	} -	key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK); -	key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); -	key_flags &= ~STA_KEY_FLG_INVALID; - -	if (sta_id == priv->hw_params.bcast_sta_id) -		key_flags |= STA_KEY_MULTICAST_MSK; -  	spin_lock_irqsave(&priv->sta_lock, flags); -	priv->stations[sta_id].sta.key.key_flags = key_flags;  	priv->stations[sta_id].sta.key.tkip_rx_tsc_byte2 = (u8) iv32;  	for (i = 0; i < 5; i++)  |