|
@@ -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++)
|