diff options
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/cmdevt.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/join.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_ioctl.c | 11 |
5 files changed, 22 insertions, 10 deletions
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index a460fb0cc503..6a81101bab44 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c | |||
@@ -873,6 +873,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid, | |||
873 | priv->sec_info.wpa2_enabled = false; | 873 | priv->sec_info.wpa2_enabled = false; |
874 | priv->wep_key_curr_index = 0; | 874 | priv->wep_key_curr_index = 0; |
875 | priv->sec_info.encryption_mode = 0; | 875 | priv->sec_info.encryption_mode = 0; |
876 | priv->sec_info.is_authtype_auto = 0; | ||
876 | ret = mwifiex_set_encode(priv, NULL, 0, 0, 1); | 877 | ret = mwifiex_set_encode(priv, NULL, 0, 0, 1); |
877 | 878 | ||
878 | if (mode == NL80211_IFTYPE_ADHOC) { | 879 | if (mode == NL80211_IFTYPE_ADHOC) { |
@@ -894,11 +895,12 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid, | |||
894 | } | 895 | } |
895 | 896 | ||
896 | /* Now handle infra mode. "sme" is valid for infra mode only */ | 897 | /* Now handle infra mode. "sme" is valid for infra mode only */ |
897 | if (sme->auth_type == NL80211_AUTHTYPE_AUTOMATIC | 898 | if (sme->auth_type == NL80211_AUTHTYPE_AUTOMATIC) { |
898 | || sme->auth_type == NL80211_AUTHTYPE_OPEN_SYSTEM) | ||
899 | auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM; | 899 | auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM; |
900 | else if (sme->auth_type == NL80211_AUTHTYPE_SHARED_KEY) | 900 | priv->sec_info.is_authtype_auto = 1; |
901 | auth_type = NL80211_AUTHTYPE_SHARED_KEY; | 901 | } else { |
902 | auth_type = sme->auth_type; | ||
903 | } | ||
902 | 904 | ||
903 | if (sme->crypto.n_ciphers_pairwise) { | 905 | if (sme->crypto.n_ciphers_pairwise) { |
904 | priv->sec_info.encryption_mode = | 906 | priv->sec_info.encryption_mode = |
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c index 6623db69e157..c82eb7ff2fa2 100644 --- a/drivers/net/wireless/mwifiex/cmdevt.c +++ b/drivers/net/wireless/mwifiex/cmdevt.c | |||
@@ -771,7 +771,7 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) | |||
771 | 771 | ||
772 | /* Check init command response */ | 772 | /* Check init command response */ |
773 | if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) { | 773 | if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) { |
774 | if (ret == -1) { | 774 | if (ret) { |
775 | dev_err(adapter->dev, "%s: cmd %#x failed during " | 775 | dev_err(adapter->dev, "%s: cmd %#x failed during " |
776 | "initialization\n", __func__, cmdresp_no); | 776 | "initialization\n", __func__, cmdresp_no); |
777 | mwifiex_init_fw_complete(adapter); | 777 | mwifiex_init_fw_complete(adapter); |
@@ -781,10 +781,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) | |||
781 | } | 781 | } |
782 | 782 | ||
783 | if (adapter->curr_cmd) { | 783 | if (adapter->curr_cmd) { |
784 | if (adapter->curr_cmd->wait_q_enabled && (!ret)) | 784 | if (adapter->curr_cmd->wait_q_enabled) |
785 | adapter->cmd_wait_q.status = 0; | 785 | adapter->cmd_wait_q.status = ret; |
786 | else if (adapter->curr_cmd->wait_q_enabled && (ret == -1)) | ||
787 | adapter->cmd_wait_q.status = -1; | ||
788 | 786 | ||
789 | /* Clean up and put current command back to cmd_free_q */ | 787 | /* Clean up and put current command back to cmd_free_q */ |
790 | mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd); | 788 | mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd); |
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c index ee439fc2f4f3..5c95e4839004 100644 --- a/drivers/net/wireless/mwifiex/join.c +++ b/drivers/net/wireless/mwifiex/join.c | |||
@@ -585,7 +585,7 @@ int mwifiex_ret_802_11_associate(struct mwifiex_private *priv, | |||
585 | le16_to_cpu(assoc_rsp->cap_info_bitmap), | 585 | le16_to_cpu(assoc_rsp->cap_info_bitmap), |
586 | le16_to_cpu(assoc_rsp->a_id)); | 586 | le16_to_cpu(assoc_rsp->a_id)); |
587 | 587 | ||
588 | ret = -1; | 588 | ret = le16_to_cpu(assoc_rsp->status_code); |
589 | goto done; | 589 | goto done; |
590 | } | 590 | } |
591 | 591 | ||
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h index 4c8621706278..dddb5563398a 100644 --- a/drivers/net/wireless/mwifiex/main.h +++ b/drivers/net/wireless/mwifiex/main.h | |||
@@ -219,6 +219,7 @@ struct mwifiex_802_11_security { | |||
219 | u8 wapi_key_on; | 219 | u8 wapi_key_on; |
220 | u8 wep_enabled; | 220 | u8 wep_enabled; |
221 | u32 authentication_mode; | 221 | u32 authentication_mode; |
222 | u8 is_authtype_auto; | ||
222 | u32 encryption_mode; | 223 | u32 encryption_mode; |
223 | }; | 224 | }; |
224 | 225 | ||
diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c index 866026ecca44..e10161f5894c 100644 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c | |||
@@ -249,6 +249,17 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss, | |||
249 | * application retrieval */ | 249 | * application retrieval */ |
250 | priv->assoc_rsp_size = 0; | 250 | priv->assoc_rsp_size = 0; |
251 | ret = mwifiex_associate(priv, bss_desc); | 251 | ret = mwifiex_associate(priv, bss_desc); |
252 | |||
253 | /* If auth type is auto and association fails using open mode, | ||
254 | * try to connect using shared mode */ | ||
255 | if (ret == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG && | ||
256 | priv->sec_info.is_authtype_auto && | ||
257 | priv->sec_info.wep_enabled) { | ||
258 | priv->sec_info.authentication_mode = | ||
259 | NL80211_AUTHTYPE_SHARED_KEY; | ||
260 | ret = mwifiex_associate(priv, bss_desc); | ||
261 | } | ||
262 | |||
252 | if (bss) | 263 | if (bss) |
253 | cfg80211_put_bss(bss); | 264 | cfg80211_put_bss(bss); |
254 | } else { | 265 | } else { |