diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sta.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index a62a03236ebb..d39bfac8740a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c | |||
@@ -834,7 +834,9 @@ static int iwl_set_wep_dynamic_key_info(struct iwl_priv *priv, | |||
834 | { | 834 | { |
835 | unsigned long flags; | 835 | unsigned long flags; |
836 | __le16 key_flags = 0; | 836 | __le16 key_flags = 0; |
837 | int ret; | 837 | struct iwl_addsta_cmd sta_cmd; |
838 | |||
839 | lockdep_assert_held(&priv->mutex); | ||
838 | 840 | ||
839 | keyconf->flags &= ~IEEE80211_KEY_FLAG_GENERATE_IV; | 841 | keyconf->flags &= ~IEEE80211_KEY_FLAG_GENERATE_IV; |
840 | 842 | ||
@@ -874,11 +876,10 @@ static int iwl_set_wep_dynamic_key_info(struct iwl_priv *priv, | |||
874 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; | 876 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; |
875 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; | 877 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; |
876 | 878 | ||
877 | ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC); | 879 | memcpy(&sta_cmd, &priv->stations[sta_id].sta, sizeof(struct iwl_addsta_cmd)); |
878 | |||
879 | spin_unlock_irqrestore(&priv->sta_lock, flags); | 880 | spin_unlock_irqrestore(&priv->sta_lock, flags); |
880 | 881 | ||
881 | return ret; | 882 | return iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); |
882 | } | 883 | } |
883 | 884 | ||
884 | static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv, | 885 | static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv, |
@@ -887,7 +888,9 @@ static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv, | |||
887 | { | 888 | { |
888 | unsigned long flags; | 889 | unsigned long flags; |
889 | __le16 key_flags = 0; | 890 | __le16 key_flags = 0; |
890 | int ret; | 891 | struct iwl_addsta_cmd sta_cmd; |
892 | |||
893 | lockdep_assert_held(&priv->mutex); | ||
891 | 894 | ||
892 | key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK); | 895 | key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK); |
893 | key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); | 896 | key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); |
@@ -922,11 +925,10 @@ static int iwl_set_ccmp_dynamic_key_info(struct iwl_priv *priv, | |||
922 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; | 925 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; |
923 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; | 926 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; |
924 | 927 | ||
925 | ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC); | 928 | memcpy(&sta_cmd, &priv->stations[sta_id].sta, sizeof(struct iwl_addsta_cmd)); |
926 | |||
927 | spin_unlock_irqrestore(&priv->sta_lock, flags); | 929 | spin_unlock_irqrestore(&priv->sta_lock, flags); |
928 | 930 | ||
929 | return ret; | 931 | return iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); |
930 | } | 932 | } |
931 | 933 | ||
932 | static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv, | 934 | static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv, |
@@ -1016,9 +1018,11 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1016 | u8 sta_id) | 1018 | u8 sta_id) |
1017 | { | 1019 | { |
1018 | unsigned long flags; | 1020 | unsigned long flags; |
1019 | int ret = 0; | ||
1020 | u16 key_flags; | 1021 | u16 key_flags; |
1021 | u8 keyidx; | 1022 | u8 keyidx; |
1023 | struct iwl_addsta_cmd sta_cmd; | ||
1024 | |||
1025 | lockdep_assert_held(&priv->mutex); | ||
1022 | 1026 | ||
1023 | priv->key_mapping_key--; | 1027 | priv->key_mapping_key--; |
1024 | 1028 | ||
@@ -1065,9 +1069,10 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1065 | spin_unlock_irqrestore(&priv->sta_lock, flags); | 1069 | spin_unlock_irqrestore(&priv->sta_lock, flags); |
1066 | return 0; | 1070 | return 0; |
1067 | } | 1071 | } |
1068 | ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC); | 1072 | memcpy(&sta_cmd, &priv->stations[sta_id].sta, sizeof(struct iwl_addsta_cmd)); |
1069 | spin_unlock_irqrestore(&priv->sta_lock, flags); | 1073 | spin_unlock_irqrestore(&priv->sta_lock, flags); |
1070 | return ret; | 1074 | |
1075 | return iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); | ||
1071 | } | 1076 | } |
1072 | EXPORT_SYMBOL(iwl_remove_dynamic_key); | 1077 | EXPORT_SYMBOL(iwl_remove_dynamic_key); |
1073 | 1078 | ||
@@ -1076,6 +1081,8 @@ int iwl_set_dynamic_key(struct iwl_priv *priv, | |||
1076 | { | 1081 | { |
1077 | int ret; | 1082 | int ret; |
1078 | 1083 | ||
1084 | lockdep_assert_held(&priv->mutex); | ||
1085 | |||
1079 | priv->key_mapping_key++; | 1086 | priv->key_mapping_key++; |
1080 | keyconf->hw_key_idx = HW_KEY_DYNAMIC; | 1087 | keyconf->hw_key_idx = HW_KEY_DYNAMIC; |
1081 | 1088 | ||