blob: f04fd4f711b3579ccad6596f442847c4ee2ae817 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Pankaj Singh33205b82020-06-05 00:27:49 +05302 * Copyright (c) 2011-2017, 2019-2020 The Linux Foundation. All rights reserved.
Kiet Lam842dad02014-02-18 18:44:02 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lamaa8e15a2014-02-11 23:30:06 -080026 */
Kiet Lam842dad02014-02-18 18:44:02 -080027
28
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*
Jeff Johnson295189b2012-06-20 16:38:30 -070032 * This file lim ProcessMessageQueue.cc contains the code
33 * for processing LIM message Queue.
34 * Author: Chandra Modumudi
35 * Date: 02/11/02
36 * History:-
37 * Date Modified by Modification Information
38 * --------------------------------------------------------------------
39 *
40 */
41#include "palTypes.h"
42#include "wniApi.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070043#include "wlan_qct_wdi_ds.h"
44#include "wlan_qct_pal_packet.h"
45#include "wlan_qct_wda.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070046
Satyanarayana Dash6f438272015-03-03 18:01:06 +053047#include "wniCfg.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070048#include "cfgApi.h"
49#include "sirCommon.h"
50#include "utilsApi.h"
51#include "limTypes.h"
52#include "limUtils.h"
53#include "limAssocUtils.h"
54#include "limPropExtsUtils.h"
55
56#include "limAdmitControl.h"
57#include "pmmApi.h"
58#include "limIbssPeerMgmt.h"
59#include "schApi.h"
60#include "limSession.h"
Yathish9f22e662012-12-10 14:21:35 -080061#include "limSendMessages.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062
63#if defined WLAN_FEATURE_VOWIFI
64#include "rrmApi.h"
65#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080066#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
67#include "eseApi.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070068#endif
69
70#if defined WLAN_FEATURE_VOWIFI_11R
71#include "limFT.h"
72#endif
73
74#ifdef WMM_APSD
75#include "wmmApsd.h"
76#endif
77
Abhishek Singh00b71972016-01-07 10:51:04 +053078#ifdef WLAN_FEATURE_RMC
79#include "limRMC.h"
80#endif
81
Jeff Johnson295189b2012-06-20 16:38:30 -070082#include "vos_types.h"
83#include "vos_packet.h"
84#include "vos_memory.h"
Abhinav Kumard9664da2019-08-05 17:11:25 +053085#include "limSecurityUtils.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070086
Katya Nigam3802f202013-12-16 19:27:14 +053087/* This value corresponds to 500 ms */
Abhishek Singh849366d2015-11-26 16:53:47 +053088#define MAX_PROBEREQ_TIME 50
Katya Nigam3802f202013-12-16 19:27:14 +053089
Dino Mycle7a76e662014-06-10 11:36:34 +053090#ifdef WLAN_FEATURE_EXTSCAN
91#define SIZE_OF_FIXED_PARAM 12
92#endif
93
Masti, Narayanraddif10fd792015-12-15 15:01:01 +053094#define CHECK_BIT(value, mask) ((value) & (1 << (mask)))
95
Abhinav Kumard9664da2019-08-05 17:11:25 +053096#define IEEE80211_STATUS_SUCCESS 0
97
Jeff Johnson295189b2012-06-20 16:38:30 -070098void limLogSessionStates(tpAniSirGlobal pMac);
99
Abhinav Kumard9664da2019-08-05 17:11:25 +0530100#ifdef WLAN_FEATURE_SAE
101/**
Pankaj Singh6e549ab2020-06-05 02:26:41 +0530102 * lim_process_sae_msg_sta() - Process SAE message for STA
103 * @mac: Global MAC pointer
104 * @session: Pointer to the PE session entry
105 * @sae_msg: SAE message buffer pointer
106 *
107 * Return: None
108 */
109static void lim_process_sae_msg_sta(tpAniSirGlobal mac,
110 tpPESession session,
111 struct sir_sae_msg *sae_msg)
112{
113 switch (session->limMlmState) {
114 case eLIM_MLM_WT_SAE_AUTH_STATE:
115 /* SAE authentication is completed.
116 * Restore from auth state
117 */
118 if (tx_timer_running(&mac->lim.limTimers.sae_auth_timer))
119 limDeactivateAndChangeTimer(mac,
120 eLIM_AUTH_SAE_TIMER);
121 /* success */
122 if (sae_msg->sae_status == IEEE80211_STATUS_SUCCESS)
123 limRestoreFromAuthState(mac,
124 eSIR_SME_SUCCESS,
125 eSIR_MAC_SUCCESS_STATUS,
126 session);
127 else
128 limRestoreFromAuthState(mac, eSIR_SME_AUTH_REFUSED,
129 eSIR_MAC_UNSPEC_FAILURE_STATUS,
130 session);
131 break;
132 default:
133 /* SAE msg is received in unexpected state */
134 limLog(mac, LOGE, FL("received SAE msg in state %X"),
135 session->limMlmState);
136 limPrintMlmState(mac, LOGE, session->limMlmState);
137 break;
138 }
139}
140
141/**
142 * lim_process_sae_msg_ap() - Process SAE message
143 * @mac: Global MAC pointer
144 * @session: Pointer to the PE session entry
145 * @sae_msg: SAE message buffer pointer
146 *
147 * Return: None
148 */
149static void lim_process_sae_msg_ap(tpAniSirGlobal mac,
150 tpPESession session,
151 struct sir_sae_msg *sae_msg)
152{
153 struct tLimPreAuthNode *sta_pre_auth_ctx;
154 struct lim_assoc_data *assoc_req;
155 /* Extract pre-auth context for the STA and move limMlmState
156 * of preauth node to eLIM_MLM_AUTHENTICATED_STATE
157 */
158 sta_pre_auth_ctx = limSearchPreAuthList(mac, sae_msg->peer_mac_addr);
159
160 if (!sta_pre_auth_ctx) {
161 limLog(mac, LOGE, FL("No preauth node created for "
162 MAC_ADDRESS_STR),
163 MAC_ADDR_ARRAY(sae_msg->peer_mac_addr));
164 return;
165 }
166
167 assoc_req = &sta_pre_auth_ctx->assoc_req;
168
169 if (sae_msg->sae_status != IEEE80211_STATUS_SUCCESS) {
170 limLog(mac, LOGE, FL("SAE authentication failed for "
171 MAC_ADDRESS_STR " status: %u"),
172 MAC_ADDR_ARRAY(sae_msg->peer_mac_addr),
173 sae_msg->sae_status);
174 if (assoc_req->present) {
175 limLog(mac, LOGE, FL("Assoc req cached; clean it up"));
176 lim_process_assoc_cleanup(mac, session,
177 assoc_req->assoc_req,
178 assoc_req->sta_ds,
179 assoc_req->assoc_req_copied);
180 assoc_req->present = false;
181 }
182 limDeletePreAuthNode(mac, sae_msg->peer_mac_addr);
183
184 return;
185 }
186 sta_pre_auth_ctx->mlmState = eLIM_MLM_AUTHENTICATED_STATE;
187 /* Send assoc indication to SME if any assoc request is cached*/
188 if (assoc_req->present) {
189 /* Assoc request is present in preauth context. Get the assoc
190 * request and make it invalid in preauth context. It'll be
191 * freed later in the legacy path.
192 */
193 bool assoc_req_copied;
194
195 assoc_req->present = false;
196 limLog(mac, LOG1, FL("Assoc req cached; handle it"));
197 if (lim_send_assoc_ind_to_sme(mac, session,
198 assoc_req->sub_type,
199 &assoc_req->hdr,
200 assoc_req->assoc_req,
201 ANI_AKM_TYPE_SAE,
202 assoc_req->pmf_connection,
203 &assoc_req_copied) == false)
204 lim_process_assoc_cleanup(mac, session,
205 assoc_req->assoc_req,
206 assoc_req->sta_ds,
207 assoc_req_copied);
208 }
209}
210
211/**
Abhinav Kumard9664da2019-08-05 17:11:25 +0530212 * lim_process_sae_msg() - Process SAE message
213 * @mac: Global MAC pointer
214 * @body: Buffer pointer
215 *
216 * Return: None
217 */
218static void lim_process_sae_msg(tpAniSirGlobal mac, struct sir_sae_msg *body)
219{
220 struct sir_sae_msg *sae_msg = body;
221 tpPESession session;
222
223 if (!sae_msg) {
224 limLog(mac, LOGE, FL("SAE msg is NULL"));
225 return;
226 }
227
228 session = pe_find_session_by_sme_session_id(mac, sae_msg->session_id);
229 if (session == NULL) {
230 limLog(mac, LOGE, FL("SAE:Unable to find session"));
231 return;
232 }
233
Pankaj Singh6e549ab2020-06-05 02:26:41 +0530234 if (session->pePersona != VOS_STA_MODE &&
235 session->pePersona != VOS_STA_SAP_MODE) {
Abhinav Kumard9664da2019-08-05 17:11:25 +0530236 limLog(mac, LOGE, FL("SAE:Not supported in this mode %d"),
237 session->pePersona);
238 return;
239 }
240
Pankaj Singh6e549ab2020-06-05 02:26:41 +0530241 limLog(mac, LOG1,
242 FL("SAE:status %d limMlmState %d pePersona %d peer:"
243 MAC_ADDRESS_STR),
244 sae_msg->sae_status, session->limMlmState,
245 session->pePersona, MAC_ADDR_ARRAY(sae_msg->peer_mac_addr));
246
247 if (LIM_IS_STA_ROLE(session))
248 lim_process_sae_msg_sta(mac, session, sae_msg);
249 else if (LIM_IS_AP_ROLE(session))
250 lim_process_sae_msg_ap(mac, session, sae_msg);
251 else
252 limLog(mac, LOGE, FL("SAE message on unsupported interface"));
Abhinav Kumard9664da2019-08-05 17:11:25 +0530253}
254#else
255static void lim_process_sae_msg(tpAniSirGlobal mac, struct sir_sae_msg *body)
256{}
257#endif
258
Jeff Johnson295189b2012-06-20 16:38:30 -0700259/** -------------------------------------------------------------
260\fn defMsgDecision
261\brief The function decides whether to defer a message or not in limProcessMessage function
262\param tpAniSirGlobal pMac
263\param tSirMsgQ limMsg
264\param tSirMacTspecIE *ppInfo
265\return none
266 -------------------------------------------------------------*/
267
268tANI_U8 static
269defMsgDecision(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
270{
271
272
273/* this function should not changed */
Jeff Johnsone7245742012-09-05 17:12:55 -0700274 if(pMac->lim.gLimSmeState == eLIM_SME_OFFLINE_STATE)
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 {
276 // Defer processsing this message
277 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
278 {
Madan Mohan Koyyalamudi5695b502012-09-24 14:21:12 -0700279 PELOGW(limLog(pMac, LOGW, FL("Unable to Defer message(0x%X) %s limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 limMsg->type, limMsgStr(limMsg->type), pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
281 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
282 limLogSessionStates(pMac);
283 limHandleDeferMsgError(pMac, limMsg);
284 }
285 return true;
286 }
287
288 //When defer is requested then defer all the messages except HAL responses.
289 if((!limIsSystemInScanState(pMac)) && (true != GET_LIM_PROCESS_DEFD_MESGS(pMac)) &&
290 !pMac->lim.gLimSystemInScanLearnMode)
291 {
292 if((limMsg->type != WDA_ADD_BSS_RSP) &&
293 (limMsg->type != WDA_DELETE_BSS_RSP) &&
294 (limMsg->type != WDA_ADD_STA_RSP) &&
295 (limMsg->type != WDA_ADD_STA_SELF_RSP) &&
296 (limMsg->type != WDA_DEL_STA_SELF_RSP) &&
297 (limMsg->type != WDA_DELETE_STA_RSP)&&
298 (limMsg->type != WDA_SET_BSSKEY_RSP)&&
299 (limMsg->type != WDA_SET_STAKEY_RSP)&&
300 (limMsg->type != WDA_SET_STA_BCASTKEY_RSP) &&
Jeff Johnson295189b2012-06-20 16:38:30 -0700301 (limMsg->type != eWNI_SME_START_REQ) &&
302 (limMsg->type != WDA_AGGR_QOS_RSP) &&
303 (limMsg->type != WDA_REMOVE_BSSKEY_RSP) &&
304 (limMsg->type != WDA_REMOVE_STAKEY_RSP) &&
305 (limMsg->type != WDA_SET_MIMOPS_RSP)&&
306 (limMsg->type != WDA_ADDBA_RSP) &&
307 (limMsg->type != WDA_ENTER_BMPS_RSP) &&
308 (limMsg->type != WDA_EXIT_BMPS_RSP) &&
309 (limMsg->type != WDA_ENTER_IMPS_RSP) &&
310 (limMsg->type != WDA_EXIT_IMPS_RSP) &&
311 (limMsg->type != WDA_ENTER_UAPSD_RSP) &&
312 (limMsg->type != WDA_EXIT_UAPSD_RSP) &&
313 (limMsg->type != WDA_WOWL_ENTER_RSP) &&
314 (limMsg->type != WDA_WOWL_EXIT_RSP) &&
315 (limMsg->type != WDA_SWITCH_CHANNEL_RSP) &&
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 (limMsg->type != WDA_P2P_NOA_ATTR_IND) &&
Viral Modid440e682013-03-06 02:25:31 -0800317 (limMsg->type != WDA_P2P_NOA_START_IND) &&
Jeff Johnsone7245742012-09-05 17:12:55 -0700318#ifdef FEATURE_OEM_DATA_SUPPORT
319 (limMsg->type != WDA_START_OEM_DATA_RSP) &&
320#endif
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +0530321 (limMsg->type != WDA_ADD_TS_RSP) &&
Hanumantha Reddy Pothula3de8d4c2015-10-07 12:06:37 +0530322
323 /* LIM won't process any defer queue commands if gLimAddtsSent is set to
324 TRUE. gLimAddtsSent will be set TRUE to while sending ADDTS REQ. Say,
325 when deferring is enabled, if SIR_LIM_ADDTS_RSP_TIMEOUT is posted
326 (because of not receiving ADDTS RSP) then this command will be added
327 to defer queue and as gLimAddtsSent is set TRUE LIM will never
328 process any commands from defer queue, including
329 SIR_LIM_ADDTS_RSP_TIMEOUT. Hence allowing SIR_LIM_ADDTS_RSP_TIMEOUT
330 command to be processed with deferring enabled, so that this will be
331 processed immediately and sets gLimAddtsSent to FALSE.
332 */
333 (limMsg->type != SIR_LIM_ADDTS_RSP_TIMEOUT) &&
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +0530334 (limMsg->type != WDA_LOST_LINK_PARAMS_IND) &&
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +0530335 /* Allow processing of RX frames while awaiting reception of
336 ADD TS response over the air. This logic particularly handles the
337 case when host sends ADD BA request to FW after ADD TS request
338 is sent over the air and ADD TS response received over the air */
339 !(limMsg->type == SIR_BB_XPORT_MGMT_MSG && pMac->lim.gLimAddtsSent))
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700341 PELOG1(limLog(pMac, LOG1, FL("Defer the current message %s , gLimProcessDefdMsgs is false and system is not in scan/learn mode"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700342 limMsgStr(limMsg->type));)
343
344 // Defer processsing this message
345 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
346 {
Madan Mohan Koyyalamudi5695b502012-09-24 14:21:12 -0700347 PELOGW(limLog(pMac, LOGW, FL("Unable to Defer message(0x%X) %s limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 limMsg->type, limMsgStr(limMsg->type), pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
349 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
350 limLogSessionStates(pMac);
351 limHandleDeferMsgError(pMac, limMsg);
352
353 }
354 return true;
355 }
356 }
357 return false;
358}
359
360/*
361* Beacon Handling Cases:
362* during scanning, when no session is active:
363* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
364* during scanning, when any session is active, but beacon/Pr does not belong to that session, psessionEntry will be null.
365* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
366* during scanning, when any session is active, and beacon/Pr belongs to one of the session, psessionEntry will not be null.
367* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
368* Not scanning, no session:
369* there should not be any beacon coming, if coming, should be dropped.
370* Not Scanning,
371*/
372static void
373__limHandleBeacon(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tpPESession psessionEntry)
374{
375 /* checking for global SME state...*/
376 tANI_U8 *pRxPacketInfo;
377 limGetBDfromRxPacket(pMac, pMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
378
379 //This function should not be called if beacon is received in scan state.
380 //So not doing any checks for the global state.
381
382 if(psessionEntry == NULL)
383 {
384 schBeaconProcess(pMac, pRxPacketInfo, NULL);
385 }
386 else if( (psessionEntry->limSmeState == eLIM_SME_LINK_EST_STATE) ||
387 (psessionEntry->limSmeState == eLIM_SME_NORMAL_STATE))
388 {
389 schBeaconProcess(pMac, pRxPacketInfo, psessionEntry);
390 }
391 else
392 limProcessBeaconFrame(pMac, pRxPacketInfo, psessionEntry);
393
394 return;
395}
396
397
398//Fucntion prototype
399void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRspReqd);
400
401/**
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 * limDeferMsg()
403 *
404 *FUNCTION:
405 * This function is called to defer the messages received
406 * during Learn mode
407 *
408 *LOGIC:
409 * NA
410 *
411 *ASSUMPTIONS:
412 * NA
413 *
414 *NOTE:
415 * NA
416 *
417 * @param pMac - Pointer to Global MAC structure
418 * @param pMsg of type tSirMsgQ - Pointer to the message structure
419 * @return None
420 */
421
422tANI_U32
423limDeferMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg)
424{
425 tANI_U32 retCode = TX_SUCCESS;
Jeff Johnson77165482013-03-07 08:15:44 -0800426
427 retCode = limWriteDeferredMsgQ(pMac, pMsg);
428
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 if (retCode == TX_SUCCESS)
Jeff Johnson77165482013-03-07 08:15:44 -0800430 {
Rashmi Ramanna6c13a342014-01-07 11:44:07 +0530431 limLog(pMac, LOG1,
432 FL("Deferred message(0x%X) limSmeState %d (prev sme state %d)"
433 " sysRole %d mlm state %d (prev mlm state %d)"),
434 pMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
435 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState,
436 pMac->lim.gLimPrevMlmState);
Jeff Johnson77165482013-03-07 08:15:44 -0800437 MTRACE(macTraceMsgRx(pMac, NO_SESSION, LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DEFERRED));)
438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 else
Jeff Johnson77165482013-03-07 08:15:44 -0800440 {
Agarwal Ashishe865f332014-04-08 13:20:06 +0530441 limLog(pMac, LOG1, FL("Dropped lim message (0x%X)"), pMsg->type);
Jeff Johnson77165482013-03-07 08:15:44 -0800442 MTRACE(macTraceMsgRx(pMac, NO_SESSION, LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DROPPED));)
443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444
445 return retCode;
446} /*** end limDeferMsg() ***/
447
448
449
450/**
451 * limHandleFramesInScanState()
452 *
453 *FUNCTION:
454 * This function is called to process 802.11 frames
455 * received by LIM in scan state.
456 *
457 *LOGIC:
458 * NA
459 *
460 *ASSUMPTIONS:
461 * NA
462 *
463 *NOTE:
464 * NA
465 *
466 * @param pMac - Pointer to Global MAC structure
467 * @param limMsg - Received message
468 * @param pRxPacketInfo - Pointer to Rx packet info structure
469 * @param deferMsg - Indicates whether the frame shall be deferred
470 * @return None
471 */
472
473static void
474limHandleFramesInScanState(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pRxPacketInfo, tANI_U8 *deferMsg, tpPESession psessionEntry)
475{
476 tSirMacFrameCtl fc;
477 tpSirMacMgmtHdr pHdr;
Jeff Johnson295189b2012-06-20 16:38:30 -0700478
479 *deferMsg = false;
480 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
481 fc = pHdr->fc;
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700482 limLog( pMac, LOG2, FL("ProtVersion %d, Type %d, Subtype %d"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 fc.protVer, fc.type, fc.subType );
484
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 // defer all message in scan state except for Beacons and Probe Response
486 if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_BEACON))
487 {
488 if (psessionEntry == NULL)
489 limProcessBeaconFrameNoSession(pMac, pRxPacketInfo);
490 else
491 limProcessBeaconFrame(pMac, pRxPacketInfo,psessionEntry);
492 }
493 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_PROBE_RSP))
494 {
495 if (psessionEntry == NULL)
496 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
497 else
498 limProcessProbeRspFrame(pMac, pRxPacketInfo,psessionEntry);
499 }
500 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_PROBE_REQ))
501 {
502 limProcessProbeReqFrame_multiple_BSS(pMac, pRxPacketInfo, psessionEntry);
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_ACTION))
505 {
Yeshwanth Sriram Guntuka9ae407c2018-06-28 12:58:28 +0530506 if (psessionEntry != NULL)
507 limProcessActionFrame(pMac, pRxPacketInfo, psessionEntry);
508 else
509 limProcessActionFrameNoSession(pMac, pRxPacketInfo);
Jeff Johnson295189b2012-06-20 16:38:30 -0700510 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 else
512 {
513 *deferMsg = true;
514 return;
515 }
516
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr);
518 return;
519
520} /*** end limHandleFramesInScanState() ***/
521
522/** ------------------------------------------------------------
523\brief This function handles Unknown Unicast (A2 Index)
524\ packets.
525\param tpAniSirGlobal pMac Global Mac data structure
526\param void *pRxPacketInfo Pointer to Buffer Descriptor
527\return none
528\
529\ -------------------------------------------------------------- */
530static void limHandleUnknownA2IndexFrames(tpAniSirGlobal pMac, void *pRxPacketInfo,tpPESession psessionEntry)
531{
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 /* addr2 mismatch interrupt occurred this means previous
533 disassociation was not successful
534 In Volans pRxPacketInfo only contains pointer 48-bit address2 field */
535 /*Send disassociation message again*/
536 //Dinesh need one more arguement.
537 //limSendDisassocMgmtFrame(pMac, eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON,(tANI_U8 *) pRxPacketInfo);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800538 //TODO: verify this
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 //This could be a public action frame.
540 if( psessionEntry->limSystemRole == eLIM_P2P_DEVICE_ROLE )
541 limProcessActionFrameNoSession(pMac, (tANI_U8 *) pRxPacketInfo);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800542
543#ifdef FEATURE_WLAN_TDLS
544 {
545 tpSirMacDataHdr3a pMacHdr;
546 pMacHdr = WDA_GET_RX_MPDUHEADER3A(pRxPacketInfo);
547
548 if (limIsGroupAddr(pMacHdr->addr2))
549 {
Abhishek Singh525045c2014-12-15 17:18:45 +0530550 limLog(pMac, LOG1, FL("Ignoring A2 Invalid Packet received for MC/BC:"));
551 limPrintMacAddr(pMac, pMacHdr->addr2, LOG1);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800552
553 return;
554 }
555 /* TDLS_hklee: move down here to reject Addr2 == Group (first checking above)
556 and also checking if SystemRole == STA */
557 if (psessionEntry->limSystemRole == eLIM_STA_ROLE)
558 {
559 /* ADD handling of Public Action Frame */
560 LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700561 ("limHandleUnknownA2IndexFrames: type=0x%x, subtype=0x%x"),pMacHdr->fc.type, pMacHdr->fc.subType));
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800562 switch (pMacHdr->fc.type)
563 {
564 case SIR_MAC_MGMT_FRAME:
565 {
566 switch (pMacHdr->fc.subType)
567 {
568 case SIR_MAC_MGMT_ACTION:
569 {
570 limProcessActionFrame(pMac, pRxPacketInfo, psessionEntry) ;
571 break ;
572 }
573 default:
574 {
575 break ;
576 }
577 }
578 }
579 default:
580 {
581 break ;
582 }
583 }
584 }
585 }
586#endif
587
Jeff Johnson295189b2012-06-20 16:38:30 -0700588
589 return;
590}
591
Jeff Johnson295189b2012-06-20 16:38:30 -0700592/**
593 * limCheckMgmtRegisteredFrames()
594 *
595 *FUNCTION:
596 * This function is called to process to check if received frame match with
597 * any of the registered frame from HDD. If yes pass this frame to SME.
598 *
599 *LOGIC:
600 *
601 *ASSUMPTIONS:
602 *
603 *NOTE:
604 *
605 * @param pMac Pointer to Global MAC structure
606 * @param *pBd Pointer to the received Buffer Descriptor+payload
607 * @param *psessionEntry Pointer to session on which packet is received
608 * @return None
609 */
610static tANI_BOOLEAN
611limCheckMgmtRegisteredFrames(tpAniSirGlobal pMac, tANI_U8 *pBd,
612 tpPESession psessionEntry)
613{
614 tSirMacFrameCtl fc;
615 tpSirMacMgmtHdr pHdr;
616 tANI_U8 *pBody;
617 tpLimMgmtFrameRegistration pLimMgmtRegistration = NULL, pNext = NULL;
618 tANI_U16 frameType;
619 tANI_U16 framelen;
620 tANI_U8 type,subType;
621 tANI_BOOLEAN match = VOS_FALSE;
622 VOS_STATUS vosStatus;
623
624 pHdr = WDA_GET_RX_MAC_HEADER(pBd);
625 fc = pHdr->fc;
626 frameType = (fc.type << 2 ) | (fc.subType << 4);
627 pBody = WDA_GET_RX_MPDU_DATA(pBd);
628 framelen = WDA_GET_RX_PAYLOAD_LEN(pBd);
629
630 vos_list_peek_front(&pMac->lim.gLimMgmtFrameRegistratinQueue,
631 (vos_list_node_t**)&pLimMgmtRegistration);
632
633 while(pLimMgmtRegistration != NULL)
634 {
635 type = (pLimMgmtRegistration->frameType >> 2) & 0x03;
636 subType = (pLimMgmtRegistration->frameType >> 4) & 0x0f;
637 if ( (type == SIR_MAC_MGMT_FRAME) && (fc.type == SIR_MAC_MGMT_FRAME)
638 && (subType == SIR_MAC_MGMT_RESERVED15) )
639 {
640 limLog( pMac, LOG3,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700641 FL("rcvd frame match with SIR_MAC_MGMT_RESERVED15"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 match = VOS_TRUE;
643 break;
644 }
645
646 if (pLimMgmtRegistration->frameType == frameType)
647 {
648 if (pLimMgmtRegistration->matchLen > 0)
649 {
650 if (pLimMgmtRegistration->matchLen <= framelen)
651 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +0530652 if (vos_mem_compare(pLimMgmtRegistration->matchData,
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 pBody, pLimMgmtRegistration->matchLen))
654 {
Madan Mohan Koyyalamudic537df22012-10-22 15:07:08 -0700655 /* found match! */
656 match = VOS_TRUE;
657 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 }
Madan Mohan Koyyalamudic537df22012-10-22 15:07:08 -0700659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 }
661 else
662 {
663 /* found match! */
664 match = VOS_TRUE;
665 break;
666 }
667 }
668
669 vosStatus =
670 vos_list_peek_next ( &pMac->lim.gLimMgmtFrameRegistratinQueue,
671 (vos_list_node_t*) pLimMgmtRegistration,
672 (vos_list_node_t**) &pNext );
673 pLimMgmtRegistration = pNext;
674 pNext = NULL;
675 }
676
Arun Kumar Khandavallib5d032a2021-04-13 15:56:05 +0530677 limLog( pMac, LOG1,
678 FL("rcvd frame match with registered frame params match %d fc.type %d fc.subType %d"), match, fc.type, fc.subType);
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 if (match)
680 {
Jeff Johnson295189b2012-06-20 16:38:30 -0700681
682 /* Indicate this to SME */
Rashmi Ramanna0d0adec2014-02-05 20:35:37 +0530683 limSendSmeMgmtFrameInd( pMac, pLimMgmtRegistration->sessionId,
Pankaj Singh33205b82020-06-05 00:27:49 +0530684 pBd, psessionEntry, WDA_GET_RX_RSSI_DB(pBd),
685 RXMGMT_FLAG_NONE);
Jeff Johnson295189b2012-06-20 16:38:30 -0700686
687 if ( (type == SIR_MAC_MGMT_FRAME) && (fc.type == SIR_MAC_MGMT_FRAME)
688 && (subType == SIR_MAC_MGMT_RESERVED15) )
689 {
690 // These packets needs to be processed by PE/SME as well as HDD.
691 // If it returns TRUE here, the packet is forwarded to HDD only.
692 match = VOS_FALSE;
693 }
694 }
695
696 return match;
697} /*** end limCheckMgmtRegisteredFrames() ***/
Jeff Johnson295189b2012-06-20 16:38:30 -0700698
Dino Mycle7a76e662014-06-10 11:36:34 +0530699#ifdef WLAN_FEATURE_EXTSCAN
700
701void
702limProcessEXTScanRealTimeData(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo)
703{
704 tpSirMacMgmtHdr pHdr = NULL;
705 eHalStatus status;
706 void *pCallbackContext;
707 tANI_U8 rfBand = 0;
708 tANI_U8 rxChannelInBD = 0;
709 tSirMacFrameCtl fc;
710 tDot11fBeacon *pBeacon = NULL;
711 tDot11fProbeResponse *pProbeResponse = NULL;
712 tSirWifiFullScanResultEvent tEXTScanFullScanResult;
713
714 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
715 fc = pHdr->fc;
716
717 limLog(pMac, LOG2,
718 FL("Received EXTScan Real Time data with length=%d from "),
719 WDA_GET_RX_MPDU_LEN(pRxPacketInfo));
720
721 limPrintMacAddr(pMac, pHdr->sa, LOG2);
722
723 vos_mem_set((tANI_U8 *) &tEXTScanFullScanResult,
724 sizeof(tSirWifiFullScanResultEvent), 0);
725
Dino Mycle3f783bc2014-08-08 17:40:22 +0530726 tEXTScanFullScanResult.ap.ts = vos_get_monotonic_boottime();
Dino Mycle7a76e662014-06-10 11:36:34 +0530727
728 vos_mem_copy(&tEXTScanFullScanResult.ap.bssid,
729 pHdr->bssId, sizeof(tSirMacAddr));
730
Dino Myclee8843b32014-07-04 14:21:45 +0530731 limPrintMacAddr(pMac, pHdr->bssId, LOG2);
Dino Mycle7a76e662014-06-10 11:36:34 +0530732
733
734 rfBand = WDA_GET_RX_RFBAND(pRxPacketInfo);
735 rxChannelInBD = WDA_GET_RX_CH(pRxPacketInfo);
736
737 if ((!rfBand) || IS_5G_BAND(rfBand))
738 {
739 rxChannelInBD = limUnmapChannel(rxChannelInBD);
740 }
741
c_hpothu24b354c2014-09-24 18:59:33 +0530742 tEXTScanFullScanResult.ap.channel =
743 (tANI_U32)vos_chan_to_freq(rxChannelInBD);
Dino Mycle7a76e662014-06-10 11:36:34 +0530744 tEXTScanFullScanResult.ap.rssi = WDA_GET_RX_RSSI_DB(pRxPacketInfo);
745
746 if (fc.subType == SIR_MAC_MGMT_BEACON)
747 {
748 limLog( pMac, LOG2, FL("Beacon "));
749
750 pBeacon = vos_mem_malloc(sizeof(tDot11fBeacon));
751 if ( NULL == pBeacon ){
752 limLog(pMac, LOGE, FL("Failed to allocate memory\n") );
753 return;
754 }
755
756 vos_mem_set( ( tANI_U8* )pBeacon, sizeof(tDot11fBeacon), 0 );
757 // delegate to the framesc-generated code,
758 status = dot11fUnpackBeacon( pMac,
759 (tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo),
760 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo), pBeacon );
761
762 if ( DOT11F_FAILED( status ) )
763 {
764 limLog(pMac, LOGE, FL("Failed to parse a Beacons"
Sushant Kaushik87787972015-09-11 16:05:00 +0530765 "(%d)"), status);
Dino Mycle7a76e662014-06-10 11:36:34 +0530766 vos_mem_free(pBeacon);
767 return;
768 }
769 if ( pBeacon->SSID.present )
770 {
771 vos_mem_copy(tEXTScanFullScanResult.ap.ssid,
772 pBeacon->SSID.ssid,
773 pBeacon->SSID.num_ssid);
774 }
775 //NULL Terminate the string.
776 tEXTScanFullScanResult.ap.ssid[pBeacon->SSID.num_ssid] = 0;
777 tEXTScanFullScanResult.ap.beaconPeriod =
778 pBeacon->BeaconInterval.interval;
779 tEXTScanFullScanResult.ap.capability =
780 *((tANI_U16 *)&pBeacon->Capabilities);
781 vos_mem_free(pBeacon);
782 }
783 else if (fc.subType == SIR_MAC_MGMT_PROBE_RSP)
784 {
785 limLog( pMac, LOG2, FL("Probe rsp "));
786
787 pProbeResponse = vos_mem_malloc(sizeof(tDot11fProbeResponse));
788 if ( NULL == pProbeResponse ){
789 limLog(pMac, LOGE, FL("Failed to allocate memory\n") );
790 return;
791 }
792
793 vos_mem_set( ( tANI_U8* )pProbeResponse,
794 sizeof(tDot11fProbeResponse), 0);
795 //delegate to the framesc-generated code,
796 status = dot11fUnpackProbeResponse( pMac,
797 (tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo),
798 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo), pProbeResponse );
799
800 if ( DOT11F_FAILED( status ) )
801 {
802 limLog(pMac, LOGE, FL("Failed to parse a Probe"
Sushant Kaushik87787972015-09-11 16:05:00 +0530803 "Response (%d"), status);
Dino Mycle7a76e662014-06-10 11:36:34 +0530804 vos_mem_free(pProbeResponse);
805 return;
806 }
807 if ( pProbeResponse->SSID.present )
808 {
809 vos_mem_copy(tEXTScanFullScanResult.ap.ssid,
810 pProbeResponse->SSID.ssid,
811 pProbeResponse->SSID.num_ssid);
812 }
813 //NULL Terminate the string.
814 tEXTScanFullScanResult.ap.ssid[pProbeResponse->SSID.num_ssid] = 0;
815 tEXTScanFullScanResult.ap.beaconPeriod =
816 pProbeResponse->BeaconInterval.interval;
817 tEXTScanFullScanResult.ap.capability =
818 *(((tANI_U16 *)&pProbeResponse->Capabilities));
819
Gupta, Kapil4a5e1902016-02-01 19:54:14 +0530820 vos_mem_free(pProbeResponse);
Dino Mycle7a76e662014-06-10 11:36:34 +0530821 }
822 else
823 {
824 limLog( pMac, LOGE, FL("Wrong frame Type %d, Subtype %d for LFR"),
825 fc.type, fc.subType);
826 VOS_ASSERT(0);
827 return;
828 }
829
830 tEXTScanFullScanResult.requestId = pMac->sme.extScanStartReqId;
831 tEXTScanFullScanResult.ieLength =
832 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo) - SIZE_OF_FIXED_PARAM;
833 tEXTScanFullScanResult.ie =(tSirInformationElement *)
834 ((tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo) + SIZE_OF_FIXED_PARAM);
835
836 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
837 if(pMac->sme.pEXTScanIndCb)
838 {
839 pMac->sme.pEXTScanIndCb(pCallbackContext,
840 SIR_HAL_EXTSCAN_FULL_SCAN_RESULT_IND,
841 (tANI_U8 *)&tEXTScanFullScanResult);
842 }
843
844 return;
845} /*** end limProcessEXTScanRealTimeData() ***/
846#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -0700847
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530848#ifdef SAP_AUTH_OFFLOAD
849/*
850 * lim_process_sap_offload_indication: function to process add sta/ del sta
851 * indication for SAP auth offload.
852 *
853 * @pMac: mac context
854 * @pRxPacketInfo: rx buffer
855 *
856 * This Function will go through buffer and if
857 * indication type is ADD_STA_IND, function will extract all data related to
858 * client and will call limAddSta
859 * and if indication type is DEL_STA_IND, function will call
860 * limSendSmeDisassocInd to do cleanup for station.
861 *
862 * Return : none
863 */
864static void lim_process_sap_offload_indication(tpAniSirGlobal pMac,
865 tANI_U8 *pRxPacketInfo)
866{
867 int i = 0;
868 tSapOfldIndications *sap_offload_indication_rx_buf =
869 (tSapOfldIndications *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
870 tSapOfldInd *sap_offload_ind =
871 (tSapOfldInd*)sap_offload_indication_rx_buf->indications;
872
873 limLog( pMac, LOG1,
874 FL("Notify SME with Sap Offload ind and indication type is %d num_indication %d \n"),
875 sap_offload_ind->indType,
876 (tANI_U8) sap_offload_indication_rx_buf->num_indications);
877
878 for (i=1; i <= (tANI_U8)(sap_offload_indication_rx_buf->num_indications);
879 i++)
880 {
881 if (sap_offload_ind->indType == SAP_OFFLOAD_ADD_STA_IND)
882 {
883 tSapOfldAddStaIndMsg *add_sta;
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530884 limLog( pMac, LOG1,
885 FL("Indication type is SAP_OFFLOAD_ADD_STA_IND"));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530886 add_sta = (tSapOfldAddStaIndMsg *)sap_offload_ind->indication;
887 lim_sap_offload_add_sta(pMac, add_sta);
888 if (sap_offload_indication_rx_buf->num_indications > 1)
889 sap_offload_ind =
890 (tSapOfldInd *)((tANI_U8 *)sap_offload_ind +
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530891 sizeof(tSapOfldAddStaIndMsg) - sizeof(tANI_U8)+
892 add_sta->data_len + sizeof(tANI_U32));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530893 }
894 else if (sap_offload_ind->indType == SAP_OFFLOAD_DEL_STA_IND)
895 {
896 tSapOfldDelStaIndMsg *del_sta;
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530897 limLog( pMac, LOG1,
898 FL("Indication type is SAP_OFFLOAD_DEL_STA_IND"));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530899 del_sta = (tSapOfldDelStaIndMsg *)sap_offload_ind->indication;
900 lim_sap_offload_del_sta(pMac, del_sta);
901 sap_offload_ind = (tSapOfldInd *)((tANI_U8 *)sap_offload_ind +
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530902 sizeof(tSapOfldDelStaIndMsg) + sizeof(tANI_U32));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530903 }
904 else
905 {
906 limLog(pMac, LOGE, FL("No Valid indication for connected station"));
907 }
908 }
909
910}
911#endif
912
Jeff Johnson295189b2012-06-20 16:38:30 -0700913/**
914 * limHandle80211Frames()
915 *
916 *FUNCTION:
917 * This function is called to process 802.11 frames
918 * received by LIM.
919 *
920 *LOGIC:
921 * NA
922 *
923 *ASSUMPTIONS:
924 * NA
925 *
926 *NOTE:
927 * NA
928 *
929 * @param pMac - Pointer to Global MAC structure
930 * @param pMsg of type tSirMsgQ - Pointer to the message structure
931 * @return None
932 */
933
934static void
Sushant Kaushik33200572015-08-05 16:46:20 +0530935
Jeff Johnson295189b2012-06-20 16:38:30 -0700936limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg)
937{
938 tANI_U8 *pRxPacketInfo = NULL;
939 tSirMacFrameCtl fc;
940 tpSirMacMgmtHdr pHdr=NULL;
941 tpPESession psessionEntry=NULL;
942 tANI_U8 sessionId;
943 tAniBool isFrmFt = FALSE;
944 tANI_U16 fcOffset = WLANHAL_RX_BD_HEADER_SIZE;
Padma, Santhosh Kumar5a3054e2017-02-13 19:05:54 +0530945 tANI_S8 pe_sessionid = -1;
Jeff Johnson295189b2012-06-20 16:38:30 -0700946
947 *pDeferMsg= false;
948 limGetBDfromRxPacket(pMac, limMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
949
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530950#ifdef SAP_AUTH_OFFLOAD
951 if ((WDA_GET_SAP_AUTHOFFLOADIND(pRxPacketInfo) == 1) &&
952 pMac->sap_auth_offload)
953 {
954 lim_process_sap_offload_indication(pMac, pRxPacketInfo);
955 goto end;
956 }
957#endif
958
Dino Mycle7a76e662014-06-10 11:36:34 +0530959#ifdef WLAN_FEATURE_EXTSCAN
960
961 if ( WDA_GET_EXTSCANFULLSCANRESIND(pRxPacketInfo))
962 {
963 limLog( pMac, LOG2, FL("Notify EXTSCAN scan results to the HDD"));
964 limProcessEXTScanRealTimeData(pMac, pRxPacketInfo);
965 goto end;
966 }
967#endif //WLAN_FEATURE_EXTSCAN
968
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
970 isFrmFt = WDA_GET_RX_FT_DONE(pRxPacketInfo);
971 fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo);
972 fc = pHdr->fc;
973
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +0530974#ifdef WLAN_DUMP_MGMTFRAMES
975 limLog( pMac, LOGE, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
976 fc.protVer, fc.type, fc.subType,
977 WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
978 VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, pHdr,
979 WDA_GET_RX_MPDU_HEADER_LEN(pRxPacketInfo));
980#endif
981
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800982 if ((fc.type == SIR_MAC_MGMT_FRAME) &&
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800983 (fc.subType != SIR_MAC_MGMT_BEACON))
984 {
Rajeev Kumar Sirasanagandla63f85cf2016-06-29 16:52:15 +0530985 limLog(pMac, LOG1, FL("RX MGMT - Type %hu, SubType %hu,"
986 "Seq.no %d, Source mac-addr "
987 MAC_ADDRESS_STR), fc.type, fc.subType,
988 ((pHdr->seqControl.seqNumHi << 4) |
989 (pHdr->seqControl.seqNumLo)),
990 MAC_ADDR_ARRAY(pHdr->sa));
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800991 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700992#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Kapil Gupta04ab1992016-06-26 13:36:51 +0530993 if (WDA_GET_ROAMCANDIDATEIND(pRxPacketInfo))
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700994 {
Rajeev Kumar Sirasanagandla8f11d542017-11-14 17:56:55 +0530995 if (vos_check_monitor_state())
996 {
997 limLog( pMac, LOGW, FL("Ignore raom candidate when roam started"));
998 goto end;
999 }
Kapil Gupta04ab1992016-06-26 13:36:51 +05301000 limLog( pMac, LOGW, FL("Notify SME with candidate ind"));
1001
1002 if (WDA_IF_PER_ROAMCANDIDATEIND(pRxPacketInfo) &&
1003 IS_FEATURE_SUPPORTED_BY_FW(PER_BASED_ROAMING) &&
1004 pMac->roam.configParam.isPERRoamEnabled)
1005 {
1006 tSirPerRoamScanResult *candidateChanInfo =
1007 (tSirPerRoamScanResult *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
1008 int chanInfoLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo)
1009 - sizeof(tANI_U32);
1010
1011 /* Translate network buffer into system buffer */
1012 vos_buff_to_hl_buff((v_U8_t *)candidateChanInfo,
1013 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo));
1014
1015 /* Max candidates allowed */
Kapil Gupta3fd32832016-08-31 17:55:19 +05301016 if (candidateChanInfo->candidateCount >
1017 SIR_PER_ROAM_MAX_CANDIDATE_CNT)
Kapil Gupta04ab1992016-06-26 13:36:51 +05301018 {
1019 limLog(pMac, LOGE,
Kapil Gupta3fd32832016-08-31 17:55:19 +05301020 FL("Got maximum candidates as %d, setting count as %d"),
1021 candidateChanInfo->candidateCount,
1022 SIR_PER_ROAM_MAX_CANDIDATE_CNT);
1023 candidateChanInfo->candidateCount =
1024 SIR_PER_ROAM_MAX_CANDIDATE_CNT;
Kapil Gupta04ab1992016-06-26 13:36:51 +05301025 }
1026
1027 vos_mem_set(&pMac->candidateChannelInfo,
1028 sizeof(tSirCandidateChanInfo) *
1029 SIR_PER_ROAM_MAX_CANDIDATE_CNT, 0);
1030
1031 vos_mem_copy(&pMac->candidateChannelInfo,
1032 candidateChanInfo->channelInfo,
1033 (sizeof(tSirCandidateChanInfo) *
1034 SIR_PER_ROAM_MAX_CANDIDATE_CNT) < chanInfoLen ?
1035 (sizeof(tSirCandidateChanInfo) *
1036 SIR_PER_ROAM_MAX_CANDIDATE_CNT):
1037 chanInfoLen);
1038
1039 limLog(pMac, LOG1,
1040 FL("PER based Roam candidates %d"),
1041 candidateChanInfo->candidateCount);
1042
1043 pMac->PERroamCandidatesCnt = candidateChanInfo->candidateCount;
1044 } else
1045 {
1046 /* Normal RSSI based roaming */
1047 pMac->PERroamCandidatesCnt = 0;
1048 }
1049
Padma, Santhosh Kumar5a3054e2017-02-13 19:05:54 +05301050 pe_sessionid = limGetInfraSessionId(pMac);
1051 if (pe_sessionid != -1) {
1052 psessionEntry = peFindSessionBySessionId(pMac, pe_sessionid);
1053 if (psessionEntry != NULL)
1054 {
1055 if ((psessionEntry->limSmeState == eLIM_SME_WT_DEAUTH_STATE) ||
1056 (psessionEntry->limSmeState == eLIM_SME_WT_DISASSOC_STATE))
1057 {
1058 limLog(pMac, LOG1,
1059 FL("Drop candidate ind as deauth/disassoc in progress"));
1060 goto end;
1061 }
1062 }
1063 }
1064 else
1065 limLog(pMac, LOGE,
1066 FL("session id doesn't exist for infra"));
1067
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -07001068 //send a session 0 for now - TBD
1069 limSendSmeCandidateFoundInd(pMac, 0);
1070 goto end;
1071 }
1072 if (WDA_GET_OFFLOADSCANLEARN(pRxPacketInfo))
1073 {
1074 if (fc.subType == SIR_MAC_MGMT_BEACON)
1075 {
1076 limLog( pMac, LOG2, FL("Save this beacon in LFR cache"));
1077 __limHandleBeacon(pMac, limMsg, NULL);
1078 }
1079 else if (fc.subType == SIR_MAC_MGMT_PROBE_RSP)
1080 {
1081 limLog( pMac, LOG2, FL("Save this probe rsp in LFR cache"));
1082 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
1083 }
1084 else
1085 {
1086 limLog( pMac, LOGE, FL("Wrong frame Type %d, Subtype %d for LFR"),
1087 fc.type, fc.subType);
1088 }
1089 goto end;
1090 }
1091#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001092#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 if (fc.type == SIR_MAC_DATA_FRAME && isFrmFt)
1094 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001095#if 0 // Ese TBD Need to PORT
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tpSirMacDot3Hdr pDataFrmHdr;
1097
1098 pDataFrmHdr = (tpSirMacDot3Hdr)((tANI_U8 *)pBD+ WLANHAL_RX_BD_GET_MPDU_H_OFFSET(pBD));
1099 if((psessionEntry = peFindSessionByBssid(pMac,pDataFrmHdr->sa,&sessionId))== NULL)
1100 {
1101 limLog( pMac, LOGE, FL("Session not found for Frm type %d, subtype %d, SA: "), fc.type, fc.subType);
1102 limPrintMacAddr(pMac, pDataFrmHdr->sa, LOGE);
1103 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pBD, limMsg->bodyptr);
1104 return;
1105 }
1106
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001107 if (!psessionEntry->isESEconnection)
Jeff Johnson295189b2012-06-20 16:38:30 -07001108 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001109 limLog( pMac, LOGE, FL("LIM received Type %d, Subtype %d in Non ESE connection"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001110 fc.type, fc.subType);
1111 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pBD, limMsg->bodyptr);
1112 return;
1113 }
1114 limLog( pMac, LOGE, FL("Processing IAPP Frm from SA:"));
1115 limPrintMacAddr(pMac, pDataFrmHdr->sa, LOGE);
1116#else
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001117 printk("%s: Need to port handling of IAPP frames to PRIMA for ESE", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001118#endif
1119
1120
1121 } else
1122#endif
Siddharth Bhal4f3187c2014-10-09 21:38:08 +05301123
1124 if ((fc.type == SIR_MAC_MGMT_FRAME) &&
1125 (fc.subType == SIR_MAC_MGMT_PROBE_RSP) &&
1126 pMac->lim.isSpoofingEnabled)
1127 {
1128 limLog( pMac, LOG2, FL("Probe Rsp recieved with DA: "MAC_ADDRESS_STR
1129 " and selfMac Addr:"MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->da),
1130 MAC_ADDR_ARRAY(pMac->lim.gSelfMacAddr));
1131 if (VOS_TRUE == vos_mem_compare((v_VOID_t*) pHdr->da,
1132 (v_VOID_t*) pMac->lim.spoofMacAddr, VOS_MAC_ADDRESS_LEN))
1133 {
1134 vos_mem_copy(pHdr->da, pMac->lim.gSelfMacAddr, VOS_MAC_ADDRESS_LEN);
1135 }
1136 }
1137
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 /* Added For BT-AMP Support */
1139 if((psessionEntry = peFindSessionByBssid(pMac,pHdr->bssId,&sessionId))== NULL)
1140 {
1141#ifdef WLAN_FEATURE_VOWIFI_11R
1142 if (fc.subType == SIR_MAC_MGMT_AUTH)
1143 {
1144#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -08001145 limLog( pMac, LOG1, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 fc.protVer, fc.type, fc.subType, WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -08001147 limPrintMacAddr(pMac, pHdr->bssId, LOG1);
Jeff Johnson295189b2012-06-20 16:38:30 -07001148#endif
1149 if (limProcessAuthFrameNoSession(pMac, pRxPacketInfo, limMsg->bodyptr) == eSIR_SUCCESS)
1150 {
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301151 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001152 }
1153 }
1154#endif
1155 if((fc.subType != SIR_MAC_MGMT_PROBE_RSP )&&
1156 (fc.subType != SIR_MAC_MGMT_BEACON)&&
1157 (fc.subType != SIR_MAC_MGMT_PROBE_REQ)
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 && (fc.subType != SIR_MAC_MGMT_ACTION ) //Public action frame can be received from non-associated stations.
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 )
1160 {
1161
1162 if((psessionEntry = peFindSessionByPeerSta(pMac,pHdr->sa,&sessionId))== NULL)
1163 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001164 limLog(pMac, LOG1, FL("session does not exist for given bssId"));
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301165 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 }
Padma, Santhosh Kumar2b47ca82014-01-03 16:57:27 +05301167 else
1168 limLog(pMac,LOG1,"SessionId:%d Session Exist for given Bssid",
1169 psessionEntry->peSessionId);
Gopichand Nakkala6265d6f2013-03-20 23:32:50 +05301170 }
1171 // For p2p resp frames search for valid session with DA as
1172 // BSSID will be SA and session will be present with DA only
1173 if(fc.subType == SIR_MAC_MGMT_ACTION )
1174 {
1175 psessionEntry = peFindSessionByBssid(pMac,pHdr->da,&sessionId);
1176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001177 }
1178
1179
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* Check if frame is registered by HDD */
1181 if(limCheckMgmtRegisteredFrames(pMac, pRxPacketInfo, psessionEntry))
1182 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001183 limLog( pMac, LOG1, FL("Received frame is passed to SME"));
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301184 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001186
1187
Jeff Johnson295189b2012-06-20 16:38:30 -07001188
1189 if (fc.protVer != SIR_MAC_PROTOCOL_VERSION)
1190 { // Received Frame with non-zero Protocol Version
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001191 limLog(pMac, LOGE, FL("Unexpected frame with protVersion %d received"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 fc.protVer);
Jeff Johnson295189b2012-06-20 16:38:30 -07001193#ifdef WLAN_DEBUG
1194 pMac->lim.numProtErr++;
1195#endif
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301196 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 }
1198
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05301199 if (!pMac->fScanOffload)
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 {
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05301201 if (limIsSystemInScanState(pMac))
1202 {
1203 limHandleFramesInScanState(pMac, limMsg, pRxPacketInfo, pDeferMsg, psessionEntry);
1204 return;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 }
1207
1208/* Chance of crashing : to be done BT-AMP ........happens when broadcast probe req is received */
1209
1210#if 0
1211 if (psessionEntry->limSystemRole == eLIM_UNKNOWN_ROLE) {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001212 limLog( pMac, LOGW, FL( "gLimSystemRole is %d. Exiting..." ),psessionEntry->limSystemRole );
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr);
1214
1215#ifdef WLAN_DEBUG
1216 pMac->lim.numProtErr++;
1217#endif
1218 return;
1219 }
1220 #endif //HACK to continue scanning
1221
1222
1223#ifdef WLAN_DEBUG
1224 pMac->lim.numMAC[fc.type][fc.subType]++;
1225#endif
1226
1227 switch (fc.type)
1228 {
1229 case SIR_MAC_MGMT_FRAME:
1230 {
1231 #if 0 //TBD-RAJESH fix this
1232 if (limIsReassocInProgress( pMac,psessionEntry) && (fc.subType != SIR_MAC_MGMT_DISASSOC) &&
1233 (fc.subType != SIR_MAC_MGMT_DEAUTH) && (fc.subType != SIR_MAC_MGMT_REASSOC_RSP))
1234 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001235 limLog(pMac, LOGE, FL("Frame with Type - %d, Subtype - %d received in ReAssoc Wait state, dropping..."),
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 fc.type, fc.subType);
1237 return;
1238 }
1239 #endif //HACK to continue scanning
1240 // Received Management frame
1241 switch (fc.subType)
1242 {
1243 case SIR_MAC_MGMT_ASSOC_REQ:
1244 // Make sure the role supports Association
1245 if ((psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 || (psessionEntry->limSystemRole == eLIM_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 )
1248 limProcessAssocReqFrame(pMac, pRxPacketInfo, LIM_ASSOC, psessionEntry);
1249
1250 else
1251 {
1252 // Unwanted messages - Log error
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001253 limLog(pMac, LOGE, FL("unexpected message received %X"),limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 limPrintMsgName(pMac, LOGE, limMsg->type);
1255 }
1256 break;
1257
1258 case SIR_MAC_MGMT_ASSOC_RSP:
1259 limProcessAssocRspFrame(pMac, pRxPacketInfo, LIM_ASSOC,psessionEntry);
1260 break;
1261
1262 case SIR_MAC_MGMT_REASSOC_REQ:
1263 // Make sure the role supports Reassociation
1264 if ((psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 || (psessionEntry->limSystemRole == eLIM_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001266 ){
1267 limProcessAssocReqFrame(pMac, pRxPacketInfo, LIM_REASSOC, psessionEntry);
1268 }
1269 else
1270 {
1271 // Unwanted messages - Log error
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001272 limLog(pMac, LOGE, FL("unexpected message received %X"),limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001273 limPrintMsgName(pMac, LOGE, limMsg->type);
1274 }
1275 break;
1276
1277 case SIR_MAC_MGMT_REASSOC_RSP:
1278 limProcessAssocRspFrame(pMac, pRxPacketInfo, LIM_REASSOC,psessionEntry);
1279 break;
1280
1281 case SIR_MAC_MGMT_PROBE_REQ:
1282 limProcessProbeReqFrame_multiple_BSS(pMac, pRxPacketInfo,psessionEntry);
1283 break;
1284
1285 case SIR_MAC_MGMT_PROBE_RSP:
1286 if(psessionEntry == NULL)
1287 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
1288 else
1289 limProcessProbeRspFrame(pMac, pRxPacketInfo, psessionEntry);
1290 break;
1291
1292 case SIR_MAC_MGMT_BEACON:
1293 __limHandleBeacon(pMac, limMsg,psessionEntry);
1294 break;
1295
1296 case SIR_MAC_MGMT_DISASSOC:
1297 limProcessDisassocFrame(pMac, pRxPacketInfo,psessionEntry);
1298 break;
1299
1300 case SIR_MAC_MGMT_AUTH:
1301 limProcessAuthFrame(pMac, pRxPacketInfo,psessionEntry);
1302 break;
1303
1304 case SIR_MAC_MGMT_DEAUTH:
1305 limProcessDeauthFrame(pMac, pRxPacketInfo,psessionEntry);
1306 break;
1307
1308 case SIR_MAC_MGMT_ACTION:
Jeff Johnson295189b2012-06-20 16:38:30 -07001309 if(psessionEntry == NULL)
1310 limProcessActionFrameNoSession(pMac, pRxPacketInfo);
1311 else
1312 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001313 if (WDA_GET_RX_UNKNOWN_UCAST(pRxPacketInfo))
1314 limHandleUnknownA2IndexFrames(pMac, pRxPacketInfo,psessionEntry);
1315 else
1316 limProcessActionFrame(pMac, pRxPacketInfo,psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001318 break;
1319 default:
1320 // Received Management frame of 'reserved' subtype
1321 break;
1322 } // switch (fc.subType)
1323
1324 }
1325 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001326 case SIR_MAC_DATA_FRAME:
1327 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001328#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
Jeff Johnson295189b2012-06-20 16:38:30 -07001329 /* We accept data frame (IAPP frame) only if Session is
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001330 * present and ese connection is established on that
Jeff Johnson295189b2012-06-20 16:38:30 -07001331 * session
1332 */
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001333 if (psessionEntry && psessionEntry->isESEconnection) {
Jeff Johnson295189b2012-06-20 16:38:30 -07001334 limProcessIappFrame(pMac, pRxPacketInfo, psessionEntry);
1335 }
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001336#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 }
1338 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001339 default:
1340 // Received frame of type 'reserved'
1341 break;
1342
1343 } // switch (fc.type)
1344
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -07001345end:
Jeff Johnson295189b2012-06-20 16:38:30 -07001346 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr) ;
1347 return;
1348} /*** end limHandle80211Frames() ***/
1349
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301350/**
1351 * limSendStopScanOffloadReq()
1352 *
1353 *FUNCTION:
1354 * This function will be called to abort the ongoing offloaded scan
1355 * request.
1356 *
1357 *
1358 *NOTE:
1359 *
1360 * @param pMac Pointer to Global MAC structure
1361 * @return eHAL_STATUS_SUCCESS or eHAL_STATUS_FAILURE
1362 */
1363eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 SessionId)
1364{
1365 tSirMsgQ msg;
1366 tSirRetStatus rc = eSIR_SUCCESS;
1367 tAbortScanParams *pAbortScanParams;
1368
Kiet Lamb1233192013-11-28 13:38:20 +05301369 pAbortScanParams = vos_mem_malloc(sizeof(tAbortScanParams));
1370 if (NULL == pAbortScanParams)
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301371 {
1372 limLog(pMac, LOGP, FL("Memory allocation failed for AbortScanParams"));
1373 return eHAL_STATUS_FAILURE;
1374 }
1375
1376 pAbortScanParams->SessionId = SessionId;
1377 msg.type = WDA_STOP_SCAN_OFFLOAD_REQ;
1378 msg.bodyptr = pAbortScanParams;
1379 msg.bodyval = 0;
1380
1381 rc = wdaPostCtrlMsg(pMac, &msg);
1382 if (rc != eSIR_SUCCESS)
1383 {
Jeff Johnson0f4d0bc2013-11-03 17:48:50 -08001384 limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"));
Kiet Lamb1233192013-11-28 13:38:20 +05301385 vos_mem_free(pAbortScanParams);
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301386 return eHAL_STATUS_FAILURE;
1387 }
1388
Rashmi Ramanna6c13a342014-01-07 11:44:07 +05301389 limLog(pMac, LOG1, FL("Abort ongoing offload scan."));
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301390 return eHAL_STATUS_SUCCESS;
1391
1392}
Jeff Johnson295189b2012-06-20 16:38:30 -07001393
1394/**
1395 * limProcessAbortScanInd()
1396 *
1397 *FUNCTION:
1398 * This function is called from HDD to abort the scan which is presently being run
1399 *
1400 *
1401 *NOTE:
1402 *
1403 * @param pMac Pointer to Global MAC structure
1404 * @param *pMsgBuf A pointer to the SME message buffer
1405 * @return None
1406 */
1407void
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301408limProcessAbortScanInd(tpAniSirGlobal pMac, tANI_U8 SessionId)
Jeff Johnson295189b2012-06-20 16:38:30 -07001409{
1410#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT
1411 limDiagEventReport(pMac, WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT, NULL, 0, 0);
1412#endif //FEATURE_WLAN_DIAG_SUPPORT
1413
1414 /* Deactivate the gLimBackgroundScanTimer as part of the abort scan.
1415 * SME should send WNI_CFG_BACKGROUND_SCAN_PERIOD indication
1416 * to start the background scan again
1417 */
Abhishek Singh525045c2014-12-15 17:18:45 +05301418 limLog(pMac, LOG1, FL("Processing AbortScan Ind"));
Jeff Johnson295189b2012-06-20 16:38:30 -07001419
1420 limAbortBackgroundScan(pMac);
1421
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301422 if (pMac->fScanOffload)
Jeff Johnson295189b2012-06-20 16:38:30 -07001423 {
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301424 /* send stop scan cmd to fw if scan offload is enabled. */
1425 limSendStopScanOffloadReq(pMac, SessionId);
1426 }
1427 else
1428 {
1429 /* Abort the scan if its running, else just return */
1430 if(limIsSystemInScanState(pMac))
Jeff Johnson295189b2012-06-20 16:38:30 -07001431 {
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301432 if( (eLIM_HAL_INIT_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1433 (eLIM_HAL_START_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1434 (eLIM_HAL_END_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1435 (eLIM_HAL_FINISH_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState) )
1436 {
1437 //Simply signal we need to abort
1438 limLog( pMac, LOGW, FL(" waiting for HAL, simply signal abort gLimHalScanState = %d"), pMac->lim.gLimHalScanState );
1439 pMac->lim.abortScan = 1;
1440 }
1441 else
1442 {
1443 //Force abort
1444 limLog( pMac, LOGW, FL(" Force aborting scan") );
1445 pMac->lim.abortScan = 0;
1446 limDeactivateAndChangeTimer(pMac, eLIM_MIN_CHANNEL_TIMER);
1447 limDeactivateAndChangeTimer(pMac, eLIM_MAX_CHANNEL_TIMER);
1448 //Set the resume channel to Any valid channel (invalid).
1449 //This will instruct HAL to set it to any previous valid channel.
1450 peSetResumeChannel(pMac, 0, 0);
1451 limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE);
1452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001453 }
1454 }
1455 return;
1456}
1457
1458/**
1459 * limMessageProcessor
1460 *
1461 *FUNCTION:
1462 * Wrapper function for limProcessMessages when handling messages received by LIM.
1463 * Could either defer messages or process them.
1464 * @param pMac Pointer to Global MAC structure
1465 * @param limMsg Received LIM message
1466 * @return None
1467 */
1468
1469void limMessageProcessor(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
1470{
1471 if (eLIM_MLM_OFFLINE_STATE == pMac->lim.gLimMlmState)
1472 {
1473 peFreeMsg(pMac, limMsg);
1474 return;
1475 }
1476
1477 if (!defMsgDecision(pMac, limMsg))
1478 {
1479 limProcessMessages(pMac, limMsg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001480 // process deferred message queue if allowed
1481 {
1482 if ( (! (pMac->lim.gLimAddtsSent))
1483 &&
1484 (! (limIsSystemInScanState(pMac)))
1485 )
1486 {
1487 if (true == GET_LIM_PROCESS_DEFD_MESGS(pMac))
1488 limProcessDeferredMessageQueue(pMac);
1489 }
1490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001491 }
1492}
1493
Jeff Johnsone7245742012-09-05 17:12:55 -07001494#ifdef FEATURE_OEM_DATA_SUPPORT
1495
1496void limOemDataRspHandleResumeLinkRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32* mlmOemDataRsp)
1497{
1498 if(status != eHAL_STATUS_SUCCESS)
1499 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001500 limLog(pMac, LOGE, FL("OEM Data Rsp failed to get the response for resume link"));
Jeff Johnsone7245742012-09-05 17:12:55 -07001501 }
1502
1503 if(NULL != pMac->lim.gpLimMlmOemDataReq)
1504 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301505 vos_mem_free(pMac->lim.gpLimMlmOemDataReq);
Jeff Johnsone7245742012-09-05 17:12:55 -07001506 pMac->lim.gpLimMlmOemDataReq = NULL;
1507 }
1508
1509 //"Failure" status doesn't mean that Oem Data Rsp did not happen
1510 //and hence we need to respond to upper layers. Only Resume link is failed, but
1511 //we got the oem data response already.
1512 //Post the meessage to MLM
1513 limPostSmeMessage(pMac, LIM_MLM_OEM_DATA_CNF, (tANI_U32*)(mlmOemDataRsp));
1514
1515 return;
1516}
1517
1518void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body)
1519{
Jeff Johnsone7245742012-09-05 17:12:55 -07001520 tpLimMlmOemDataRsp mlmOemDataRsp = NULL;
1521 tpStartOemDataRsp oemDataRsp = NULL;
1522
1523 //Process all the messages for the lim queue
1524 SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
1525
1526 oemDataRsp = (tpStartOemDataRsp)(body);
1527
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301528 mlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp));
1529 if ( NULL == mlmOemDataRsp )
Jeff Johnsone7245742012-09-05 17:12:55 -07001530 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001531 limLog(pMac, LOGP, FL("could not allocate memory for mlmOemDataRsp"));
Jeff Johnsone7245742012-09-05 17:12:55 -07001532 return;
1533 }
1534
1535 //copy the memory into tLimMlmOemDataRsp and free the tStartOemDataRsp
1536 //the structures tStartOemDataRsp and tLimMlmOemDataRsp have the same structure
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301537 vos_mem_copy((void*)(mlmOemDataRsp), (void*)(oemDataRsp),
1538 sizeof(tLimMlmOemDataRsp));
Jeff Johnsone7245742012-09-05 17:12:55 -07001539
1540 //Now free the incoming memory
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301541 vos_mem_free(oemDataRsp);
Jeff Johnsone7245742012-09-05 17:12:55 -07001542
1543 limResumeLink(pMac, limOemDataRspHandleResumeLinkRsp, (tANI_U32*)mlmOemDataRsp);
1544
1545 return;
1546}
1547
1548#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001549
Katya Nigam3802f202013-12-16 19:27:14 +05301550static tANI_BOOLEAN limAgeOutProbeReq( tpAniSirGlobal pMac, tpSirMsgQ limMsg,
1551 vos_pkt_t *pVosPkt )
1552{
1553 tANI_U8 *pRxPacketInfo = NULL;
1554 tSirMacFrameCtl fc;
1555 tpSirMacMgmtHdr pHdr=NULL;
1556 tANI_BOOLEAN match = VOS_FALSE;
1557
1558 limGetBDfromRxPacket(pMac, limMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
1559 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
1560 fc = pHdr->fc;
1561 if ( fc.subType == SIR_MAC_MGMT_PROBE_REQ )
1562 {
1563 if( vos_timer_get_system_ticks() - pVosPkt->timestamp >= MAX_PROBEREQ_TIME )
1564 {
1565 // drop packet
1566 limLog(pMac, LOGE,
1567 FL("Dropping Aged Out probe requests. Peer MAC is "MAC_ADDRESS_STR),
1568 MAC_ADDR_ARRAY(pHdr->sa));
1569
1570 vos_pkt_return_packet(pVosPkt);
1571 match = VOS_TRUE;
1572 }
1573 }
1574 return match;
1575}
1576
Jeff Johnson295189b2012-06-20 16:38:30 -07001577/**
1578 * limProcessMessages
1579 *
1580 *FUNCTION:
1581 * This function is called by limProcessMessageQueue function. This
1582 * function processes messages received by LIM.
1583 *
1584 *LOGIC:
1585 * Depending on the message type, corresponding function will be
1586 * called, for example limProcessSmeMessages() will be called to
1587 * process SME messages received from HDD/Upper layer software module.
1588 *
1589 *ASSUMPTIONS:
1590 * NA
1591 *
1592 *NOTE:
1593 * NA
1594 *
1595 * @param pMac Pointer to Global MAC structure
1596 * @param limMsg Received LIM message
1597 * @return None
1598 */
1599
1600void
1601limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
1602{
1603 tANI_U8 deferMsg = false;
1604 tLinkStateParams *linkStateParams;
1605#if defined WLAN_FEATURE_VOWIFI_11R
1606 tpPESession pSession;
1607#endif
1608#if defined(ANI_DVT_DEBUG)
1609 tSirMsgQ msgQ;
1610#endif
1611 if(pMac->gDriverType == eDRIVER_TYPE_MFG)
1612 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301613 vos_mem_free(limMsg->bodyptr);
Jeff Johnsone7245742012-09-05 17:12:55 -07001614 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 return;
1616 }
1617#ifdef WLAN_DEBUG
1618 pMac->lim.numTot++;
1619#endif
1620
1621
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001622 PELOG3(limLog(pMac, LOG3, FL("rcvd msgType = %s, sme state = %s, mlm state = %s"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001623 limMsgStr(limMsg->type), limSmeStateStr(pMac->lim.gLimSmeState),
1624 limMlmStateStr(pMac->lim.gLimMlmState));)
1625
Konamki, Sreelakshmi824f93e2015-07-31 12:55:48 +05301626 /*
1627 * MTRACE logs not captured for events received from SME
1628 * SME enums (eWNI_SME_START_REQ) starts with 0x16xx.
1629 * Compare received SME events with SIR_SME_MODULE_ID
Konamki, Sreelakshmi2bfb8b02015-07-29 11:41:24 +05301630 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001631
Konamki, Sreelakshmi824f93e2015-07-31 12:55:48 +05301632 if (SIR_SME_MODULE_ID == (tANI_U8)MAC_TRACE_GET_MODULE_ID(limMsg->type))
1633 {
1634 MTRACE(macTrace(pMac, TRACE_CODE_RX_SME_MSG, NO_SESSION, limMsg->type));
1635 }
1636 else
1637 {
1638 /* Omitting below message types as these are too frequent and when crash
1639 * happens we loose critical trace logs if these are also logged
1640 */
1641 if (limMsg->type != SIR_LIM_MAX_CHANNEL_TIMEOUT &&
1642 limMsg->type != SIR_LIM_MIN_CHANNEL_TIMEOUT &&
1643 limMsg->type != SIR_LIM_PERIODIC_PROBE_REQ_TIMEOUT &&
1644 limMsg->type != SIR_CFG_PARAM_UPDATE_IND &&
1645 limMsg->type != SIR_BB_XPORT_MGMT_MSG)
1646 MTRACE(macTraceMsgRx(pMac, NO_SESSION,
1647 LIM_TRACE_MAKE_RXMSG(limMsg->type, LIM_MSG_PROCESSED));)
1648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001649 switch (limMsg->type)
1650 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001651
1652 case SIR_LIM_UPDATE_BEACON:
1653 limUpdateBeacon(pMac);
1654 break;
1655
Jeff Johnson295189b2012-06-20 16:38:30 -07001656 case SIR_CFG_PARAM_UPDATE_IND:
1657 /// CFG parameter updated
1658 if (limIsSystemInScanState(pMac))
1659 {
1660 // System is in DFS (Learn) mode
1661 // Defer processsing this message
1662 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
1663 {
Leela Venkata Kiran Kumar Reddy Chirala2247e962013-03-22 19:21:10 -07001664 if(!(pMac->lim.deferredMsgCnt & 0xF))
1665 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001666 PELOGE(limLog(pMac, LOGE, FL("Unable to Defer message(0x%X) limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
1668 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
Leela Venkata Kiran Kumar Reddy Chirala2247e962013-03-22 19:21:10 -07001669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001670 limLogSessionStates(pMac);
1671 limPrintMsgName(pMac, LOGE, limMsg->type);
1672 }
1673 }
1674 else
1675 {
1676 limHandleCFGparamUpdate(pMac, limMsg->bodyval);
1677 }
1678
1679 break;
1680
1681 case WDA_INIT_SCAN_RSP:
1682 limProcessInitScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001683 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 break;
1685
1686 case WDA_START_SCAN_RSP:
1687 limProcessStartScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001688 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001689 break;
1690
1691 case WDA_END_SCAN_RSP:
1692 limProcessEndScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001693 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001694 break;
1695
1696 case WDA_FINISH_SCAN_RSP:
1697 limProcessFinishScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001698 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 break;
Jeff Johnsone7245742012-09-05 17:12:55 -07001700#ifdef FEATURE_OEM_DATA_SUPPORT
1701 case WDA_START_OEM_DATA_RSP:
1702 limProcessOemDataRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001703 limMsg->bodyptr = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07001704 break;
1705#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001706
1707 case WDA_SWITCH_CHANNEL_RSP:
1708 limProcessSwitchChannelRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001709 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001710 break;
1711
1712#ifdef ANI_SIR_IBSS_PEER_CACHING
1713 case WDA_IBSS_STA_ADD:
1714 limIbssStaAdd(pMac, limMsg->bodyptr);
1715 break;
1716#endif
1717 case SIR_BB_XPORT_MGMT_MSG:
1718 // These messages are from Peer MAC entity.
1719#ifdef WLAN_DEBUG
1720 pMac->lim.numBbt++;
1721#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 {
1723 v_U16_t pktLen = 0;
1724 vos_pkt_t *pVosPkt;
1725 VOS_STATUS vosStatus;
1726 tSirMsgQ limMsgNew;
Jeff Johnson295189b2012-06-20 16:38:30 -07001727 /* The original limMsg which we were deferring have the
1728 * bodyPointer point to 'BD' instead of 'Vos pkt'. If we don't make a copy
1729 * of limMsg, then vos_pkt_peek_data will overwrite the limMsg->bodyPointer.
1730 * and next time when we try to process the msg, we will try to use 'BD' as
1731 * 'Vos Pkt' which will cause a crash
1732 */
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301733 vos_mem_copy((tANI_U8*)&limMsgNew, (tANI_U8*)limMsg,
1734 sizeof(tSirMsgQ));
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 pVosPkt = (vos_pkt_t *)limMsgNew.bodyptr;
1736 vos_pkt_get_packet_length(pVosPkt, &pktLen);
1737
1738 vosStatus = WDA_DS_PeekRxPacketInfo( pVosPkt, (v_PVOID_t *)&limMsgNew.bodyptr, VOS_FALSE );
1739
1740 if( !VOS_IS_STATUS_SUCCESS(vosStatus) )
1741 {
Katya Nigamfdf5a522015-02-03 14:38:55 +05301742 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 vos_pkt_return_packet(pVosPkt);
1744 break;
1745
1746 }
Katya Nigam3802f202013-12-16 19:27:14 +05301747
Padma, Santhosh Kumar30971cf2015-04-06 19:59:37 +05301748#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
1749 if (WDA_GET_ROAMCANDIDATEIND(limMsgNew.bodyptr))
1750 limLog(pMac, LOG1, FL("roamCandidateInd %d"),
1751 WDA_GET_ROAMCANDIDATEIND(limMsgNew.bodyptr));
1752
1753 if (WDA_GET_OFFLOADSCANLEARN(limMsgNew.bodyptr))
1754 limLog(pMac, LOG1, FL("offloadScanLearn %d"),
1755 WDA_GET_OFFLOADSCANLEARN(limMsgNew.bodyptr));
1756#endif
1757
Katya Nigam3802f202013-12-16 19:27:14 +05301758 /*
1759 * putting a check for age out probe request frames
1760 * such that any probe req more than 0.5 sec old can directly
1761 * be dropped. With this, there won't be blocking of MC thread.
1762 */
1763
1764 if( limAgeOutProbeReq ( pMac, &limMsgNew, pVosPkt ))
1765 {
Katya Nigamfdf5a522015-02-03 14:38:55 +05301766 limDecrementPendingMgmtCount(pMac);
Katya Nigam3802f202013-12-16 19:27:14 +05301767 break;
1768 }
1769
Katya Nigam3802f202013-12-16 19:27:14 +05301770
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 limHandle80211Frames(pMac, &limMsgNew, &deferMsg);
1772
1773 if ( deferMsg == true )
1774 {
Abhishek Singh3cbf6052014-12-15 16:46:42 +05301775 limLog(pMac, LOG2, FL("Defer message type=%X "),
1776 limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001777 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
1778 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001779 PELOGE(limLog(pMac, LOGE, FL("Unable to Defer message(0x%X) limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
1781 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
1782 limLogSessionStates(pMac);
1783 limPrintMsgName(pMac, LOGE, limMsg->type);
Katya Nigamfdf5a522015-02-03 14:38:55 +05301784 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001785 vos_pkt_return_packet(pVosPkt);
1786 }
1787 }
1788 else
1789 {
1790 /* PE is not deferring this 802.11 frame so we need to call vos_pkt_return.
1791 * Asumption here is when Rx mgmt frame processing is done,
1792 * voss packet could be freed here.
1793 */
Katya Nigamfdf5a522015-02-03 14:38:55 +05301794 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 vos_pkt_return_packet(pVosPkt);
1796 }
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001799 case eWNI_SME_SCAN_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001800 case eWNI_SME_REMAIN_ON_CHANNEL_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001801 case eWNI_SME_DISASSOC_REQ:
1802 case eWNI_SME_DEAUTH_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 case eWNI_SME_GET_SCANNED_CHANNEL_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -07001804#ifdef FEATURE_OEM_DATA_SUPPORT
1805 case eWNI_SME_OEM_DATA_REQ:
1806#endif
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001807#ifdef FEATURE_WLAN_TDLS
1808 case eWNI_SME_TDLS_SEND_MGMT_REQ:
1809 case eWNI_SME_TDLS_ADD_STA_REQ:
1810 case eWNI_SME_TDLS_DEL_STA_REQ:
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301811 case eWNI_SME_TDLS_LINK_ESTABLISH_REQ:
Atul Mittalc0f739f2014-07-31 13:47:47 +05301812// tdlsoffchan
1813 case eWNI_SME_TDLS_CHANNEL_SWITCH_REQ:
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001814#endif
Gopichand Nakkalacca24d12013-03-07 17:05:07 +05301815 case eWNI_SME_RESET_AP_CAPS_CHANGED:
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 // These messages are from HDD
1817 limProcessNormalHddMsg(pMac, limMsg, true); //need to response to hdd
1818 break;
1819
1820 case eWNI_SME_SCAN_ABORT_IND:
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301821 {
1822 tANI_U8 *pSessionId = (tANI_U8 *)limMsg->bodyptr;
1823 limProcessAbortScanInd(pMac, *pSessionId);
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 vos_mem_free((v_VOID_t *)limMsg->bodyptr);
1825 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001826 break;
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 case eWNI_SME_START_REQ:
1829 case eWNI_SME_SYS_READY_IND:
1830#ifndef WNI_ASKEY_NON_SUPPORT_FEATURE
1831 case eWNI_SME_JOIN_REQ:
1832#endif
1833 case eWNI_SME_AUTH_REQ:
1834 case eWNI_SME_REASSOC_REQ:
1835 case eWNI_SME_START_BSS_REQ:
1836 case eWNI_SME_STOP_BSS_REQ:
1837 case eWNI_SME_SWITCH_CHL_REQ:
1838 case eWNI_SME_SWITCH_CHL_CB_PRIMARY_REQ:
1839 case eWNI_SME_SWITCH_CHL_CB_SECONDARY_REQ:
1840 case eWNI_SME_SETCONTEXT_REQ:
1841 case eWNI_SME_REMOVEKEY_REQ:
1842#ifndef WNI_ASKEY_NON_SUPPORT_FEATURE
1843 case eWNI_SME_PROMISCUOUS_MODE_REQ:
1844#endif
1845 case eWNI_SME_DISASSOC_CNF:
1846 case eWNI_SME_DEAUTH_CNF:
1847 case eWNI_SME_ASSOC_CNF:
1848 case eWNI_SME_REASSOC_CNF:
1849 case eWNI_SME_ADDTS_REQ:
1850 case eWNI_SME_DELTS_REQ:
1851 case eWNI_SME_DEL_BA_PEER_IND:
1852 case eWNI_SME_SET_TX_POWER_REQ:
1853 case eWNI_SME_GET_TX_POWER_REQ:
1854 case eWNI_SME_GET_NOISE_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001855 case eWNI_SME_GET_ASSOC_STAS_REQ:
1856 case eWNI_SME_TKIP_CNTR_MEAS_REQ:
1857 case eWNI_SME_UPDATE_APWPSIE_REQ:
1858 case eWNI_SME_HIDE_SSID_REQ:
1859 case eWNI_SME_GET_WPSPBC_SESSION_REQ:
1860 case eWNI_SME_SET_APWPARSNIEs_REQ:
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -08001861 case eWNI_SME_CHNG_MCC_BEACON_INTERVAL:
Jeff Johnson295189b2012-06-20 16:38:30 -07001862#if defined WLAN_FEATURE_VOWIFI
1863 case eWNI_SME_NEIGHBOR_REPORT_REQ_IND:
1864 case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
1865#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001866#if defined FEATURE_WLAN_ESE
1867 case eWNI_SME_ESE_ADJACENT_AP_REPORT:
Jeff Johnson295189b2012-06-20 16:38:30 -07001868#endif
1869#ifdef WLAN_FEATURE_VOWIFI_11R
1870 case eWNI_SME_FT_UPDATE_KEY:
1871 case eWNI_SME_FT_PRE_AUTH_REQ:
1872 case eWNI_SME_FT_AGGR_QOS_REQ:
1873#endif
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05301874#ifdef WLAN_FEATURE_LFR_MBB
1875 case eWNI_SME_MBB_PRE_AUTH_REASSOC_REQ:
1876#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 case eWNI_SME_ADD_STA_SELF_REQ:
1878 case eWNI_SME_DEL_STA_SELF_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 case eWNI_SME_REGISTER_MGMT_FRAME_REQ:
1880 case eWNI_SME_UPDATE_NOA:
Gopichand Nakkalac178ac82013-05-30 19:53:39 +05301881 case eWNI_SME_CLEAR_DFS_CHANNEL_LIST:
Madan Mohan Koyyalamudi44bbc152013-07-05 21:13:10 +05301882 case eWNI_SME_STA_STAT_REQ:
1883 case eWNI_SME_AGGR_STAT_REQ:
1884 case eWNI_SME_GLOBAL_STAT_REQ:
1885 case eWNI_SME_STAT_SUMM_REQ:
1886 case eWNI_SME_GET_STATISTICS_REQ:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001887#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Madan Mohan Koyyalamudi44bbc152013-07-05 21:13:10 +05301888 case eWNI_SME_GET_ROAM_RSSI_REQ:
1889#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001890#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07001891 case eWNI_SME_GET_TSM_STATS_REQ:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001892#endif /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
Siddharth Bhal6af5d4e2014-09-29 21:11:16 +05301893 case eWNI_SME_MAC_SPOOF_ADDR_IND:
Abhishek Singh7d624e12015-11-30 14:29:27 +05301894 case eWNI_SME_REGISTER_MGMT_FRAME_CB:
Abhishek Singh02605092017-10-25 14:06:12 +05301895 case eWNI_SME_SET_CHAN_SW_IE_REQ:
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301896 case eWNI_SME_ECSA_CHAN_CHANGE_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 // These messages are from HDD
1898 limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd
1899 break;
1900
1901 //Power Save Messages From HDD
1902 case eWNI_PMC_PWR_SAVE_CFG:
1903 case eWNI_PMC_ENTER_BMPS_REQ:
1904 case eWNI_PMC_EXIT_BMPS_REQ:
1905 case eWNI_PMC_ENTER_IMPS_REQ:
1906 case eWNI_PMC_EXIT_IMPS_REQ:
1907 case eWNI_PMC_ENTER_UAPSD_REQ:
1908 case eWNI_PMC_EXIT_UAPSD_REQ:
1909 case eWNI_PMC_ENTER_WOWL_REQ:
1910 case eWNI_PMC_EXIT_WOWL_REQ:
1911 case eWNI_PMC_WOWL_ADD_BCAST_PTRN:
1912 case eWNI_PMC_WOWL_DEL_BCAST_PTRN:
1913 pmmProcessMessage(pMac, limMsg);
1914 break;
1915
1916 case eWNI_PMC_SMPS_STATE_IND :
1917 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001918 if(limMsg->bodyptr){
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301919 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 limMsg->bodyptr = NULL;
1921 }
1922 }
1923 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 case eWNI_SME_SEND_ACTION_FRAME_IND:
1925 limSendP2PActionFrame(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301926 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001927 limMsg->bodyptr = NULL;
1928 break;
1929 case eWNI_SME_ABORT_REMAIN_ON_CHAN_IND:
1930 limAbortRemainOnChan(pMac);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301931 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 limMsg->bodyptr = NULL;
1933 break;
1934
Abhinav Kumar8eed0362019-08-05 14:26:07 +05301935 case eWNI_SME_SEND_MGMT_FRAME_TX:
1936 lim_send_mgmt_frame_tx(pMac, limMsg);
1937 vos_mem_free(limMsg->bodyptr);
1938 limMsg->bodyptr = NULL;
1939 break;
Dundi Raviteja7e7cdeb2020-09-17 21:32:59 +05301940#ifdef FEATURE_WLAN_SW_PTA
1941 case eWNI_SME_TEARDOWN_LINK_WITH_AP:
1942 {
1943 struct sir_teardown_link *msg;
1944
1945 msg = (struct sir_teardown_link *)limMsg->bodyptr;
1946 limTearDownLinkWithAp(pMac, msg->session_id,
1947 eSIR_MAC_UNSPEC_FAILURE_REASON);
1948 vos_mem_free(limMsg->bodyptr);
1949 limMsg->bodyptr = NULL;
1950 }
1951#endif
Abhinav Kumar8eed0362019-08-05 14:26:07 +05301952
Abhishek Singh00b71972016-01-07 10:51:04 +05301953#ifdef WLAN_FEATURE_RMC
1954 case eWNI_SME_ENABLE_RMC_REQ:
1955 case eWNI_SME_DISABLE_RMC_REQ:
1956 /*
1957 * These messages are from HDD
1958 * No need to response to hdd
1959 */
1960 limProcessSmeReqMessages(pMac,limMsg);
1961 break;
1962#endif /* WLAN_FEATURE_RMC */
1963
Viral Modid86bde22012-12-10 13:09:21 -08001964 case SIR_HAL_P2P_NOA_START_IND:
1965 {
1966 tpPESession psessionEntry = &pMac->lim.gpSession[0];
1967 tANI_U8 i;
Viral Modid440e682013-03-06 02:25:31 -08001968 tANI_U8 p2pGOExists = 0;
Gopichand Nakkala78a6c812013-05-13 16:39:49 +05301969
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001970 limLog(pMac, LOG1, "LIM received NOA start %x", limMsg->type);
Viral Modid440e682013-03-06 02:25:31 -08001971
1972 /* Since insert NOA is done and NOA start msg received, we should deactivate the Insert NOA timer */
1973 limDeactivateAndChangeTimer(pMac, eLIM_INSERT_SINGLESHOT_NOA_TIMER);
1974
Viral Modid86bde22012-12-10 13:09:21 -08001975 for(i=0; i < pMac->lim.maxBssId; i++)
1976 {
1977 psessionEntry = &pMac->lim.gpSession[i];
1978 if ( (psessionEntry != NULL) && (psessionEntry->valid) &&
1979 (psessionEntry->pePersona == VOS_P2P_GO_MODE))
1980 { //Save P2P NOA start attributes for P2P Go persona
Viral Modid440e682013-03-06 02:25:31 -08001981 p2pGOExists = 1;
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301982 vos_mem_copy(&psessionEntry->p2pGoPsNoaStartInd, limMsg->bodyptr,
1983 sizeof(tSirP2PNoaStart));
Viral Modid440e682013-03-06 02:25:31 -08001984 if (psessionEntry->p2pGoPsNoaStartInd.status != eHAL_STATUS_SUCCESS)
Viral Modid86bde22012-12-10 13:09:21 -08001985 {
Viral Modid440e682013-03-06 02:25:31 -08001986 limLog(pMac, LOGW, FL("GO NOA start failure status %d reported by FW."
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001987 " - still go ahead with deferred sme req. This is just info"),
Viral Modid440e682013-03-06 02:25:31 -08001988 psessionEntry->p2pGoPsNoaStartInd.status);
Viral Modid86bde22012-12-10 13:09:21 -08001989 }
Viral Modid86bde22012-12-10 13:09:21 -08001990 break;
1991 }
1992 }
Viral Modid440e682013-03-06 02:25:31 -08001993
1994 if (p2pGOExists == 0)
1995 {
1996 limLog(pMac, LOGW, FL("By the time, we received NOA start, GO is already removed."
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001997 " - still go ahead with deferred sme req. This is just info"));
Viral Modid440e682013-03-06 02:25:31 -08001998 }
1999
2000 /* We received the NOA start indication. Now we can send down the SME request which requires off-channel operation */
2001 limProcessRegdDefdSmeReqAfterNOAStart(pMac);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302002 vos_mem_free(limMsg->bodyptr);
Viral Modid86bde22012-12-10 13:09:21 -08002003 limMsg->bodyptr = NULL;
Viral Modid440e682013-03-06 02:25:31 -08002004 }
Viral Modid86bde22012-12-10 13:09:21 -08002005 break;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302006#ifdef FEATURE_WLAN_TDLS
2007 case SIR_HAL_TDLS_IND:
2008 {
2009 tSirTdlsInd *pTdlsInd = (tpSirTdlsInd)limMsg->bodyptr ;
2010 tpDphHashNode pStaDs = NULL ;
2011 tpPESession psessionEntry = NULL;
2012 tANI_U8 sessionId;
2013 if((psessionEntry = peFindSessionByStaId(pMac,pTdlsInd->staIdx,&sessionId))== NULL)
2014 {
2015 limLog(pMac, LOG1, FL("session does not exist for given bssId\n"));
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302016 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302017 limMsg->bodyptr = NULL;
2018 return;
2019 }
2020 if ((pStaDs = dphGetHashEntry(pMac, pTdlsInd->assocId, &psessionEntry->dph.dphHashTable)) == NULL)
2021 {
2022 limLog(pMac, LOG1, FL("pStaDs Does not exist for given staId\n"));
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302023 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302024 limMsg->bodyptr = NULL;
2025 return;
2026 }
Viral Modid86bde22012-12-10 13:09:21 -08002027
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302028 if ((STA_ENTRY_TDLS_PEER == pStaDs->staType))
2029 {
2030 limLog(pMac, LOGE,
2031 FL("received TDLS Indication from the Firmware with Reason Code %d "),
2032 pTdlsInd->reasonCode);
2033 limSendSmeTDLSDelStaInd(pMac, pStaDs, psessionEntry,
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05302034 pTdlsInd->reasonCode);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302035 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302036 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302037 limMsg->bodyptr = NULL;
2038 }
2039 break;
2040#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 case SIR_HAL_P2P_NOA_ATTR_IND:
2042 {
2043 tpPESession psessionEntry = &pMac->lim.gpSession[0];
2044 tANI_U8 i;
2045
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002046 limLog(pMac, LOGW, FL("Received message Noa_ATTR %x"), limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 for(i=0; i < pMac->lim.maxBssId; i++)
2048 {
Viral Modid86bde22012-12-10 13:09:21 -08002049 psessionEntry = &pMac->lim.gpSession[i];
2050 if ( (psessionEntry != NULL) && (psessionEntry->valid) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07002051 (psessionEntry->pePersona == VOS_P2P_GO_MODE))
2052 { //Save P2P attributes for P2P Go persona
2053
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302054 vos_mem_copy(&psessionEntry->p2pGoPsUpdate, limMsg->bodyptr,
2055 sizeof(tSirP2PNoaAttr));
2056
Arif Hussain24bafea2013-11-15 15:10:03 -08002057 limLog(pMac, LOG2, FL(" &psessionEntry->bssId "
2058 MAC_ADDRESS_STR " ctWin=%d oppPsFlag=%d"),
2059 MAC_ADDR_ARRAY(psessionEntry->bssId),
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 psessionEntry->p2pGoPsUpdate.ctWin,
2061 psessionEntry->p2pGoPsUpdate.oppPsFlag);
2062
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002063 limLog(pMac, LOG2, FL(" uNoa1IntervalCnt=%d uNoa1Duration=%d uNoa1Interval=%d uNoa1StartTime=%d"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 psessionEntry->p2pGoPsUpdate.uNoa1IntervalCnt,
2065 psessionEntry->p2pGoPsUpdate.uNoa1Duration,
2066 psessionEntry->p2pGoPsUpdate.uNoa1Interval,
2067 psessionEntry->p2pGoPsUpdate.uNoa1StartTime);
2068
2069
2070 break;
2071 }
2072 }
2073
2074 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302075 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 limMsg->bodyptr = NULL;
2077
2078 break;
2079
2080
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 /* eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER Message comes after the
2082 * device comes out of full power for the full power request sent
2083 * because of channel switch with switch count as 0, so call the same
2084 * function used in timeout case(i.e SIR_LIM_CHANNEL_SWITCH_TIMEOUT)
2085 * for switching the channel*/
2086 case eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER:
Jeff Johnsone7245742012-09-05 17:12:55 -07002087 if ( !tx_timer_running(&pMac->lim.limTimers.gLimChannelSwitchTimer) )
2088 {
2089 limProcessChannelSwitchTimeout(pMac);
2090 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302091 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 limMsg->bodyptr = NULL;
2093 break;
2094
2095 //Power Save Related Messages From HAL
2096 case WDA_ENTER_BMPS_RSP:
2097 case WDA_EXIT_BMPS_RSP:
2098 case WDA_EXIT_BMPS_IND:
2099 case WDA_ENTER_IMPS_RSP:
2100 case WDA_EXIT_IMPS_RSP:
2101 case WDA_ENTER_UAPSD_RSP:
2102 case WDA_EXIT_UAPSD_RSP:
2103 case WDA_WOWL_ENTER_RSP:
2104 case WDA_WOWL_EXIT_RSP:
2105 pmmProcessMessage(pMac, limMsg);
2106 break;
2107
2108 case WDA_LOW_RSSI_IND:
2109 //limHandleLowRssiInd(pMac);
2110 break;
2111
2112 case WDA_BMPS_STATUS_IND:
2113 limHandleBmpsStatusInd(pMac);
2114 break;
2115
Kapil Gupta7a3d9b12016-12-20 20:36:38 +05302116#ifdef WLAN_FEATURE_APFIND
2117 case WDA_AP_FIND_IND:
2118 limHandleAPFindInd(pMac);
2119 break;
2120#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 case WDA_MISSED_BEACON_IND:
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002122 limHandleMissedBeaconInd(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302123 vos_mem_free(limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002124 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 break;
2126 case WDA_MIC_FAILURE_IND:
2127 limMicFailureInd(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302128 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 limMsg->bodyptr = NULL;
2130 break;
2131
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +05302132 case WDA_LOST_LINK_PARAMS_IND:
2133 limProcessLostLinkParamsInd(pMac,limMsg);
2134 vos_mem_free(limMsg->bodyptr);
2135 limMsg->bodyptr = NULL;
2136 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07002137
2138 case SIR_LIM_ADDTS_RSP_TIMEOUT:
2139 limProcessSmeReqMessages(pMac,limMsg);
2140 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002141#ifdef FEATURE_WLAN_ESE
2142 case SIR_LIM_ESE_TSM_TIMEOUT:
2143#ifndef FEATURE_WLAN_ESE_UPLOAD
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 limProcessTsmTimeoutHandler(pMac,limMsg);
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002145#endif /* FEATURE_WLAN_ESE_UPLOAD */
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 break;
2147 case WDA_TSM_STATS_RSP:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002148#ifdef FEATURE_WLAN_ESE_UPLOAD
2149 limSendSmePEEseTsmRsp(pMac, (tAniGetTsmStatsRsp *)limMsg->bodyptr);
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07002150#else
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002151 limProcessHalEseTsmRsp(pMac, limMsg);
2152#endif /* FEATURE_WLAN_ESE_UPLOAD */
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 break;
2154#endif
2155 case WDA_ADD_TS_RSP:
2156 limProcessHalAddTsRsp(pMac, limMsg);
2157 break;
2158
2159 case SIR_LIM_DEL_TS_IND:
2160 limProcessDelTsInd(pMac, limMsg);
Madan Mohan Koyyalamudif244d8f2012-11-29 11:21:05 -08002161 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 case SIR_LIM_ADD_BA_IND:
2163 limProcessAddBaInd(pMac, limMsg);
2164 break;
2165 case SIR_LIM_DEL_BA_ALL_IND:
Kiran Kumar Lokere458d7322013-05-29 14:29:43 -07002166 limDelAllBASessions(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 break;
2168 case SIR_LIM_DEL_BA_IND:
2169 limProcessMlmHalBADeleteInd( pMac, limMsg );
2170 break;
2171
2172 case SIR_LIM_BEACON_GEN_IND: {
Jeff Johnson295189b2012-06-20 16:38:30 -07002173
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 if( pMac->lim.gLimSystemRole != eLIM_AP_ROLE )
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 schProcessPreBeaconInd(pMac, limMsg);
2176
2177 }
2178 break;
2179
2180 case SIR_LIM_DELETE_STA_CONTEXT_IND:
2181 limDeleteStaContext(pMac, limMsg);
2182 break;
2183
2184 case SIR_LIM_MIN_CHANNEL_TIMEOUT:
2185 case SIR_LIM_MAX_CHANNEL_TIMEOUT:
2186 case SIR_LIM_PERIODIC_PROBE_REQ_TIMEOUT:
2187 case SIR_LIM_JOIN_FAIL_TIMEOUT:
Madan Mohan Koyyalamudi9aff9ff2012-11-29 11:27:25 -08002188 case SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT:
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 case SIR_LIM_AUTH_FAIL_TIMEOUT:
2190 case SIR_LIM_AUTH_RSP_TIMEOUT:
2191 case SIR_LIM_ASSOC_FAIL_TIMEOUT:
2192 case SIR_LIM_REASSOC_FAIL_TIMEOUT:
2193#ifdef WLAN_FEATURE_VOWIFI_11R
2194 case SIR_LIM_FT_PREAUTH_RSP_TIMEOUT:
2195#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 case SIR_LIM_REMAIN_CHN_TIMEOUT:
Viral Modid86bde22012-12-10 13:09:21 -08002197 case SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT:
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08002198 case SIR_LIM_DISASSOC_ACK_TIMEOUT:
2199 case SIR_LIM_DEAUTH_ACK_TIMEOUT:
Gopichand Nakkalad492d202013-05-10 02:50:47 +05302200 case SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE:
Sushant Kaushik9e923872015-04-02 17:09:31 +05302201 case SIR_LIM_AUTH_RETRY_TIMEOUT:
Abhishek Singh550aa8c2017-10-30 17:34:53 +05302202 case SIR_LIM_SAP_ECSA_TIMEOUT:
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05302203#ifdef WLAN_FEATURE_LFR_MBB
2204 case SIR_LIM_PREAUTH_MBB_RSP_TIMEOUT:
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +05302205 case SIR_LIM_REASSOC_MBB_RSP_TIMEOUT:
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05302206#endif
Abhinav Kumar4b039f82020-04-02 14:20:26 +05302207 case SIR_LIM_AUTH_SAE_TIMEOUT:
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 // These timeout messages are handled by MLM sub module
2209
2210 limProcessMlmReqMessages(pMac,
2211 limMsg);
2212
2213 break;
2214
2215 case SIR_LIM_HEART_BEAT_TIMEOUT:
2216 /** check if heart beat failed, even if one Beacon
2217 * is rcvd within the Heart Beat interval continue
2218 * normal processing
2219 */
2220
2221 #if 0
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002222 PELOG1(limLog(pMac, LOG1, FL("Heartbeat timeout, SME %d, MLME %d, #bcn %d"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 pMac->lim.gLimSmeState, pMac->lim.gLimMlmState,
2224 pMac->lim.gLimRxedBeaconCntDuringHB);)
2225
2226 if(pMac->lim.gLimSystemRole == eLIM_STA_IN_IBSS_ROLE)
2227 limIbssHeartBeatHandle(pMac); //HeartBeat for peers.
2228 else
2229 /**
2230 * Heartbeat failure occurred on STA
2231 * This is handled by LMM sub module.
2232 */
2233 limHandleHeartBeatFailure(pMac);
2234
2235 break;
2236 #endif //TO SUPPORT BT-AMP
Yathish9f22e662012-12-10 14:21:35 -08002237 if (limIsSystemInScanState(pMac))
2238 {
2239 // System is in DFS (Learn) mode
2240 // Defer processsing this message
2241 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
2242 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002243 PELOGE(limLog(pMac, LOGE, FL("Unable to Defer message(0x%X) limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Yathish9f22e662012-12-10 14:21:35 -08002244 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
2245 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
2246 limLogSessionStates(pMac);
2247 }
2248 }
2249 else
2250 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002251 if (NULL == limMsg->bodyptr)
2252 {
2253 limHandleHeartBeatTimeout(pMac);
2254 }
2255 else
2256 {
2257 limHandleHeartBeatTimeoutForSession(pMac, (tpPESession)limMsg->bodyptr);
2258 }
Gopichand Nakkala78a6c812013-05-13 16:39:49 +05302259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 break;
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002261
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 case SIR_LIM_PROBE_HB_FAILURE_TIMEOUT:
2263 limHandleHeartBeatFailureTimeout(pMac);
2264 break;
2265
2266 case SIR_LIM_CHANNEL_SCAN_TIMEOUT:
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 /**
2268 * Background scan timeout occurred on STA.
2269 * This is handled by LMM sub module.
2270 */
2271 limDeactivateAndChangeTimer(pMac, eLIM_BACKGROUND_SCAN_TIMER);
2272
2273 //We will do background scan even in bcnps mode
2274 //if (pMac->sys.gSysEnableScanMode)
2275 pMac->lim.gLimReportBackgroundScanResults = FALSE;
2276 limTriggerBackgroundScan(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 break;
2278
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 case SIR_LIM_CNF_WAIT_TIMEOUT:
2280
2281 /*
2282 ** Does not receive CNF or dummy packet
2283 **/
2284 limHandleCnfWaitTimeout(pMac, (tANI_U16) limMsg->bodyval);
2285
2286 break;
2287
2288 case SIR_LIM_KEEPALIVE_TIMEOUT:
2289 limSendKeepAliveToPeer(pMac);
2290
2291 break;
2292
2293 case SIR_LIM_RETRY_INTERRUPT_MSG:
2294 // Message from ISR upon TFP's max retry limit interrupt
2295
2296 break;
2297
2298 case SIR_LIM_INV_KEY_INTERRUPT_MSG:
2299 // Message from ISR upon SP's Invalid session key interrupt
2300
2301 break;
2302
2303 case SIR_LIM_KEY_ID_INTERRUPT_MSG:
2304 // Message from ISR upon SP's Invalid key ID interrupt
2305
2306 break;
2307
2308 case SIR_LIM_REPLAY_THRES_INTERRUPT_MSG:
2309 // Message from ISR upon SP's Replay threshold interrupt
2310
2311 break;
2312
2313 case SIR_LIM_CHANNEL_SWITCH_TIMEOUT:
2314 limProcessChannelSwitchTimeout(pMac);
2315 break;
2316
2317 case SIR_LIM_QUIET_TIMEOUT:
2318 limProcessQuietTimeout(pMac);
2319 break;
2320
2321 case SIR_LIM_QUIET_BSS_TIMEOUT:
2322 limProcessQuietBssTimeout(pMac);
2323 break;
2324
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 case SIR_LIM_UPDATE_OLBC_CACHEL_TIMEOUT:
2326 limHandleUpdateOlbcCache(pMac);
2327 break;
2328#if 0
2329 case SIR_LIM_WPS_OVERLAP_TIMEOUT:
2330 limProcessWPSOverlapTimeout(pMac);
2331 break;
2332#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 case WDA_ADD_BSS_RSP:
2334 limProcessMlmAddBssRsp( pMac, limMsg );
2335 break;
2336
2337 case WDA_ADD_STA_RSP:
2338
2339 //call a wrapper by paasing bodyptr, their get sessionID and and call proper function from there.
2340 limProcessAddStaRsp(pMac,limMsg);
2341 break;
2342
2343 case WDA_DELETE_STA_RSP:
2344 limProcessMlmDelStaRsp(pMac, limMsg);
2345 break;
2346
2347 case WDA_ADD_STA_SELF_RSP:
2348 limProcessAddStaSelfRsp(pMac, limMsg);
2349 break;
2350 case WDA_DEL_STA_SELF_RSP:
2351 limProcessDelStaSelfRsp(pMac, limMsg);
2352 break;
2353
2354 case WDA_DELETE_BSS_RSP:
2355 limHandleDeleteBssRsp(pMac,limMsg); //wrapper routine to handle delete bss response
2356 break;
2357
2358 case WDA_SET_BSSKEY_RSP:
2359 case WDA_SET_STA_BCASTKEY_RSP:
2360 limProcessMlmSetBssKeyRsp( pMac, limMsg );
2361 break;
2362 case WDA_SET_STAKEY_RSP:
2363 limProcessMlmSetStaKeyRsp( pMac, limMsg );
2364 break;
2365 case WDA_REMOVE_BSSKEY_RSP:
2366 case WDA_REMOVE_STAKEY_RSP:
2367 limProcessMlmRemoveKeyRsp( pMac, limMsg );
2368 break;
2369 case WDA_ADDBA_RSP:
2370 limProcessMlmHalAddBARsp( pMac, limMsg );
2371 break;
2372
2373 case WDA_STA_STAT_RSP:
2374 case WDA_AGGR_STAT_RSP:
2375 case WDA_GLOBAL_STAT_RSP:
2376 case WDA_STAT_SUMM_RSP:
2377 limSendSmeStatsRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2378 break;
2379
2380 case WDA_GET_STATISTICS_RSP:
2381 limSendSmePEStatisticsRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2382 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002383#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08002384 case WDA_GET_ROAM_RSSI_RSP:
2385 limSendSmePEGetRoamRssiRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2386 break;
2387#endif
2388
Jeff Johnson295189b2012-06-20 16:38:30 -07002389
2390 case WDA_SET_MIMOPS_RSP: //limProcessSetMimoRsp(pMac, limMsg);
2391 case WDA_SET_TX_POWER_RSP: //limProcessSetTxPowerRsp(pMac, limMsg);
2392 case WDA_GET_TX_POWER_RSP: //limProcessGetTxPowerRsp(pMac, limMsg);
2393 case WDA_GET_NOISE_RSP:
2394 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2395 limMsg->bodyptr = NULL;
2396 //limProcessGetNoiseRsp(pMac, limMsg);
2397 break;
2398
2399 case WDA_SET_MAX_TX_POWER_RSP:
2400#if defined WLAN_FEATURE_VOWIFI
2401 rrmSetMaxTxPowerRsp( pMac, limMsg );
2402#endif
2403 if(limMsg->bodyptr != NULL)
2404 {
2405 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2406 limMsg->bodyptr = NULL;
2407 }
2408 break;
2409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 case SIR_LIM_ADDR2_MISS_IND:
2411 {
2412 limLog(pMac, LOGE,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002413 FL("Addr2 mismatch interrupt received %X"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 limMsg->type);
2415 /*a message from HAL indicating addr2 mismatch interrupt occurred
2416 limMsg->bodyptr contains only pointer to 48-bit addr2 field*/
2417 //Dinesh fix this. the third parameter should be sessionentry.
2418 //limHandleUnknownA2IndexFrames(pMac, (void *)limMsg->bodyptr);
2419
2420 /*Free message body pointer*/
2421 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002422 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 break;
2424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002425
2426#ifdef WLAN_FEATURE_VOWIFI_11R
2427 case WDA_AGGR_QOS_RSP:
2428 limProcessFTAggrQoSRsp( pMac, limMsg );
2429 break;
2430#endif
2431
2432 case WDA_SET_LINK_STATE_RSP:
2433 linkStateParams = (tLinkStateParams *)limMsg->bodyptr;
2434#if defined WLAN_FEATURE_VOWIFI_11R
2435 pSession = linkStateParams->session;
2436 if(linkStateParams->ft)
2437 {
2438 limSendReassocReqWithFTIEsMgmtFrame(pMac,
2439 pSession->pLimMlmReassocReq,
2440 pSession);
2441 }
2442#endif
2443 if( linkStateParams->callback )
2444 {
2445 linkStateParams->callback( pMac, linkStateParams->callbackArg );
2446 }
2447 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002448 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 break;
2450
2451#ifdef WLAN_FEATURE_PACKET_FILTERING
2452 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP:
2453 pmmProcessMessage(pMac, limMsg);
2454 break;
2455#endif // WLAN_FEATURE_PACKET_FILTERING
2456
2457#ifdef WLAN_FEATURE_GTK_OFFLOAD
2458 case WDA_GTK_OFFLOAD_GETINFO_RSP:
2459 pmmProcessMessage(pMac, limMsg);
2460 break;
2461#endif // WLAN_FEATURE_GTK_OFFLOAD
Yathish9f22e662012-12-10 14:21:35 -08002462 case eWNI_SME_SET_BCN_FILTER_REQ:
2463 {
2464#ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE
2465 tpPESession psessionEntry;
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302466 tANI_U8 sessionId;
2467 tSirSetActiveModeSetBncFilterReq *bcnFilterReq =
2468 (tSirSetActiveModeSetBncFilterReq *)limMsg->bodyptr;
2469 psessionEntry = peFindSessionByBssid(pMac, bcnFilterReq->bssid,
2470 &sessionId);
Yathish9f22e662012-12-10 14:21:35 -08002471 if(psessionEntry != NULL && IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)
2472 {
2473 // sending beacon filtering information down to HAL
2474 if (limSendBeaconFilterInfo(pMac, psessionEntry) != eSIR_SUCCESS)
2475 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002476 limLog(pMac, LOGE, FL("Fail to send Beacon Filter Info "));
Yathish9f22e662012-12-10 14:21:35 -08002477 }
2478 }
Dhanashri Atred7885c22013-03-29 11:19:05 -07002479 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2480 limMsg->bodyptr = NULL;
Yathish9f22e662012-12-10 14:21:35 -08002481#endif
2482 }
2483 break;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302484 case eWNI_SME_HT40_OBSS_SCAN_IND:
2485 {
Sandeep Puligilla9f384742014-04-11 02:27:04 +05302486 tpPESession psessionEntry = NULL;
2487 tANI_U8 sessionId;
2488 tSirSmeHT40OBSSScanInd *ht40ScanInd =
Siddharth Bhald31c1252014-05-05 19:34:14 +05302489 (tSirSmeHT40OBSSScanInd *)limMsg->bodyptr;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302490
Sandeep Puligilla9f384742014-04-11 02:27:04 +05302491 psessionEntry = peFindSessionByBssid(pMac, ht40ScanInd->peerMacAddr,
Siddharth Bhald31c1252014-05-05 19:34:14 +05302492 &sessionId);
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302493
Siddharth Bhald31c1252014-05-05 19:34:14 +05302494 if (psessionEntry != NULL)
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302495 {
Siddharth Bhald31c1252014-05-05 19:34:14 +05302496 if( IS_HT40_OBSS_SCAN_FEATURE_ENABLE &&
2497 psessionEntry->htSupportedChannelWidthSet ==
2498 WNI_CFG_CHANNEL_BONDING_MODE_ENABLE )
2499 {
2500 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
2501 "OBSS Scan Start Req: session id %d"
2502 "htSupportedChannelWidthSet %d", psessionEntry->peSessionId,
2503 psessionEntry->htSupportedChannelWidthSet);
2504 limSendHT40OBSSScanInd(pMac, psessionEntry);
2505 }
2506 else
2507 {
2508 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
2509 "OBSS Scan not started: htSupportedChannelWidthSet- %d"
2510 " session id %d", psessionEntry->htSupportedChannelWidthSet,
2511 psessionEntry->peSessionId);
2512 }
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302513 }
2514 else
2515 {
2516 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
Siddharth Bhald31c1252014-05-05 19:34:14 +05302517 "OBSS Scan not started: session id is NULL");
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302518 }
2519 vos_mem_free(limMsg->bodyptr);
2520 limMsg->bodyptr = NULL;
2521 }
2522 break;
2523 case eWNI_SME_HT40_STOP_OBSS_SCAN_IND:
2524 {
2525 tpPESession psessionEntry = NULL;
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302526 tANI_U8 sessionId;
2527 tSirSmeHT40OBSSStopScanInd *ht40StopScanInd =
2528 (tSirSmeHT40OBSSStopScanInd *)limMsg->bodyptr;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302529
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302530 psessionEntry = peFindSessionByBssid(pMac,
2531 ht40StopScanInd->bssid, &sessionId);;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302532 /* Sending LIM STOP OBSS SCAN Indication
2533 Stop command support is only for debugging purpose */
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302534 if (psessionEntry && IS_HT40_OBSS_SCAN_FEATURE_ENABLE)
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302535 limSendHT40OBSSStopScanInd(pMac, psessionEntry);
2536 else
2537 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_ERROR,
2538 "OBSS Scan Stop not started ");
2539 }
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302540 vos_mem_free(limMsg->bodyptr);
2541 limMsg->bodyptr = NULL;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302542 break;
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05302543#ifdef WLAN_FEATURE_AP_HT40_24G
2544 case eWNI_SME_SET_HT_2040_MODE:
2545 limProcessSmeReqMessages(pMac, limMsg);
2546 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2547 limMsg->bodyptr = NULL;
2548 break;
2549#endif
2550
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302551#ifdef FEATURE_WLAN_TDLS
2552 case WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP:
2553 {
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302554 tpPESession psessionEntry;
2555 tANI_U8 sessionId;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302556 tDphHashNode *pStaDs = NULL;
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302557 int i, aid;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05302558 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
2559 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams*) limMsg->bodyptr;
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302560
2561 if((psessionEntry = peFindSessionByStaId(pMac,
2562 pTdlsLinkEstablishParams->staIdx,
2563 &sessionId))== NULL)
2564 {
Sushant Kaushik87787972015-09-11 16:05:00 +05302565 limLog(pMac, LOGE, FL("session %u does not exist"), sessionId);
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302566 /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME
2567 with session id as zero and status as FAILURE so, that message
2568 queued in SME queue can be freed to prevent the SME cmd buffer leak */
2569 limSendSmeTdlsLinkEstablishReqRsp(pMac,
2570 0,
2571 NULL,
2572 NULL,
2573 eSIR_FAILURE);
2574 }
2575 else
2576 {
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302577 for (i = 0;
2578 i < sizeof(psessionEntry->peerAIDBitmap)/sizeof(tANI_U32);
2579 i++) {
2580 for (aid = 0; aid < (sizeof(tANI_U32) << 3); aid++) {
2581 if (CHECK_BIT(psessionEntry->peerAIDBitmap[i], aid)) {
2582 pStaDs = dphGetHashEntry(pMac,
2583 (aid + i*(sizeof(tANI_U32) << 3)),
2584 &psessionEntry->dph.dphHashTable);
2585 if ((NULL != pStaDs) &&
2586 (pTdlsLinkEstablishParams->staIdx ==
2587 pStaDs->staIndex))
2588 goto send_link_resp;
2589 }
2590 }
2591 }
2592send_link_resp:
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302593 if (pStaDs)
2594 limSendSmeTdlsLinkEstablishReqRsp(pMac,
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302595 psessionEntry->smeSessionId,
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302596 pStaDs->staAddr,
2597 pStaDs,
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302598 pTdlsLinkEstablishParams->status) ;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302599 else
2600 limSendSmeTdlsLinkEstablishReqRsp(pMac,
2601 psessionEntry->smeSessionId,
2602 NULL, NULL,
2603 pTdlsLinkEstablishParams->status) ;
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302604 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05302605 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2606 limMsg->bodyptr = NULL;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302607 break;
2608 }
Atul Mittal60bd4292014-08-14 12:19:27 +05302609
2610 case WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP:
2611 {
2612 tpPESession psessionEntry;
2613 tANI_U8 sessionId;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302614 tDphHashNode *pStaDs = NULL;
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302615 int i, aid;
Atul Mittal60bd4292014-08-14 12:19:27 +05302616 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
2617 pTdlsChanSwitchParams = (tTdlsChanSwitchParams*) limMsg->bodyptr;
2618
2619 if((psessionEntry = peFindSessionByStaId(pMac,
2620 pTdlsChanSwitchParams->staIdx,
2621 &sessionId))== NULL)
2622 {
Sushant Kaushik87787972015-09-11 16:05:00 +05302623 limLog(pMac, LOGE, FL("session %u does not exist"), sessionId);
Atul Mittal60bd4292014-08-14 12:19:27 +05302624 /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME
2625 with session id as zero and status as FAILURE so, that message
2626 queued in SME queue can be freed to prevent the SME cmd buffer leak */
2627 limSendSmeTdlsChanSwitchReqRsp(pMac,
2628 0,
2629 NULL,
2630 NULL,
2631 eSIR_FAILURE);
2632 }
2633 else
2634 {
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302635 for (i = 0;
2636 i < sizeof(psessionEntry->peerAIDBitmap)/sizeof(tANI_U32);
2637 i++) {
2638 for (aid = 0; aid < (sizeof(tANI_U32) << 3); aid++) {
2639 if (CHECK_BIT(psessionEntry->peerAIDBitmap[i], aid)) {
2640 pStaDs = dphGetHashEntry(pMac,
2641 (aid + i*(sizeof(tANI_U32) << 3)),
2642 &psessionEntry->dph.dphHashTable);
2643 if ((NULL != pStaDs) &&
2644 (pTdlsChanSwitchParams->staIdx ==
2645 pStaDs->staIndex))
2646 goto send_chan_switch_resp;
2647 }
2648 }
2649 }
2650send_chan_switch_resp:
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302651 if (pStaDs)
2652 limSendSmeTdlsChanSwitchReqRsp(pMac,
Atul Mittal60bd4292014-08-14 12:19:27 +05302653 psessionEntry->smeSessionId,
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302654 pStaDs->staAddr,
2655 pStaDs,
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302656 pTdlsChanSwitchParams->status);
2657 else
2658 limSendSmeTdlsChanSwitchReqRsp(pMac,
2659 psessionEntry->smeSessionId,
2660 NULL, NULL,
2661 pTdlsChanSwitchParams->status);
Atul Mittal60bd4292014-08-14 12:19:27 +05302662 }
2663 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2664 limMsg->bodyptr = NULL;
2665 break;
2666 }
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302667#endif
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05302668
2669 case WDA_RX_SCAN_EVENT:
2670 limProcessRxScanEvent(pMac, limMsg->bodyptr);
2671 break;
2672
Ravi Joshid2ca7c42013-07-23 08:37:49 -07002673 case WDA_IBSS_PEER_INACTIVITY_IND:
2674 {
2675 limProcessIbssPeerInactivity(pMac, limMsg->bodyptr);
2676 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2677 limMsg->bodyptr = NULL;
2678 break;
2679 }
Abhishek Singh00b71972016-01-07 10:51:04 +05302680#ifdef WLAN_FEATURE_RMC
2681 case WDA_RMC_BECOME_RULER:
2682 limProcessRMCMessages(pMac, eLIM_RMC_BECOME_RULER_RESP,
2683 (void *)limMsg->bodyptr);
2684 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2685 limMsg->bodyptr = NULL;
2686 break ;
2687
2688 case WDA_RMC_RULER_SELECT_RESP:
2689 limProcessRMCMessages(pMac, eLIM_RMC_RULER_SELECT_RESP,
2690 (void *)limMsg->bodyptr);
2691 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2692 limMsg->bodyptr = NULL;
2693 break ;
2694
2695 case WDA_RMC_UPDATE_IND:
2696 limProcessRMCMessages(pMac, eLIM_RMC_RULER_PICK_NEW,
2697 (void *)limMsg->bodyptr);
2698 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2699 limMsg->bodyptr = NULL;
2700 break ;
2701#endif /* WLAN_FEATURE_RMC */
Ravi Joshid2ca7c42013-07-23 08:37:49 -07002702
Siddharth Bhal4f3187c2014-10-09 21:38:08 +05302703 case WDA_SPOOF_MAC_ADDR_RSP:
2704 limProcessMlmSpoofMacAddrRsp(pMac, (tSirRetStatus)limMsg->bodyval);
2705 break;
2706
Pradeep Reddy POTTETI31505892015-04-16 16:47:54 +05302707 case eWNI_SME_SET_TDLS_2040_BSSCOEX_REQ:
2708 limProcessSmeSetTdls2040BSSCoexReq(pMac, limMsg->bodyptr);
2709 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2710 limMsg->bodyptr = NULL;
2711 break;
2712
Masti, Narayanraddi1fb32a92015-06-29 13:14:06 +05302713 case eWNI_SME_DEL_ALL_TDLS_PEERS:
2714 limProcessSmeDelAllTdlsPeers(pMac, limMsg->bodyptr);
2715 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2716 limMsg->bodyptr = NULL;
2717 break;
Manjeet Singh3ed79242017-01-11 19:04:32 +05302718
2719 case eWNI_SME_CAP_TSF_REQ:
2720 lim_process_sme_cap_tsf_req(pMac, limMsg->bodyptr);
2721 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2722 limMsg->bodyptr = NULL;
2723 break;
2724
2725 case eWNI_SME_GET_TSF_REQ:
2726 lim_process_sme_get_tsf_req(pMac, limMsg->bodyptr);
2727 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2728 limMsg->bodyptr = NULL;
2729 break;
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +05302730 case eWNI_SME_DEL_BA_SES_REQ:
2731 lim_process_sme_del_ba_ses_req(pMac, limMsg->bodyptr);
2732 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2733 limMsg->bodyptr = NULL;
2734 break;
Yeshwanth Sriram Guntuka8d9b29c2017-12-12 15:44:57 +05302735 case eWNI_SME_STA_DEL_BA_REQ:
2736 limStaDelBASession(pMac);
2737 break;
Abhinav Kumard9664da2019-08-05 17:11:25 +05302738 case eWNI_SME_SEND_SAE_MSG:
2739 lim_process_sae_msg(pMac, limMsg->bodyptr);
2740 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2741 limMsg->bodyptr = NULL;
2742 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 default:
2744 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2745 limMsg->bodyptr = NULL;
2746 // Unwanted messages
2747 // Log error
2748 limLog(pMac, LOGE,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002749 FL("Discarding unexpected message received %X"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 limMsg->type);
2751 limPrintMsgName(pMac, LOGE, limMsg->type);
2752 break;
2753
2754 } // switch (limMsg->type)
2755
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002756 PELOG2(limLog(pMac, LOG2, FL("Done Processing msgType = %d, sme state = %s, mlm state = %s"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 limMsg->type, limSmeStateStr(pMac->lim.gLimSmeState),
2758 limMlmStateStr(pMac->lim.gLimMlmState));)
2759
2760} /*** end limProcessMessages() ***/
2761
2762
2763
2764/**
2765 * limProcessDeferredMessageQueue
2766 *
2767 *FUNCTION:
2768 * This function is called by LIM while exiting from Learn
2769 * mode. This function fetches messages posted to the LIM
2770 * deferred message queue limDeferredMsgQ.
2771 *
2772 *LOGIC:
2773 *
2774 *ASSUMPTIONS:
2775 * NA
2776 *
2777 *NOTE:
2778 * NA
2779 *
2780 * @param pMac - Pointer to Global MAC structure
2781 * @return None
2782 */
2783
2784void
2785limProcessDeferredMessageQueue(tpAniSirGlobal pMac)
2786{
2787 tSirMsgQ limMsg = { 0, 0, 0 };
2788
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 tSirMsgQ *readMsg;
2790 tANI_U16 size;
2791
2792 /*
2793 ** check any deferred messages need to be processed
2794 **/
2795 size = pMac->lim.gLimDeferredMsgQ.size;
2796 if (size > 0)
2797 {
2798 while ((readMsg = limReadDeferredMsgQ(pMac)) != NULL)
2799 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302800 vos_mem_copy((tANI_U8*) &limMsg,
Jeff Johnson295189b2012-06-20 16:38:30 -07002801 (tANI_U8*) readMsg, sizeof(tSirMsgQ));
2802 size--;
2803 limProcessMessages(pMac, &limMsg);
2804
2805 if((limIsSystemInScanState(pMac)) || (true != GET_LIM_PROCESS_DEFD_MESGS(pMac)) ||
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +05302806 (pMac->lim.gLimSystemInScanLearnMode) || pMac->lim.gLimAddtsSent)
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 break;
2808 }
2809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002810} /*** end limProcessDeferredMessageQueue() ***/
2811
2812
2813/*
2814 * limProcessNormalHddMsg
2815 * Function: this function checks the current lim state and decide whether the message passed shall be deffered.
2816 * @param pMac - Pointer to Global MAC structure
2817 * pLimMsg -- the message need to be processed
2818 * fRspReqd -- whether return result to hdd
2819 * @return None
2820 */
2821void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRspReqd)
2822{
2823 tANI_BOOLEAN fDeferMsg = eANI_BOOLEAN_TRUE;
2824
2825 /* Added For BT-AMP Support */
2826 if ((pMac->lim.gLimSystemRole == eLIM_AP_ROLE) ||(pMac->lim.gLimSystemRole == eLIM_BT_AMP_AP_ROLE )
2827 ||(pMac->lim.gLimSystemRole == eLIM_BT_AMP_STA_ROLE)
2828 ||(pMac->lim.gLimSystemRole == eLIM_UNKNOWN_ROLE))
2829 {
2830 /** This check is required only for the AP and in 2 cases.
2831 * 1. If we are in learn mode and we receive any of these messages,
2832 * you have to come out of scan and process the message, hence dont
2833 * defer the message here. In handler, these message could be defered
2834 * till we actually come out of scan mode.
2835 * 2. If radar is detected, you might have to defer all of these
2836 * messages except Stop BSS request/ Switch channel request. This
2837 * decision is also made inside its handler.
2838 *
2839 * Please be careful while using the flag fDeferMsg. Possibly you
2840 * might end up in an infinite loop.
2841 **/
2842 if (((pLimMsg->type == eWNI_SME_START_BSS_REQ) ||
2843 (pLimMsg->type == eWNI_SME_STOP_BSS_REQ) ||
2844 (pLimMsg->type == eWNI_SME_SWITCH_CHL_REQ) ||
2845 (pLimMsg->type == eWNI_SME_SWITCH_CHL_CB_SECONDARY_REQ) ||
2846 (pLimMsg->type == eWNI_SME_SWITCH_CHL_CB_PRIMARY_REQ)))
2847 {
2848 fDeferMsg = eANI_BOOLEAN_FALSE;
2849 }
2850 }
2851
2852 /* limInsystemInscanState() refers the psessionEntry, how to get session Entry????*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002853 if (((pMac->lim.gLimAddtsSent) || (limIsSystemInScanState(pMac)) /*||
2854 (LIM_IS_RADAR_DETECTED(pMac))*/) && fDeferMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 {
2856 // System is in DFS (Learn) mode or awaiting addts response
2857 // or if radar is detected, Defer processsing this message
2858 if (limDeferMsg(pMac, pLimMsg) != TX_SUCCESS)
2859 {
2860#ifdef WLAN_DEBUG
2861 pMac->lim.numSme++;
2862#endif
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002863 PELOGE(limLog(pMac, LOGE, FL("Unable to Defer message(0x%X) limSmeState %d (prev sme state %d) sysRole %d mlm state %d (prev mlm state %d)"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 pLimMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
2865 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
2866 limLogSessionStates(pMac);
2867 limPrintMsgName(pMac, LOGE, pLimMsg->type);
2868 // Release body
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302869 vos_mem_free(pLimMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002870 pLimMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 }
2872 }
2873 else
2874 {
2875 if(fRspReqd)
2876 {
2877 // These messages are from HDD
2878 // Since these requests may also be generated
2879 // internally within LIM module, need to
2880 // distinquish and send response to host
2881 pMac->lim.gLimRspReqd = eANI_BOOLEAN_TRUE;
2882 }
2883#ifdef WLAN_DEBUG
2884 pMac->lim.numSme++;
2885#endif
2886 if(limProcessSmeReqMessages(pMac, pLimMsg))
2887 {
2888 // Release body
2889 // limProcessSmeReqMessage consumed the buffer. We can free it.
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302890 vos_mem_free(pLimMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002891 pLimMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 }
2893 }
2894}
2895
2896void
Jeff Johnsone7245742012-09-05 17:12:55 -07002897handleHTCapabilityandHTInfo(struct sAniSirGlobal *pMac, tpPESession psessionEntry)
Jeff Johnson295189b2012-06-20 16:38:30 -07002898{
2899 tSirMacHTCapabilityInfo macHTCapabilityInfo;
2900 tSirMacHTParametersInfo macHTParametersInfo;
2901 tSirMacHTInfoField1 macHTInfoField1;
2902 tSirMacHTInfoField2 macHTInfoField2;
2903 tSirMacHTInfoField3 macHTInfoField3;
2904 tANI_U32 cfgValue;
2905 tANI_U8 *ptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &cfgValue) != eSIR_SUCCESS)
2908 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002909 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_CAP_INFO value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 return ;
2911 }
2912 ptr = (tANI_U8 *) &macHTCapabilityInfo;
2913 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2914 pMac->lim.gHTLsigTXOPProtection = (tANI_U8)macHTCapabilityInfo.lsigTXOPProtection;
2915 pMac->lim.gHTMIMOPSState = (tSirMacHTMIMOPowerSaveState) macHTCapabilityInfo.mimoPowerSave;
2916 pMac->lim.gHTGreenfield = (tANI_U8)macHTCapabilityInfo.greenField;
2917 pMac->lim.gHTMaxAmsduLength = (tANI_U8)macHTCapabilityInfo.maximalAMSDUsize;
2918 pMac->lim.gHTShortGI20Mhz = (tANI_U8)macHTCapabilityInfo.shortGI20MHz;
2919 pMac->lim.gHTShortGI40Mhz = (tANI_U8)macHTCapabilityInfo.shortGI40MHz;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 pMac->lim.gHTPSMPSupport = (tANI_U8)macHTCapabilityInfo.psmp;
2921 pMac->lim.gHTDsssCckRate40MHzSupport = (tANI_U8)macHTCapabilityInfo.dsssCckMode40MHz;
2922
2923 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, &cfgValue) != eSIR_SUCCESS)
2924 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002925 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_PARAM_INFO value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 return ;
2927 }
2928 ptr = (tANI_U8 *) &macHTParametersInfo;
2929 *ptr = (tANI_U8) (cfgValue & 0xff);
2930 pMac->lim.gHTAMpduDensity = (tANI_U8)macHTParametersInfo.mpduDensity;
2931 pMac->lim.gHTMaxRxAMpduFactor = (tANI_U8)macHTParametersInfo.maxRxAMPDUFactor;
2932
2933 // Get HT IE Info
2934 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD1, &cfgValue) != eSIR_SUCCESS)
2935 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002936 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD1 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return ;
2938 }
2939 ptr = (tANI_U8 *) &macHTInfoField1;
2940 *((tANI_U8 *)ptr) = (tANI_U8) (cfgValue & 0xff);
2941 pMac->lim.gHTServiceIntervalGranularity = (tANI_U8)macHTInfoField1.serviceIntervalGranularity;
2942 pMac->lim.gHTControlledAccessOnly = (tANI_U8)macHTInfoField1.controlledAccessOnly;
2943 pMac->lim.gHTRifsMode = (tANI_U8)macHTInfoField1.rifsMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944
2945 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD2, &cfgValue) != eSIR_SUCCESS)
2946 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002947 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD2 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 return ;
2949 }
2950 ptr = (tANI_U8 *) &macHTInfoField2;
2951 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2952 pMac->lim.gHTOperMode = (tSirMacHTOperatingMode) macHTInfoField2.opMode;
2953
2954 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD3, &cfgValue) != eSIR_SUCCESS)
2955 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002956 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD3 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 return ;
2958 }
2959 ptr = (tANI_U8 *) &macHTInfoField3;
2960 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2961 pMac->lim.gHTPCOActive = (tANI_U8)macHTInfoField3.pcoActive;
2962 pMac->lim.gHTPCOPhase = (tANI_U8)macHTInfoField3.pcoPhase;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 pMac->lim.gHTSecondaryBeacon = (tANI_U8)macHTInfoField3.secondaryBeacon;
2964 pMac->lim.gHTDualCTSProtection = (tANI_U8)macHTInfoField3.dualCTSProtection;
2965 pMac->lim.gHTSTBCBasicMCS = (tANI_U8)macHTInfoField3.basicSTBCMCS;
Jeff Johnsone7245742012-09-05 17:12:55 -07002966
2967 /* The lim globals for channelwidth and secondary chnl have been removed and should not be used during no session;
2968 * instead direct cfg is read and used when no session for transmission of mgmt frames (same as old);
2969 * For now, we might come here during init and join with sessionEntry = NULL; in that case just fill the globals which exist
2970 * Sessionized entries values will be filled in join or add bss req. The ones which are missed in join are filled below
2971 */
2972 if (psessionEntry != NULL)
2973 {
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302974 psessionEntry->htCapability =
2975 IS_DOT11_MODE_HT(psessionEntry->dot11mode);
2976 psessionEntry->beaconParams.fLsigTXOPProtectionFullSupport =
2977 (tANI_U8)macHTInfoField3.lsigTXOPProtectionFullSupport;
Sandeep Puligilla70b6b162014-04-19 02:06:04 +05302978 limInitOBSSScanParams(pMac, psessionEntry);
Jeff Johnsone7245742012-09-05 17:12:55 -07002979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980}
2981
2982void limLogSessionStates(tpAniSirGlobal pMac)
2983{
2984#ifdef WLAN_DEBUG
2985 int i;
2986
2987 for(i = 0; i < pMac->lim.maxBssId; i++)
2988 {
2989 if(pMac->lim.gpSession[i].valid)
2990 {
Abhishek Singh3cbf6052014-12-15 16:46:42 +05302991 limLog(pMac, LOG1, FL("Session[%d] sysRole(%d) limSmeState %d "
2992 "(prev sme state %d) mlm state %d (prev mlm state %d)"),
2993 i, pMac->lim.gpSession[i].limSystemRole,
2994 pMac->lim.gpSession[i].limSmeState,
2995 pMac->lim.gpSession[i].limPrevSmeState,
2996 pMac->lim.gpSession[i].limMlmState,
2997 pMac->lim.gpSession[i].limPrevMlmState);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 }
2999 }
3000#endif //ifdef WLAN_DEBUG
3001}