From b66dad2d502080d05320b74f38d247bf1a9993fa Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 9 Jun 2014 15:16:50 +0200 Subject: [PATCH] staging: rtl8723au: Introduce rtw_do_join_network() Signed-off-by: Jes Sorensen Signed-off-by: Greg Kroah-Hartman --- .../staging/rtl8723au/core/rtw_ioctl_set.c | 2 - drivers/staging/rtl8723au/core/rtw_mlme.c | 46 +++++++++++-------- drivers/staging/rtl8723au/include/rtw_mlme.h | 2 + 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c index 28cfea53b175..d2ed9d15ad9d 100644 --- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c +++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c @@ -79,8 +79,6 @@ int rtw_do_join23a(struct rtw_adapter *padapter) select_ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv); if (select_ret == _SUCCESS) { pmlmepriv->to_join = false; - mod_timer(&pmlmepriv->assoc_timer, - jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); } else { if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { struct wlan_bssid_ex *pdev_network; diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c index 9248f4834d6f..4a146fbc86ca 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme.c @@ -739,8 +739,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) if (rtw_select_and_join_from_scanned_queue23a( pmlmepriv) == _SUCCESS) { - mod_timer(&pmlmepriv->assoc_timer, - jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); } else { pdev_network = &adapter->registrypriv.dev_network; pibss = adapter->registrypriv.dev_network.MacAddress; @@ -782,14 +780,10 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf) pmlmepriv->to_join = false; ret = rtw_select_and_join_from_scanned_queue23a( pmlmepriv); - if (ret == _SUCCESS) { - unsigned long e; - e = msecs_to_jiffies(MAX_JOIN_TIMEOUT); - mod_timer(&pmlmepriv->assoc_timer, jiffies + e); - } else if (ret == 2) {/* there is no need to wait */ + if (ret == 2) {/* there is no need to wait */ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING); rtw_indicate_connect23a(adapter); - } else { + } else if (ret != _SUCCESS) { DBG_8723A("try_to_join, but select scanning " "queue fail, to_roaming:%d\n", adapter->mlmepriv.to_roaming); @@ -1784,6 +1778,31 @@ exit: return candidate; } + +int rtw_do_join_network(struct rtw_adapter *adapter, + struct wlan_network *candidate) +{ + int ret; + + /* check for situation of _FW_LINKED */ + if (check_fwstate(&adapter->mlmepriv, _FW_LINKED)) { + DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__); + + rtw_disassoc_cmd23a(adapter, 0, true); + rtw_indicate_disconnect23a(adapter); + rtw_free_assoc_resources23a(adapter, 0); + } + set_fwstate(&adapter->mlmepriv, _FW_UNDER_LINKING); + + ret = rtw_joinbss_cmd23a(adapter, candidate); + + if (ret == _SUCCESS) + mod_timer(&adapter->mlmepriv.assoc_timer, + jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); + + return ret; +} + int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) { struct rtw_adapter *adapter; @@ -1804,16 +1823,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv) candidate->network.DSConfig); } - /* check for situation of _FW_LINKED */ - if (check_fwstate(pmlmepriv, _FW_LINKED)) { - DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__); - - rtw_disassoc_cmd23a(adapter, 0, true); - rtw_indicate_disconnect23a(adapter); - rtw_free_assoc_resources23a(adapter, 0); - } - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); - ret = rtw_joinbss_cmd23a(adapter, candidate); + ret = rtw_do_join_network(adapter, candidate); exit: return ret; diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h index c8e82bfb3f75..e48518f4b1bc 100644 --- a/drivers/staging/rtl8723au/include/rtw_mlme.h +++ b/drivers/staging/rtl8723au/include/rtw_mlme.h @@ -240,6 +240,8 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *adapter); void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv); +int rtw_do_join_network(struct rtw_adapter *adapter, + struct wlan_network *candidate); int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv); int rtw_set_key23a(struct rtw_adapter *adapter, struct security_priv *psecuritypriv, int keyid, u8 set_tx); -- 2.30.2