diff options
Diffstat (limited to 'drivers/net/wireless/iwmc3200wifi/main.c')
-rw-r--r-- | drivers/net/wireless/iwmc3200wifi/main.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwmc3200wifi/main.c b/drivers/net/wireless/iwmc3200wifi/main.c index 3147fe7b5130..952701e6127e 100644 --- a/drivers/net/wireless/iwmc3200wifi/main.c +++ b/drivers/net/wireless/iwmc3200wifi/main.c | |||
@@ -207,6 +207,33 @@ static void iwm_reset_worker(struct work_struct *work) | |||
207 | mutex_unlock(&iwm->mutex); | 207 | mutex_unlock(&iwm->mutex); |
208 | } | 208 | } |
209 | 209 | ||
210 | static void iwm_auth_retry_worker(struct work_struct *work) | ||
211 | { | ||
212 | struct iwm_priv *iwm; | ||
213 | int i, ret; | ||
214 | |||
215 | iwm = container_of(work, struct iwm_priv, auth_retry_worker); | ||
216 | if (iwm->umac_profile_active) { | ||
217 | ret = iwm_invalidate_mlme_profile(iwm); | ||
218 | if (ret < 0) | ||
219 | return; | ||
220 | } | ||
221 | |||
222 | iwm->umac_profile->sec.auth_type = UMAC_AUTH_TYPE_LEGACY_PSK; | ||
223 | |||
224 | ret = iwm_send_mlme_profile(iwm); | ||
225 | if (ret < 0) | ||
226 | return; | ||
227 | |||
228 | for (i = 0; i < IWM_NUM_KEYS; i++) | ||
229 | if (iwm->keys[i].key_len) | ||
230 | iwm_set_key(iwm, 0, &iwm->keys[i]); | ||
231 | |||
232 | iwm_set_tx_key(iwm, iwm->default_key); | ||
233 | } | ||
234 | |||
235 | |||
236 | |||
210 | static void iwm_watchdog(unsigned long data) | 237 | static void iwm_watchdog(unsigned long data) |
211 | { | 238 | { |
212 | struct iwm_priv *iwm = (struct iwm_priv *)data; | 239 | struct iwm_priv *iwm = (struct iwm_priv *)data; |
@@ -240,6 +267,7 @@ int iwm_priv_init(struct iwm_priv *iwm) | |||
240 | INIT_DELAYED_WORK(&iwm->disconnect, iwm_disconnect_work); | 267 | INIT_DELAYED_WORK(&iwm->disconnect, iwm_disconnect_work); |
241 | INIT_DELAYED_WORK(&iwm->ct_kill_delay, iwm_ct_kill_work); | 268 | INIT_DELAYED_WORK(&iwm->ct_kill_delay, iwm_ct_kill_work); |
242 | INIT_WORK(&iwm->reset_worker, iwm_reset_worker); | 269 | INIT_WORK(&iwm->reset_worker, iwm_reset_worker); |
270 | INIT_WORK(&iwm->auth_retry_worker, iwm_auth_retry_worker); | ||
243 | INIT_LIST_HEAD(&iwm->bss_list); | 271 | INIT_LIST_HEAD(&iwm->bss_list); |
244 | 272 | ||
245 | skb_queue_head_init(&iwm->rx_list); | 273 | skb_queue_head_init(&iwm->rx_list); |