tANI_U32 limDeactivateMinChannelTimerDuringScan(tpAniSirGlobal pMac) { if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) && (pMac->lim.gLimHalScanState == eLIM_HAL_SCANNING_STATE)) { /** * Beacon/Probe Response is received during active scanning. * Deactivate MIN channel timer if running. */ limDeactivateAndChangeTimer(pMac,eLIM_MIN_CHANNEL_TIMER); MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, NO_SESSION, eLIM_MAX_CHANNEL_TIMER)); if (tx_timer_activate(&pMac->lim.limTimers.gLimMaxChannelTimer) == TX_TIMER_ERROR) { /// Could not activate max channel timer. // Log error limLog(pMac,LOGP, FL("could not activate max channel timer")); limCompleteMlmScan(pMac, eSIR_SME_RESOURCES_UNAVAILABLE); return TX_TIMER_ERROR; } } return eSIR_SUCCESS; } /*** end limDeactivateMinChannelTimerDuringScan() ***/
void limRestoreFromAuthState(tpAniSirGlobal pMac, tSirResultCodes resultCode, tANI_U16 protStatusCode,tpPESession sessionEntry) { tSirMacAddr currentBssId; tLimMlmAuthCnf mlmAuthCnf; vos_mem_copy( (tANI_U8 *) &mlmAuthCnf.peerMacAddr, (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, sizeof(tSirMacAddr)); mlmAuthCnf.authType = pMac->lim.gpLimMlmAuthReq->authType; mlmAuthCnf.resultCode = resultCode; mlmAuthCnf.protStatusCode = protStatusCode; /* Update PE session ID*/ mlmAuthCnf.sessionId = sessionEntry->peSessionId; /// Free up buffer allocated /// for pMac->lim.gLimMlmAuthReq vos_mem_free(pMac->lim.gpLimMlmAuthReq); pMac->lim.gpLimMlmAuthReq = NULL; sessionEntry->limMlmState = sessionEntry->limPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, sessionEntry->peSessionId, sessionEntry->limMlmState)); // 'Change' timer for future activations limDeactivateAndChangeTimer(pMac, eLIM_AUTH_FAIL_TIMER); #if 0 if (wlan_cfgGetStr(pMac, WNI_CFG_BSSID, currentBssId, &cfg) != eSIR_SUCCESS) { /// Could not get BSSID from CFG. Log error. limLog(pMac, LOGP, FL("could not retrieve BSSID")); } #endif //TO SUPPORT BT-AMP sirCopyMacAddr(currentBssId,sessionEntry->bssId); if (sessionEntry->limSmeState == eLIM_SME_WT_PRE_AUTH_STATE) { pMac->lim.gLimPreAuthChannelNumber = 0; } limPostSmeMessage(pMac, LIM_MLM_AUTH_CNF, (tANI_U32 *) &mlmAuthCnf); } /*** end limRestoreFromAuthState() ***/
int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg) { /* CONC_OPER_AND_LISTEN_CHNL_SAME_OPTIMIZE - Currently removed the special optimization when a concurrent session * exists with operating channel same as P2P listen channel since it was causing issues in P2P search. The reason was * STA-AP link entering BMPS when returning to home channel causing P2P search to miss Probe Reqs and hence not * respond with Probe Rsp causing peer device to NOT find us. * If we need this optimization, we need to find a way to keep the STA-AP link awake (no BMPS) on home channel when in listen state */ #ifdef CONC_OPER_AND_LISTEN_CHNL_SAME_OPTIMIZE tANI_U8 i; tpPESession psessionEntry; #endif #ifdef WLAN_FEATURE_P2P_INTERNAL tpPESession pP2pSession; #endif tSirRemainOnChnReq *MsgBuff = (tSirRemainOnChnReq *)pMsg; pMac->lim.gpLimRemainOnChanReq = MsgBuff; #ifdef CONC_OPER_AND_LISTEN_CHNL_SAME_OPTIMIZE for (i =0; i < pMac->lim.maxBssId;i++) { psessionEntry = peFindSessionBySessionId(pMac,i); if ( (psessionEntry != NULL) ) { if (psessionEntry->currentOperChannel == MsgBuff->chnNum) { tANI_U32 val; tSirMacAddr nullBssid = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; pMac->lim.p2pRemOnChanTimeStamp = vos_timer_get_system_time(); pMac->lim.gTotalScanDuration = MsgBuff->duration; /* get the duration from the request */ val = SYS_MS_TO_TICKS(MsgBuff->duration); limLog( pMac, LOG2, "Start listen duration = %d", val); if (tx_timer_change( &pMac->lim.limTimers.gLimRemainOnChannelTimer, val, 0) != TX_SUCCESS) { limLog(pMac, LOGP, FL("Unable to change remain on channel Timer val")); goto error; } else if(TX_SUCCESS != tx_timer_activate( &pMac->lim.limTimers.gLimRemainOnChannelTimer)) { limLog(pMac, LOGP, FL("Unable to activate remain on channel Timer")); limDeactivateAndChangeTimer(pMac, eLIM_REMAIN_CHN_TIMER); goto error; } #ifdef WLAN_FEATURE_P2P_INTERNAL //Session is needed to send probe rsp if(eSIR_SUCCESS != limCreateSessionForRemainOnChn(pMac, &pP2pSession)) { limLog( pMac, LOGE, "Unable to create session"); goto error; } #endif if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE, nullBssid, pMac->lim.gSelfMacAddr, limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS) { limLog( pMac, LOGE, "Unable to change link state"); goto error; } return FALSE; } } } #endif pMac->lim.gLimPrevMlmState = pMac->lim.gLimMlmState; pMac->lim.gLimMlmState = eLIM_MLM_P2P_LISTEN_STATE; pMac->lim.gTotalScanDuration = MsgBuff->duration; /* 1st we need to suspend link with callback to initiate change channel */ limSuspendLink(pMac, eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN, limRemainOnChnlSuspendLinkHdlr, NULL); return FALSE; #ifdef CONC_OPER_AND_LISTEN_CHNL_SAME_OPTIMIZE error: limRemainOnChnRsp(pMac,eHAL_STATUS_FAILURE, NULL); /* pMsg is freed by the caller */ return FALSE; #endif }