From c19ef22c2ca14cdc2f91cc41167424b0ca848101 Mon Sep 17 00:00:00 2001 From: mukul sharma Date: Fri, 31 Jul 2015 18:34:42 +0530 Subject: qcacld-2.0: Avoid beacon/probe rsp while waiting for set link rsp In join suspend link callback, lim is setting mlm state to WT_JOIN_BEACON_STATE and sending set link request to fwr. But before set link rsp receive, host is receiving beacon / probe rsp. Hence lim is announcing join success and moving to different mlm state. When Set link rsp comes it will not be handled, Due to this vdev start will not be send to firmware. As part of this fix mlm state will be moved to WT_JOIN_BEACON_STATE after receiving set link response in host. Change-Id: Icb325b4c6967644df5c5089010663a5d159804e6 CRs-Fixed: 880797 --- CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 40 ++++++++++---------------- CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 11 +++++++ 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index f48889ee3ffb..7dee298a7118 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -2075,26 +2075,24 @@ void lim_post_join_set_link_state_callback(tpAniSirGlobal mac, goto failure; } - if (session_entry->limMlmState == eLIM_MLM_WT_JOIN_BEACON_STATE) { - chan_num = session_entry->currentOperChannel; - sec_chan_offset = session_entry->htSecondaryChannelOffset; - /* - * store the channel switch sessionEntry in the lim - * global variable - */ - session_entry->channelChangeReasonCode = + chan_num = session_entry->currentOperChannel; + sec_chan_offset = session_entry->htSecondaryChannelOffset; + /* + * store the channel switch sessionEntry in the lim + * global variable + */ + session_entry->channelChangeReasonCode = LIM_SWITCH_CHANNEL_JOIN; #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR) - session_entry->pLimMlmReassocRetryReq = NULL; + session_entry->pLimMlmReassocRetryReq = NULL; #endif - limLog(mac, LOG1, FL("[limProcessMlmJoinReq]: suspend link on sessionid: %d setting channel to: %d with secChanOffset:%d and maxtxPower: %d"), - session_entry->peSessionId, chan_num, - sec_chan_offset, - session_entry->maxTxPower); - limSetChannel(mac, chan_num, sec_chan_offset, - session_entry->maxTxPower, - session_entry->peSessionId); - } + limLog(mac, LOG1, FL("[limProcessMlmJoinReq]: suspend link on sessionid: %d setting channel to: %d with secChanOffset:%d and maxtxPower: %d"), + session_entry->peSessionId, chan_num, + sec_chan_offset, + session_entry->maxTxPower); + limSetChannel(mac, chan_num, sec_chan_offset, + session_entry->maxTxPower, + session_entry->peSessionId); return; failure: @@ -2142,14 +2140,6 @@ limProcessMlmPostJoinSuspendLink(tpAniSirGlobal pMac, eHalStatus status, tANI_U3 limLog(pMac, LOGE, FL("Sessionid %d Suspend link(NOTIFY_BSS) failed. " "still proceeding with join"),psessionEntry->peSessionId); } - psessionEntry->limPrevMlmState = psessionEntry->limMlmState; - psessionEntry->limMlmState = eLIM_MLM_WT_JOIN_BEACON_STATE; - MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState)); - - limLog(pMac, LOG1, FL("Sessionid %d prev lim state %d new lim state %d " - "systemrole = %d"), psessionEntry->peSessionId, - psessionEntry->limPrevMlmState, - psessionEntry->limMlmState, GET_LIM_SYSTEM_ROLE(psessionEntry)); limDeactivateAndChangeTimer(pMac, eLIM_JOIN_FAIL_TIMER); diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 862184ffa060..b124fca023b7 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -3872,6 +3872,17 @@ static void limProcessSwitchChannelJoinReq(tpAniSirGlobal pMac, tpPESession pses } } + psessionEntry->limPrevMlmState = psessionEntry->limMlmState; + psessionEntry->limMlmState = eLIM_MLM_WT_JOIN_BEACON_STATE; + MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, + psessionEntry->peSessionId, psessionEntry->limMlmState)); + + limLog(pMac, LOG1, + FL("Sessionid %d prev lim state %d new lim state %d systemrole %d"), + psessionEntry->peSessionId, + psessionEntry->limPrevMlmState, + psessionEntry->limMlmState, GET_LIM_SYSTEM_ROLE(psessionEntry)); + /* Update the lim global gLimTriggerBackgroundScanDuringQuietBss */ if(wlan_cfgGetInt(pMac, WNI_CFG_TRIG_STA_BK_SCAN, &val) != eSIR_SUCCESS) limLog(pMac, LOGP, FL("failed to get WNI_CFG_TRIG_STA_BK_SCAN cfg value!")); -- cgit v1.2.3