aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex
diff options
context:
space:
mode:
authorAmitkumar Karwar <akarwar@marvell.com>2013-01-17 20:41:57 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-01-22 16:01:30 -0500
commit7532c7d0138a4984eb0c8b12b9c310cf8a6d6977 (patch)
treec71314f99ea5969e43e1880b34f1e92b91f9e752 /drivers/net/wireless/mwifiex
parent84e9e8ebd369679a958200a8baca96aafb2393bb (diff)
mwifiex: correction in status codes used for association failure
When AP responds with appropriate status code, we forward that code correctly to cfg80211. But sometimes when there is no response from AP, our firmware uses proprietary status codes. We will map authentication timeout to WLAN_STATUS_AUTH_TIMEOUT and other proprietary codes to WLAN_STATUS_UNSPECIFIED_FAILURE. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex')
-rw-r--r--drivers/net/wireless/mwifiex/fw.h3
-rw-r--r--drivers/net/wireless/mwifiex/join.c20
2 files changed, 18 insertions, 5 deletions
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index 41c85dd78084..ebe2f6a7984c 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -330,6 +330,9 @@ enum P2P_MODES {
330#define HOST_SLEEP_CFG_GPIO_DEF 0xff 330#define HOST_SLEEP_CFG_GPIO_DEF 0xff
331#define HOST_SLEEP_CFG_GAP_DEF 0 331#define HOST_SLEEP_CFG_GAP_DEF 0
332 332
333#define MWIFIEX_TIMEOUT_FOR_AP_RESP 0xfffc
334#define MWIFIEX_STATUS_CODE_AUTH_TIMEOUT 2
335
333#define CMD_F_HOSTCMD (1 << 0) 336#define CMD_F_HOSTCMD (1 << 0)
334#define CMD_F_CANCELED (1 << 1) 337#define CMD_F_CANCELED (1 << 1)
335 338
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c
index 3c7cabeddf76..893d809ba83c 100644
--- a/drivers/net/wireless/mwifiex/join.c
+++ b/drivers/net/wireless/mwifiex/join.c
@@ -615,23 +615,33 @@ int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
615 struct ieee_types_assoc_rsp *assoc_rsp; 615 struct ieee_types_assoc_rsp *assoc_rsp;
616 struct mwifiex_bssdescriptor *bss_desc; 616 struct mwifiex_bssdescriptor *bss_desc;
617 u8 enable_data = true; 617 u8 enable_data = true;
618 u16 cap_info, status_code;
618 619
619 assoc_rsp = (struct ieee_types_assoc_rsp *) &resp->params; 620 assoc_rsp = (struct ieee_types_assoc_rsp *) &resp->params;
620 621
622 cap_info = le16_to_cpu(assoc_rsp->cap_info_bitmap);
623 status_code = le16_to_cpu(assoc_rsp->status_code);
624
621 priv->assoc_rsp_size = min(le16_to_cpu(resp->size) - S_DS_GEN, 625 priv->assoc_rsp_size = min(le16_to_cpu(resp->size) - S_DS_GEN,
622 sizeof(priv->assoc_rsp_buf)); 626 sizeof(priv->assoc_rsp_buf));
623 627
624 memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size); 628 memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size);
625 629
626 if (le16_to_cpu(assoc_rsp->status_code)) { 630 if (status_code) {
627 priv->adapter->dbg.num_cmd_assoc_failure++; 631 priv->adapter->dbg.num_cmd_assoc_failure++;
628 dev_err(priv->adapter->dev, 632 dev_err(priv->adapter->dev,
629 "ASSOC_RESP: failed, status code=%d err=%#x a_id=%#x\n", 633 "ASSOC_RESP: failed, status code=%d err=%#x a_id=%#x\n",
630 le16_to_cpu(assoc_rsp->status_code), 634 status_code, cap_info, le16_to_cpu(assoc_rsp->a_id));
631 le16_to_cpu(assoc_rsp->cap_info_bitmap), 635
632 le16_to_cpu(assoc_rsp->a_id)); 636 if (cap_info == MWIFIEX_TIMEOUT_FOR_AP_RESP) {
637 if (status_code == MWIFIEX_STATUS_CODE_AUTH_TIMEOUT)
638 ret = WLAN_STATUS_AUTH_TIMEOUT;
639 else
640 ret = WLAN_STATUS_UNSPECIFIED_FAILURE;
641 } else {
642 ret = status_code;
643 }
633 644
634 ret = le16_to_cpu(assoc_rsp->status_code);
635 goto done; 645 goto done;
636 } 646 }
637 647