blob: e037756a80ad18eef3e636f38110c89cd388b7a5 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Agrawal Ashish7c5ed342017-01-11 17:32:46 +05302 * Copyright (c) 2011-2017 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"
Jeff Johnson295189b2012-06-20 16:38:30 -070085
Katya Nigam3802f202013-12-16 19:27:14 +053086/* This value corresponds to 500 ms */
Abhishek Singh849366d2015-11-26 16:53:47 +053087#define MAX_PROBEREQ_TIME 50
Katya Nigam3802f202013-12-16 19:27:14 +053088
Dino Mycle7a76e662014-06-10 11:36:34 +053089#ifdef WLAN_FEATURE_EXTSCAN
90#define SIZE_OF_FIXED_PARAM 12
91#endif
92
Masti, Narayanraddif10fd792015-12-15 15:01:01 +053093#define CHECK_BIT(value, mask) ((value) & (1 << (mask)))
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095void limLogSessionStates(tpAniSirGlobal pMac);
96
97/** -------------------------------------------------------------
98\fn defMsgDecision
99\brief The function decides whether to defer a message or not in limProcessMessage function
100\param tpAniSirGlobal pMac
101\param tSirMsgQ limMsg
102\param tSirMacTspecIE *ppInfo
103\return none
104 -------------------------------------------------------------*/
105
106tANI_U8 static
107defMsgDecision(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
108{
109
110
111/* this function should not changed */
Jeff Johnsone7245742012-09-05 17:12:55 -0700112 if(pMac->lim.gLimSmeState == eLIM_SME_OFFLINE_STATE)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113 {
114 // Defer processsing this message
115 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
116 {
Madan Mohan Koyyalamudi5695b502012-09-24 14:21:12 -0700117 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 -0700118 limMsg->type, limMsgStr(limMsg->type), pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
119 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
120 limLogSessionStates(pMac);
121 limHandleDeferMsgError(pMac, limMsg);
122 }
123 return true;
124 }
125
126 //When defer is requested then defer all the messages except HAL responses.
127 if((!limIsSystemInScanState(pMac)) && (true != GET_LIM_PROCESS_DEFD_MESGS(pMac)) &&
128 !pMac->lim.gLimSystemInScanLearnMode)
129 {
130 if((limMsg->type != WDA_ADD_BSS_RSP) &&
131 (limMsg->type != WDA_DELETE_BSS_RSP) &&
132 (limMsg->type != WDA_ADD_STA_RSP) &&
133 (limMsg->type != WDA_ADD_STA_SELF_RSP) &&
134 (limMsg->type != WDA_DEL_STA_SELF_RSP) &&
135 (limMsg->type != WDA_DELETE_STA_RSP)&&
136 (limMsg->type != WDA_SET_BSSKEY_RSP)&&
137 (limMsg->type != WDA_SET_STAKEY_RSP)&&
138 (limMsg->type != WDA_SET_STA_BCASTKEY_RSP) &&
Jeff Johnson295189b2012-06-20 16:38:30 -0700139 (limMsg->type != eWNI_SME_START_REQ) &&
140 (limMsg->type != WDA_AGGR_QOS_RSP) &&
141 (limMsg->type != WDA_REMOVE_BSSKEY_RSP) &&
142 (limMsg->type != WDA_REMOVE_STAKEY_RSP) &&
143 (limMsg->type != WDA_SET_MIMOPS_RSP)&&
144 (limMsg->type != WDA_ADDBA_RSP) &&
145 (limMsg->type != WDA_ENTER_BMPS_RSP) &&
146 (limMsg->type != WDA_EXIT_BMPS_RSP) &&
147 (limMsg->type != WDA_ENTER_IMPS_RSP) &&
148 (limMsg->type != WDA_EXIT_IMPS_RSP) &&
149 (limMsg->type != WDA_ENTER_UAPSD_RSP) &&
150 (limMsg->type != WDA_EXIT_UAPSD_RSP) &&
151 (limMsg->type != WDA_WOWL_ENTER_RSP) &&
152 (limMsg->type != WDA_WOWL_EXIT_RSP) &&
153 (limMsg->type != WDA_SWITCH_CHANNEL_RSP) &&
Jeff Johnson295189b2012-06-20 16:38:30 -0700154 (limMsg->type != WDA_P2P_NOA_ATTR_IND) &&
Viral Modid440e682013-03-06 02:25:31 -0800155 (limMsg->type != WDA_P2P_NOA_START_IND) &&
Jeff Johnsone7245742012-09-05 17:12:55 -0700156#ifdef FEATURE_OEM_DATA_SUPPORT
157 (limMsg->type != WDA_START_OEM_DATA_RSP) &&
158#endif
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +0530159 (limMsg->type != WDA_ADD_TS_RSP) &&
Hanumantha Reddy Pothula3de8d4c2015-10-07 12:06:37 +0530160
161 /* LIM won't process any defer queue commands if gLimAddtsSent is set to
162 TRUE. gLimAddtsSent will be set TRUE to while sending ADDTS REQ. Say,
163 when deferring is enabled, if SIR_LIM_ADDTS_RSP_TIMEOUT is posted
164 (because of not receiving ADDTS RSP) then this command will be added
165 to defer queue and as gLimAddtsSent is set TRUE LIM will never
166 process any commands from defer queue, including
167 SIR_LIM_ADDTS_RSP_TIMEOUT. Hence allowing SIR_LIM_ADDTS_RSP_TIMEOUT
168 command to be processed with deferring enabled, so that this will be
169 processed immediately and sets gLimAddtsSent to FALSE.
170 */
171 (limMsg->type != SIR_LIM_ADDTS_RSP_TIMEOUT) &&
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +0530172 (limMsg->type != WDA_LOST_LINK_PARAMS_IND) &&
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +0530173 /* Allow processing of RX frames while awaiting reception of
174 ADD TS response over the air. This logic particularly handles the
175 case when host sends ADD BA request to FW after ADD TS request
176 is sent over the air and ADD TS response received over the air */
177 !(limMsg->type == SIR_BB_XPORT_MGMT_MSG && pMac->lim.gLimAddtsSent))
Jeff Johnson295189b2012-06-20 16:38:30 -0700178 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700179 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 -0700180 limMsgStr(limMsg->type));)
181
182 // Defer processsing this message
183 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
184 {
Madan Mohan Koyyalamudi5695b502012-09-24 14:21:12 -0700185 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 -0700186 limMsg->type, limMsgStr(limMsg->type), pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
187 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
188 limLogSessionStates(pMac);
189 limHandleDeferMsgError(pMac, limMsg);
190
191 }
192 return true;
193 }
194 }
195 return false;
196}
197
198/*
199* Beacon Handling Cases:
200* during scanning, when no session is active:
201* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
202* during scanning, when any session is active, but beacon/Pr does not belong to that session, psessionEntry will be null.
203* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
204* during scanning, when any session is active, and beacon/Pr belongs to one of the session, psessionEntry will not be null.
205* handled by limHandleFramesInScanState before __limHandleBeacon call is invoked.
206* Not scanning, no session:
207* there should not be any beacon coming, if coming, should be dropped.
208* Not Scanning,
209*/
210static void
211__limHandleBeacon(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tpPESession psessionEntry)
212{
213 /* checking for global SME state...*/
214 tANI_U8 *pRxPacketInfo;
215 limGetBDfromRxPacket(pMac, pMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
216
217 //This function should not be called if beacon is received in scan state.
218 //So not doing any checks for the global state.
219
220 if(psessionEntry == NULL)
221 {
222 schBeaconProcess(pMac, pRxPacketInfo, NULL);
223 }
224 else if( (psessionEntry->limSmeState == eLIM_SME_LINK_EST_STATE) ||
225 (psessionEntry->limSmeState == eLIM_SME_NORMAL_STATE))
226 {
227 schBeaconProcess(pMac, pRxPacketInfo, psessionEntry);
228 }
229 else
230 limProcessBeaconFrame(pMac, pRxPacketInfo, psessionEntry);
231
232 return;
233}
234
235
236//Fucntion prototype
237void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRspReqd);
238
239/**
Jeff Johnson295189b2012-06-20 16:38:30 -0700240 * limDeferMsg()
241 *
242 *FUNCTION:
243 * This function is called to defer the messages received
244 * during Learn mode
245 *
246 *LOGIC:
247 * NA
248 *
249 *ASSUMPTIONS:
250 * NA
251 *
252 *NOTE:
253 * NA
254 *
255 * @param pMac - Pointer to Global MAC structure
256 * @param pMsg of type tSirMsgQ - Pointer to the message structure
257 * @return None
258 */
259
260tANI_U32
261limDeferMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg)
262{
263 tANI_U32 retCode = TX_SUCCESS;
Jeff Johnson77165482013-03-07 08:15:44 -0800264
265 retCode = limWriteDeferredMsgQ(pMac, pMsg);
266
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 if (retCode == TX_SUCCESS)
Jeff Johnson77165482013-03-07 08:15:44 -0800268 {
Rashmi Ramanna6c13a342014-01-07 11:44:07 +0530269 limLog(pMac, LOG1,
270 FL("Deferred message(0x%X) limSmeState %d (prev sme state %d)"
271 " sysRole %d mlm state %d (prev mlm state %d)"),
272 pMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
273 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState,
274 pMac->lim.gLimPrevMlmState);
Jeff Johnson77165482013-03-07 08:15:44 -0800275 MTRACE(macTraceMsgRx(pMac, NO_SESSION, LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DEFERRED));)
276 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 else
Jeff Johnson77165482013-03-07 08:15:44 -0800278 {
Agarwal Ashishe865f332014-04-08 13:20:06 +0530279 limLog(pMac, LOG1, FL("Dropped lim message (0x%X)"), pMsg->type);
Jeff Johnson77165482013-03-07 08:15:44 -0800280 MTRACE(macTraceMsgRx(pMac, NO_SESSION, LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DROPPED));)
281 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700282
283 return retCode;
284} /*** end limDeferMsg() ***/
285
286
287
288/**
289 * limHandleFramesInScanState()
290 *
291 *FUNCTION:
292 * This function is called to process 802.11 frames
293 * received by LIM in scan state.
294 *
295 *LOGIC:
296 * NA
297 *
298 *ASSUMPTIONS:
299 * NA
300 *
301 *NOTE:
302 * NA
303 *
304 * @param pMac - Pointer to Global MAC structure
305 * @param limMsg - Received message
306 * @param pRxPacketInfo - Pointer to Rx packet info structure
307 * @param deferMsg - Indicates whether the frame shall be deferred
308 * @return None
309 */
310
311static void
312limHandleFramesInScanState(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pRxPacketInfo, tANI_U8 *deferMsg, tpPESession psessionEntry)
313{
314 tSirMacFrameCtl fc;
315 tpSirMacMgmtHdr pHdr;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316
317 *deferMsg = false;
318 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
319 fc = pHdr->fc;
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700320 limLog( pMac, LOG2, FL("ProtVersion %d, Type %d, Subtype %d"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700321 fc.protVer, fc.type, fc.subType );
322
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 // defer all message in scan state except for Beacons and Probe Response
324 if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_BEACON))
325 {
326 if (psessionEntry == NULL)
327 limProcessBeaconFrameNoSession(pMac, pRxPacketInfo);
328 else
329 limProcessBeaconFrame(pMac, pRxPacketInfo,psessionEntry);
330 }
331 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_PROBE_RSP))
332 {
333 if (psessionEntry == NULL)
334 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
335 else
336 limProcessProbeRspFrame(pMac, pRxPacketInfo,psessionEntry);
337 }
338 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_PROBE_REQ))
339 {
340 limProcessProbeReqFrame_multiple_BSS(pMac, pRxPacketInfo, psessionEntry);
341 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700342 else if ((fc.type == SIR_MAC_MGMT_FRAME) && (fc.subType == SIR_MAC_MGMT_ACTION))
343 {
344 limProcessActionFrameNoSession( pMac, pRxPacketInfo);
345 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 else
347 {
348 *deferMsg = true;
349 return;
350 }
351
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr);
353 return;
354
355} /*** end limHandleFramesInScanState() ***/
356
357/** ------------------------------------------------------------
358\brief This function handles Unknown Unicast (A2 Index)
359\ packets.
360\param tpAniSirGlobal pMac Global Mac data structure
361\param void *pRxPacketInfo Pointer to Buffer Descriptor
362\return none
363\
364\ -------------------------------------------------------------- */
365static void limHandleUnknownA2IndexFrames(tpAniSirGlobal pMac, void *pRxPacketInfo,tpPESession psessionEntry)
366{
Jeff Johnson295189b2012-06-20 16:38:30 -0700367 /* addr2 mismatch interrupt occurred this means previous
368 disassociation was not successful
369 In Volans pRxPacketInfo only contains pointer 48-bit address2 field */
370 /*Send disassociation message again*/
371 //Dinesh need one more arguement.
372 //limSendDisassocMgmtFrame(pMac, eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON,(tANI_U8 *) pRxPacketInfo);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800373 //TODO: verify this
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 //This could be a public action frame.
375 if( psessionEntry->limSystemRole == eLIM_P2P_DEVICE_ROLE )
376 limProcessActionFrameNoSession(pMac, (tANI_U8 *) pRxPacketInfo);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800377
378#ifdef FEATURE_WLAN_TDLS
379 {
380 tpSirMacDataHdr3a pMacHdr;
381 pMacHdr = WDA_GET_RX_MPDUHEADER3A(pRxPacketInfo);
382
383 if (limIsGroupAddr(pMacHdr->addr2))
384 {
Abhishek Singh525045c2014-12-15 17:18:45 +0530385 limLog(pMac, LOG1, FL("Ignoring A2 Invalid Packet received for MC/BC:"));
386 limPrintMacAddr(pMac, pMacHdr->addr2, LOG1);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800387
388 return;
389 }
390 /* TDLS_hklee: move down here to reject Addr2 == Group (first checking above)
391 and also checking if SystemRole == STA */
392 if (psessionEntry->limSystemRole == eLIM_STA_ROLE)
393 {
394 /* ADD handling of Public Action Frame */
395 LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, \
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700396 ("limHandleUnknownA2IndexFrames: type=0x%x, subtype=0x%x"),pMacHdr->fc.type, pMacHdr->fc.subType));
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800397 switch (pMacHdr->fc.type)
398 {
399 case SIR_MAC_MGMT_FRAME:
400 {
401 switch (pMacHdr->fc.subType)
402 {
403 case SIR_MAC_MGMT_ACTION:
404 {
405 limProcessActionFrame(pMac, pRxPacketInfo, psessionEntry) ;
406 break ;
407 }
408 default:
409 {
410 break ;
411 }
412 }
413 }
414 default:
415 {
416 break ;
417 }
418 }
419 }
420 }
421#endif
422
Jeff Johnson295189b2012-06-20 16:38:30 -0700423
424 return;
425}
426
Jeff Johnson295189b2012-06-20 16:38:30 -0700427/**
428 * limCheckMgmtRegisteredFrames()
429 *
430 *FUNCTION:
431 * This function is called to process to check if received frame match with
432 * any of the registered frame from HDD. If yes pass this frame to SME.
433 *
434 *LOGIC:
435 *
436 *ASSUMPTIONS:
437 *
438 *NOTE:
439 *
440 * @param pMac Pointer to Global MAC structure
441 * @param *pBd Pointer to the received Buffer Descriptor+payload
442 * @param *psessionEntry Pointer to session on which packet is received
443 * @return None
444 */
445static tANI_BOOLEAN
446limCheckMgmtRegisteredFrames(tpAniSirGlobal pMac, tANI_U8 *pBd,
447 tpPESession psessionEntry)
448{
449 tSirMacFrameCtl fc;
450 tpSirMacMgmtHdr pHdr;
451 tANI_U8 *pBody;
452 tpLimMgmtFrameRegistration pLimMgmtRegistration = NULL, pNext = NULL;
453 tANI_U16 frameType;
454 tANI_U16 framelen;
455 tANI_U8 type,subType;
456 tANI_BOOLEAN match = VOS_FALSE;
457 VOS_STATUS vosStatus;
458
459 pHdr = WDA_GET_RX_MAC_HEADER(pBd);
460 fc = pHdr->fc;
461 frameType = (fc.type << 2 ) | (fc.subType << 4);
462 pBody = WDA_GET_RX_MPDU_DATA(pBd);
463 framelen = WDA_GET_RX_PAYLOAD_LEN(pBd);
464
465 vos_list_peek_front(&pMac->lim.gLimMgmtFrameRegistratinQueue,
466 (vos_list_node_t**)&pLimMgmtRegistration);
467
468 while(pLimMgmtRegistration != NULL)
469 {
470 type = (pLimMgmtRegistration->frameType >> 2) & 0x03;
471 subType = (pLimMgmtRegistration->frameType >> 4) & 0x0f;
472 if ( (type == SIR_MAC_MGMT_FRAME) && (fc.type == SIR_MAC_MGMT_FRAME)
473 && (subType == SIR_MAC_MGMT_RESERVED15) )
474 {
475 limLog( pMac, LOG3,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700476 FL("rcvd frame match with SIR_MAC_MGMT_RESERVED15"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 match = VOS_TRUE;
478 break;
479 }
480
481 if (pLimMgmtRegistration->frameType == frameType)
482 {
483 if (pLimMgmtRegistration->matchLen > 0)
484 {
485 if (pLimMgmtRegistration->matchLen <= framelen)
486 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +0530487 if (vos_mem_compare(pLimMgmtRegistration->matchData,
Jeff Johnson295189b2012-06-20 16:38:30 -0700488 pBody, pLimMgmtRegistration->matchLen))
489 {
Madan Mohan Koyyalamudic537df22012-10-22 15:07:08 -0700490 /* found match! */
491 match = VOS_TRUE;
492 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Madan Mohan Koyyalamudic537df22012-10-22 15:07:08 -0700494 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 }
496 else
497 {
498 /* found match! */
499 match = VOS_TRUE;
500 break;
501 }
502 }
503
504 vosStatus =
505 vos_list_peek_next ( &pMac->lim.gLimMgmtFrameRegistratinQueue,
506 (vos_list_node_t*) pLimMgmtRegistration,
507 (vos_list_node_t**) &pNext );
508 pLimMgmtRegistration = pNext;
509 pNext = NULL;
510 }
511
512 if (match)
513 {
514 limLog( pMac, LOG1,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700515 FL("rcvd frame match with registered frame params"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700516
517 /* Indicate this to SME */
Rashmi Ramanna0d0adec2014-02-05 20:35:37 +0530518 limSendSmeMgmtFrameInd( pMac, pLimMgmtRegistration->sessionId,
yeshwanth sriram guntukac1046a52017-04-25 16:34:50 +0530519 pBd, psessionEntry, WDA_GET_RX_RSSI_DB(pBd));
Jeff Johnson295189b2012-06-20 16:38:30 -0700520
521 if ( (type == SIR_MAC_MGMT_FRAME) && (fc.type == SIR_MAC_MGMT_FRAME)
522 && (subType == SIR_MAC_MGMT_RESERVED15) )
523 {
524 // These packets needs to be processed by PE/SME as well as HDD.
525 // If it returns TRUE here, the packet is forwarded to HDD only.
526 match = VOS_FALSE;
527 }
528 }
529
530 return match;
531} /*** end limCheckMgmtRegisteredFrames() ***/
Jeff Johnson295189b2012-06-20 16:38:30 -0700532
Dino Mycle7a76e662014-06-10 11:36:34 +0530533#ifdef WLAN_FEATURE_EXTSCAN
534
535void
536limProcessEXTScanRealTimeData(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo)
537{
538 tpSirMacMgmtHdr pHdr = NULL;
539 eHalStatus status;
540 void *pCallbackContext;
541 tANI_U8 rfBand = 0;
542 tANI_U8 rxChannelInBD = 0;
543 tSirMacFrameCtl fc;
544 tDot11fBeacon *pBeacon = NULL;
545 tDot11fProbeResponse *pProbeResponse = NULL;
546 tSirWifiFullScanResultEvent tEXTScanFullScanResult;
547
548 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
549 fc = pHdr->fc;
550
551 limLog(pMac, LOG2,
552 FL("Received EXTScan Real Time data with length=%d from "),
553 WDA_GET_RX_MPDU_LEN(pRxPacketInfo));
554
555 limPrintMacAddr(pMac, pHdr->sa, LOG2);
556
557 vos_mem_set((tANI_U8 *) &tEXTScanFullScanResult,
558 sizeof(tSirWifiFullScanResultEvent), 0);
559
Dino Mycle3f783bc2014-08-08 17:40:22 +0530560 tEXTScanFullScanResult.ap.ts = vos_get_monotonic_boottime();
Dino Mycle7a76e662014-06-10 11:36:34 +0530561
562 vos_mem_copy(&tEXTScanFullScanResult.ap.bssid,
563 pHdr->bssId, sizeof(tSirMacAddr));
564
Dino Myclee8843b32014-07-04 14:21:45 +0530565 limPrintMacAddr(pMac, pHdr->bssId, LOG2);
Dino Mycle7a76e662014-06-10 11:36:34 +0530566
567
568 rfBand = WDA_GET_RX_RFBAND(pRxPacketInfo);
569 rxChannelInBD = WDA_GET_RX_CH(pRxPacketInfo);
570
571 if ((!rfBand) || IS_5G_BAND(rfBand))
572 {
573 rxChannelInBD = limUnmapChannel(rxChannelInBD);
574 }
575
c_hpothu24b354c2014-09-24 18:59:33 +0530576 tEXTScanFullScanResult.ap.channel =
577 (tANI_U32)vos_chan_to_freq(rxChannelInBD);
Dino Mycle7a76e662014-06-10 11:36:34 +0530578 tEXTScanFullScanResult.ap.rssi = WDA_GET_RX_RSSI_DB(pRxPacketInfo);
579
580 if (fc.subType == SIR_MAC_MGMT_BEACON)
581 {
582 limLog( pMac, LOG2, FL("Beacon "));
583
584 pBeacon = vos_mem_malloc(sizeof(tDot11fBeacon));
585 if ( NULL == pBeacon ){
586 limLog(pMac, LOGE, FL("Failed to allocate memory\n") );
587 return;
588 }
589
590 vos_mem_set( ( tANI_U8* )pBeacon, sizeof(tDot11fBeacon), 0 );
591 // delegate to the framesc-generated code,
592 status = dot11fUnpackBeacon( pMac,
593 (tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo),
594 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo), pBeacon );
595
596 if ( DOT11F_FAILED( status ) )
597 {
598 limLog(pMac, LOGE, FL("Failed to parse a Beacons"
Sushant Kaushik87787972015-09-11 16:05:00 +0530599 "(%d)"), status);
Dino Mycle7a76e662014-06-10 11:36:34 +0530600 vos_mem_free(pBeacon);
601 return;
602 }
603 if ( pBeacon->SSID.present )
604 {
605 vos_mem_copy(tEXTScanFullScanResult.ap.ssid,
606 pBeacon->SSID.ssid,
607 pBeacon->SSID.num_ssid);
608 }
609 //NULL Terminate the string.
610 tEXTScanFullScanResult.ap.ssid[pBeacon->SSID.num_ssid] = 0;
611 tEXTScanFullScanResult.ap.beaconPeriod =
612 pBeacon->BeaconInterval.interval;
613 tEXTScanFullScanResult.ap.capability =
614 *((tANI_U16 *)&pBeacon->Capabilities);
615 vos_mem_free(pBeacon);
616 }
617 else if (fc.subType == SIR_MAC_MGMT_PROBE_RSP)
618 {
619 limLog( pMac, LOG2, FL("Probe rsp "));
620
621 pProbeResponse = vos_mem_malloc(sizeof(tDot11fProbeResponse));
622 if ( NULL == pProbeResponse ){
623 limLog(pMac, LOGE, FL("Failed to allocate memory\n") );
624 return;
625 }
626
627 vos_mem_set( ( tANI_U8* )pProbeResponse,
628 sizeof(tDot11fProbeResponse), 0);
629 //delegate to the framesc-generated code,
630 status = dot11fUnpackProbeResponse( pMac,
631 (tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo),
632 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo), pProbeResponse );
633
634 if ( DOT11F_FAILED( status ) )
635 {
636 limLog(pMac, LOGE, FL("Failed to parse a Probe"
Sushant Kaushik87787972015-09-11 16:05:00 +0530637 "Response (%d"), status);
Dino Mycle7a76e662014-06-10 11:36:34 +0530638 vos_mem_free(pProbeResponse);
639 return;
640 }
641 if ( pProbeResponse->SSID.present )
642 {
643 vos_mem_copy(tEXTScanFullScanResult.ap.ssid,
644 pProbeResponse->SSID.ssid,
645 pProbeResponse->SSID.num_ssid);
646 }
647 //NULL Terminate the string.
648 tEXTScanFullScanResult.ap.ssid[pProbeResponse->SSID.num_ssid] = 0;
649 tEXTScanFullScanResult.ap.beaconPeriod =
650 pProbeResponse->BeaconInterval.interval;
651 tEXTScanFullScanResult.ap.capability =
652 *(((tANI_U16 *)&pProbeResponse->Capabilities));
653
Gupta, Kapil4a5e1902016-02-01 19:54:14 +0530654 vos_mem_free(pProbeResponse);
Dino Mycle7a76e662014-06-10 11:36:34 +0530655 }
656 else
657 {
658 limLog( pMac, LOGE, FL("Wrong frame Type %d, Subtype %d for LFR"),
659 fc.type, fc.subType);
660 VOS_ASSERT(0);
661 return;
662 }
663
664 tEXTScanFullScanResult.requestId = pMac->sme.extScanStartReqId;
665 tEXTScanFullScanResult.ieLength =
666 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo) - SIZE_OF_FIXED_PARAM;
667 tEXTScanFullScanResult.ie =(tSirInformationElement *)
668 ((tANI_U8 *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo) + SIZE_OF_FIXED_PARAM);
669
670 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
671 if(pMac->sme.pEXTScanIndCb)
672 {
673 pMac->sme.pEXTScanIndCb(pCallbackContext,
674 SIR_HAL_EXTSCAN_FULL_SCAN_RESULT_IND,
675 (tANI_U8 *)&tEXTScanFullScanResult);
676 }
677
678 return;
679} /*** end limProcessEXTScanRealTimeData() ***/
680#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -0700681
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530682#ifdef SAP_AUTH_OFFLOAD
683/*
684 * lim_process_sap_offload_indication: function to process add sta/ del sta
685 * indication for SAP auth offload.
686 *
687 * @pMac: mac context
688 * @pRxPacketInfo: rx buffer
689 *
690 * This Function will go through buffer and if
691 * indication type is ADD_STA_IND, function will extract all data related to
692 * client and will call limAddSta
693 * and if indication type is DEL_STA_IND, function will call
694 * limSendSmeDisassocInd to do cleanup for station.
695 *
696 * Return : none
697 */
698static void lim_process_sap_offload_indication(tpAniSirGlobal pMac,
699 tANI_U8 *pRxPacketInfo)
700{
701 int i = 0;
702 tSapOfldIndications *sap_offload_indication_rx_buf =
703 (tSapOfldIndications *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
704 tSapOfldInd *sap_offload_ind =
705 (tSapOfldInd*)sap_offload_indication_rx_buf->indications;
706
707 limLog( pMac, LOG1,
708 FL("Notify SME with Sap Offload ind and indication type is %d num_indication %d \n"),
709 sap_offload_ind->indType,
710 (tANI_U8) sap_offload_indication_rx_buf->num_indications);
711
712 for (i=1; i <= (tANI_U8)(sap_offload_indication_rx_buf->num_indications);
713 i++)
714 {
715 if (sap_offload_ind->indType == SAP_OFFLOAD_ADD_STA_IND)
716 {
717 tSapOfldAddStaIndMsg *add_sta;
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530718 limLog( pMac, LOG1,
719 FL("Indication type is SAP_OFFLOAD_ADD_STA_IND"));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530720 add_sta = (tSapOfldAddStaIndMsg *)sap_offload_ind->indication;
721 lim_sap_offload_add_sta(pMac, add_sta);
722 if (sap_offload_indication_rx_buf->num_indications > 1)
723 sap_offload_ind =
724 (tSapOfldInd *)((tANI_U8 *)sap_offload_ind +
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530725 sizeof(tSapOfldAddStaIndMsg) - sizeof(tANI_U8)+
726 add_sta->data_len + sizeof(tANI_U32));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530727 }
728 else if (sap_offload_ind->indType == SAP_OFFLOAD_DEL_STA_IND)
729 {
730 tSapOfldDelStaIndMsg *del_sta;
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530731 limLog( pMac, LOG1,
732 FL("Indication type is SAP_OFFLOAD_DEL_STA_IND"));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530733 del_sta = (tSapOfldDelStaIndMsg *)sap_offload_ind->indication;
734 lim_sap_offload_del_sta(pMac, del_sta);
735 sap_offload_ind = (tSapOfldInd *)((tANI_U8 *)sap_offload_ind +
Agrawal Ashish7c5ed342017-01-11 17:32:46 +0530736 sizeof(tSapOfldDelStaIndMsg) + sizeof(tANI_U32));
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530737 }
738 else
739 {
740 limLog(pMac, LOGE, FL("No Valid indication for connected station"));
741 }
742 }
743
744}
745#endif
746
Jeff Johnson295189b2012-06-20 16:38:30 -0700747/**
748 * limHandle80211Frames()
749 *
750 *FUNCTION:
751 * This function is called to process 802.11 frames
752 * received by LIM.
753 *
754 *LOGIC:
755 * NA
756 *
757 *ASSUMPTIONS:
758 * NA
759 *
760 *NOTE:
761 * NA
762 *
763 * @param pMac - Pointer to Global MAC structure
764 * @param pMsg of type tSirMsgQ - Pointer to the message structure
765 * @return None
766 */
767
768static void
Sushant Kaushik33200572015-08-05 16:46:20 +0530769
Jeff Johnson295189b2012-06-20 16:38:30 -0700770limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg)
771{
772 tANI_U8 *pRxPacketInfo = NULL;
773 tSirMacFrameCtl fc;
774 tpSirMacMgmtHdr pHdr=NULL;
775 tpPESession psessionEntry=NULL;
776 tANI_U8 sessionId;
777 tAniBool isFrmFt = FALSE;
778 tANI_U16 fcOffset = WLANHAL_RX_BD_HEADER_SIZE;
Padma, Santhosh Kumar5a3054e2017-02-13 19:05:54 +0530779 tANI_S8 pe_sessionid = -1;
Jeff Johnson295189b2012-06-20 16:38:30 -0700780
781 *pDeferMsg= false;
782 limGetBDfromRxPacket(pMac, limMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
783
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530784#ifdef SAP_AUTH_OFFLOAD
785 if ((WDA_GET_SAP_AUTHOFFLOADIND(pRxPacketInfo) == 1) &&
786 pMac->sap_auth_offload)
787 {
788 lim_process_sap_offload_indication(pMac, pRxPacketInfo);
789 goto end;
790 }
791#endif
792
Dino Mycle7a76e662014-06-10 11:36:34 +0530793#ifdef WLAN_FEATURE_EXTSCAN
794
795 if ( WDA_GET_EXTSCANFULLSCANRESIND(pRxPacketInfo))
796 {
797 limLog( pMac, LOG2, FL("Notify EXTSCAN scan results to the HDD"));
798 limProcessEXTScanRealTimeData(pMac, pRxPacketInfo);
799 goto end;
800 }
801#endif //WLAN_FEATURE_EXTSCAN
802
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
804 isFrmFt = WDA_GET_RX_FT_DONE(pRxPacketInfo);
805 fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo);
806 fc = pHdr->fc;
807
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +0530808#ifdef WLAN_DUMP_MGMTFRAMES
809 limLog( pMac, LOGE, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
810 fc.protVer, fc.type, fc.subType,
811 WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
812 VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, pHdr,
813 WDA_GET_RX_MPDU_HEADER_LEN(pRxPacketInfo));
814#endif
815
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800816 if ((fc.type == SIR_MAC_MGMT_FRAME) &&
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800817 (fc.subType != SIR_MAC_MGMT_BEACON))
818 {
Rajeev Kumar Sirasanagandla63f85cf2016-06-29 16:52:15 +0530819 limLog(pMac, LOG1, FL("RX MGMT - Type %hu, SubType %hu,"
820 "Seq.no %d, Source mac-addr "
821 MAC_ADDRESS_STR), fc.type, fc.subType,
822 ((pHdr->seqControl.seqNumHi << 4) |
823 (pHdr->seqControl.seqNumLo)),
824 MAC_ADDR_ARRAY(pHdr->sa));
Tushnim Bhattacharyyaed4d0c22014-01-30 11:56:44 -0800825 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700826#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Kapil Gupta04ab1992016-06-26 13:36:51 +0530827 if (WDA_GET_ROAMCANDIDATEIND(pRxPacketInfo))
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700828 {
Kapil Gupta04ab1992016-06-26 13:36:51 +0530829 limLog( pMac, LOGW, FL("Notify SME with candidate ind"));
830
831 if (WDA_IF_PER_ROAMCANDIDATEIND(pRxPacketInfo) &&
832 IS_FEATURE_SUPPORTED_BY_FW(PER_BASED_ROAMING) &&
833 pMac->roam.configParam.isPERRoamEnabled)
834 {
835 tSirPerRoamScanResult *candidateChanInfo =
836 (tSirPerRoamScanResult *)WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
837 int chanInfoLen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo)
838 - sizeof(tANI_U32);
839
840 /* Translate network buffer into system buffer */
841 vos_buff_to_hl_buff((v_U8_t *)candidateChanInfo,
842 WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo));
843
844 /* Max candidates allowed */
Kapil Gupta3fd32832016-08-31 17:55:19 +0530845 if (candidateChanInfo->candidateCount >
846 SIR_PER_ROAM_MAX_CANDIDATE_CNT)
Kapil Gupta04ab1992016-06-26 13:36:51 +0530847 {
848 limLog(pMac, LOGE,
Kapil Gupta3fd32832016-08-31 17:55:19 +0530849 FL("Got maximum candidates as %d, setting count as %d"),
850 candidateChanInfo->candidateCount,
851 SIR_PER_ROAM_MAX_CANDIDATE_CNT);
852 candidateChanInfo->candidateCount =
853 SIR_PER_ROAM_MAX_CANDIDATE_CNT;
Kapil Gupta04ab1992016-06-26 13:36:51 +0530854 }
855
856 vos_mem_set(&pMac->candidateChannelInfo,
857 sizeof(tSirCandidateChanInfo) *
858 SIR_PER_ROAM_MAX_CANDIDATE_CNT, 0);
859
860 vos_mem_copy(&pMac->candidateChannelInfo,
861 candidateChanInfo->channelInfo,
862 (sizeof(tSirCandidateChanInfo) *
863 SIR_PER_ROAM_MAX_CANDIDATE_CNT) < chanInfoLen ?
864 (sizeof(tSirCandidateChanInfo) *
865 SIR_PER_ROAM_MAX_CANDIDATE_CNT):
866 chanInfoLen);
867
868 limLog(pMac, LOG1,
869 FL("PER based Roam candidates %d"),
870 candidateChanInfo->candidateCount);
871
872 pMac->PERroamCandidatesCnt = candidateChanInfo->candidateCount;
873 } else
874 {
875 /* Normal RSSI based roaming */
876 pMac->PERroamCandidatesCnt = 0;
877 }
878
Padma, Santhosh Kumar5a3054e2017-02-13 19:05:54 +0530879 pe_sessionid = limGetInfraSessionId(pMac);
880 if (pe_sessionid != -1) {
881 psessionEntry = peFindSessionBySessionId(pMac, pe_sessionid);
882 if (psessionEntry != NULL)
883 {
884 if ((psessionEntry->limSmeState == eLIM_SME_WT_DEAUTH_STATE) ||
885 (psessionEntry->limSmeState == eLIM_SME_WT_DISASSOC_STATE))
886 {
887 limLog(pMac, LOG1,
888 FL("Drop candidate ind as deauth/disassoc in progress"));
889 goto end;
890 }
891 }
892 }
893 else
894 limLog(pMac, LOGE,
895 FL("session id doesn't exist for infra"));
896
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700897 //send a session 0 for now - TBD
898 limSendSmeCandidateFoundInd(pMac, 0);
899 goto end;
900 }
901 if (WDA_GET_OFFLOADSCANLEARN(pRxPacketInfo))
902 {
903 if (fc.subType == SIR_MAC_MGMT_BEACON)
904 {
905 limLog( pMac, LOG2, FL("Save this beacon in LFR cache"));
906 __limHandleBeacon(pMac, limMsg, NULL);
907 }
908 else if (fc.subType == SIR_MAC_MGMT_PROBE_RSP)
909 {
910 limLog( pMac, LOG2, FL("Save this probe rsp in LFR cache"));
911 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
912 }
913 else
914 {
915 limLog( pMac, LOGE, FL("Wrong frame Type %d, Subtype %d for LFR"),
916 fc.type, fc.subType);
917 }
918 goto end;
919 }
920#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800921#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 if (fc.type == SIR_MAC_DATA_FRAME && isFrmFt)
923 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800924#if 0 // Ese TBD Need to PORT
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tpSirMacDot3Hdr pDataFrmHdr;
926
927 pDataFrmHdr = (tpSirMacDot3Hdr)((tANI_U8 *)pBD+ WLANHAL_RX_BD_GET_MPDU_H_OFFSET(pBD));
928 if((psessionEntry = peFindSessionByBssid(pMac,pDataFrmHdr->sa,&sessionId))== NULL)
929 {
930 limLog( pMac, LOGE, FL("Session not found for Frm type %d, subtype %d, SA: "), fc.type, fc.subType);
931 limPrintMacAddr(pMac, pDataFrmHdr->sa, LOGE);
932 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pBD, limMsg->bodyptr);
933 return;
934 }
935
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800936 if (!psessionEntry->isESEconnection)
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800938 limLog( pMac, LOGE, FL("LIM received Type %d, Subtype %d in Non ESE connection"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 fc.type, fc.subType);
940 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pBD, limMsg->bodyptr);
941 return;
942 }
943 limLog( pMac, LOGE, FL("Processing IAPP Frm from SA:"));
944 limPrintMacAddr(pMac, pDataFrmHdr->sa, LOGE);
945#else
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800946 printk("%s: Need to port handling of IAPP frames to PRIMA for ESE", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700947#endif
948
949
950 } else
951#endif
Siddharth Bhal4f3187c2014-10-09 21:38:08 +0530952
953 if ((fc.type == SIR_MAC_MGMT_FRAME) &&
954 (fc.subType == SIR_MAC_MGMT_PROBE_RSP) &&
955 pMac->lim.isSpoofingEnabled)
956 {
957 limLog( pMac, LOG2, FL("Probe Rsp recieved with DA: "MAC_ADDRESS_STR
958 " and selfMac Addr:"MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->da),
959 MAC_ADDR_ARRAY(pMac->lim.gSelfMacAddr));
960 if (VOS_TRUE == vos_mem_compare((v_VOID_t*) pHdr->da,
961 (v_VOID_t*) pMac->lim.spoofMacAddr, VOS_MAC_ADDRESS_LEN))
962 {
963 vos_mem_copy(pHdr->da, pMac->lim.gSelfMacAddr, VOS_MAC_ADDRESS_LEN);
964 }
965 }
966
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* Added For BT-AMP Support */
968 if((psessionEntry = peFindSessionByBssid(pMac,pHdr->bssId,&sessionId))== NULL)
969 {
970#ifdef WLAN_FEATURE_VOWIFI_11R
971 if (fc.subType == SIR_MAC_MGMT_AUTH)
972 {
973#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800974 limLog( pMac, LOG1, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 fc.protVer, fc.type, fc.subType, WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800976 limPrintMacAddr(pMac, pHdr->bssId, LOG1);
Jeff Johnson295189b2012-06-20 16:38:30 -0700977#endif
978 if (limProcessAuthFrameNoSession(pMac, pRxPacketInfo, limMsg->bodyptr) == eSIR_SUCCESS)
979 {
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +0530980 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 }
982 }
983#endif
984 if((fc.subType != SIR_MAC_MGMT_PROBE_RSP )&&
985 (fc.subType != SIR_MAC_MGMT_BEACON)&&
986 (fc.subType != SIR_MAC_MGMT_PROBE_REQ)
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 && (fc.subType != SIR_MAC_MGMT_ACTION ) //Public action frame can be received from non-associated stations.
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 )
989 {
990
991 if((psessionEntry = peFindSessionByPeerSta(pMac,pHdr->sa,&sessionId))== NULL)
992 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700993 limLog(pMac, LOG1, FL("session does not exist for given bssId"));
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +0530994 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -0700995 }
Padma, Santhosh Kumar2b47ca82014-01-03 16:57:27 +0530996 else
997 limLog(pMac,LOG1,"SessionId:%d Session Exist for given Bssid",
998 psessionEntry->peSessionId);
Gopichand Nakkala6265d6f2013-03-20 23:32:50 +0530999 }
1000 // For p2p resp frames search for valid session with DA as
1001 // BSSID will be SA and session will be present with DA only
1002 if(fc.subType == SIR_MAC_MGMT_ACTION )
1003 {
1004 psessionEntry = peFindSessionByBssid(pMac,pHdr->da,&sessionId);
1005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001006 }
1007
1008
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 /* Check if frame is registered by HDD */
1010 if(limCheckMgmtRegisteredFrames(pMac, pRxPacketInfo, psessionEntry))
1011 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001012 limLog( pMac, LOG1, FL("Received frame is passed to SME"));
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301013 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015
1016
Jeff Johnson295189b2012-06-20 16:38:30 -07001017
1018 if (fc.protVer != SIR_MAC_PROTOCOL_VERSION)
1019 { // Received Frame with non-zero Protocol Version
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001020 limLog(pMac, LOGE, FL("Unexpected frame with protVersion %d received"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 fc.protVer);
Jeff Johnson295189b2012-06-20 16:38:30 -07001022#ifdef WLAN_DEBUG
1023 pMac->lim.numProtErr++;
1024#endif
Kanchanapally, Vidyullathac796fc62015-03-17 10:45:28 +05301025 goto end;
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 }
1027
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05301028 if (!pMac->fScanOffload)
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 {
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05301030 if (limIsSystemInScanState(pMac))
1031 {
1032 limHandleFramesInScanState(pMac, limMsg, pRxPacketInfo, pDeferMsg, psessionEntry);
1033 return;
1034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 }
1036
1037/* Chance of crashing : to be done BT-AMP ........happens when broadcast probe req is received */
1038
1039#if 0
1040 if (psessionEntry->limSystemRole == eLIM_UNKNOWN_ROLE) {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001041 limLog( pMac, LOGW, FL( "gLimSystemRole is %d. Exiting..." ),psessionEntry->limSystemRole );
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr);
1043
1044#ifdef WLAN_DEBUG
1045 pMac->lim.numProtErr++;
1046#endif
1047 return;
1048 }
1049 #endif //HACK to continue scanning
1050
1051
1052#ifdef WLAN_DEBUG
1053 pMac->lim.numMAC[fc.type][fc.subType]++;
1054#endif
1055
1056 switch (fc.type)
1057 {
1058 case SIR_MAC_MGMT_FRAME:
1059 {
1060 #if 0 //TBD-RAJESH fix this
1061 if (limIsReassocInProgress( pMac,psessionEntry) && (fc.subType != SIR_MAC_MGMT_DISASSOC) &&
1062 (fc.subType != SIR_MAC_MGMT_DEAUTH) && (fc.subType != SIR_MAC_MGMT_REASSOC_RSP))
1063 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001064 limLog(pMac, LOGE, FL("Frame with Type - %d, Subtype - %d received in ReAssoc Wait state, dropping..."),
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 fc.type, fc.subType);
1066 return;
1067 }
1068 #endif //HACK to continue scanning
1069 // Received Management frame
1070 switch (fc.subType)
1071 {
1072 case SIR_MAC_MGMT_ASSOC_REQ:
1073 // Make sure the role supports Association
1074 if ((psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 || (psessionEntry->limSystemRole == eLIM_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 )
1077 limProcessAssocReqFrame(pMac, pRxPacketInfo, LIM_ASSOC, psessionEntry);
1078
1079 else
1080 {
1081 // Unwanted messages - Log error
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001082 limLog(pMac, LOGE, FL("unexpected message received %X"),limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 limPrintMsgName(pMac, LOGE, limMsg->type);
1084 }
1085 break;
1086
1087 case SIR_MAC_MGMT_ASSOC_RSP:
1088 limProcessAssocRspFrame(pMac, pRxPacketInfo, LIM_ASSOC,psessionEntry);
1089 break;
1090
1091 case SIR_MAC_MGMT_REASSOC_REQ:
1092 // Make sure the role supports Reassociation
1093 if ((psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 || (psessionEntry->limSystemRole == eLIM_AP_ROLE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 ){
1096 limProcessAssocReqFrame(pMac, pRxPacketInfo, LIM_REASSOC, psessionEntry);
1097 }
1098 else
1099 {
1100 // Unwanted messages - Log error
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001101 limLog(pMac, LOGE, FL("unexpected message received %X"),limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 limPrintMsgName(pMac, LOGE, limMsg->type);
1103 }
1104 break;
1105
1106 case SIR_MAC_MGMT_REASSOC_RSP:
1107 limProcessAssocRspFrame(pMac, pRxPacketInfo, LIM_REASSOC,psessionEntry);
1108 break;
1109
1110 case SIR_MAC_MGMT_PROBE_REQ:
1111 limProcessProbeReqFrame_multiple_BSS(pMac, pRxPacketInfo,psessionEntry);
1112 break;
1113
1114 case SIR_MAC_MGMT_PROBE_RSP:
1115 if(psessionEntry == NULL)
1116 limProcessProbeRspFrameNoSession(pMac, pRxPacketInfo);
1117 else
1118 limProcessProbeRspFrame(pMac, pRxPacketInfo, psessionEntry);
1119 break;
1120
1121 case SIR_MAC_MGMT_BEACON:
1122 __limHandleBeacon(pMac, limMsg,psessionEntry);
1123 break;
1124
1125 case SIR_MAC_MGMT_DISASSOC:
1126 limProcessDisassocFrame(pMac, pRxPacketInfo,psessionEntry);
1127 break;
1128
1129 case SIR_MAC_MGMT_AUTH:
1130 limProcessAuthFrame(pMac, pRxPacketInfo,psessionEntry);
1131 break;
1132
1133 case SIR_MAC_MGMT_DEAUTH:
1134 limProcessDeauthFrame(pMac, pRxPacketInfo,psessionEntry);
1135 break;
1136
1137 case SIR_MAC_MGMT_ACTION:
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 if(psessionEntry == NULL)
1139 limProcessActionFrameNoSession(pMac, pRxPacketInfo);
1140 else
1141 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 if (WDA_GET_RX_UNKNOWN_UCAST(pRxPacketInfo))
1143 limHandleUnknownA2IndexFrames(pMac, pRxPacketInfo,psessionEntry);
1144 else
1145 limProcessActionFrame(pMac, pRxPacketInfo,psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 break;
1148 default:
1149 // Received Management frame of 'reserved' subtype
1150 break;
1151 } // switch (fc.subType)
1152
1153 }
1154 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 case SIR_MAC_DATA_FRAME:
1156 {
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001157#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* We accept data frame (IAPP frame) only if Session is
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001159 * present and ese connection is established on that
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 * session
1161 */
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001162 if (psessionEntry && psessionEntry->isESEconnection) {
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 limProcessIappFrame(pMac, pRxPacketInfo, psessionEntry);
1164 }
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001165#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 }
1167 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 default:
1169 // Received frame of type 'reserved'
1170 break;
1171
1172 } // switch (fc.type)
1173
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -07001174end:
Jeff Johnson295189b2012-06-20 16:38:30 -07001175 limPktFree(pMac, HAL_TXRX_FRM_802_11_MGMT, pRxPacketInfo, (void *) limMsg->bodyptr) ;
1176 return;
1177} /*** end limHandle80211Frames() ***/
1178
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301179/**
1180 * limSendStopScanOffloadReq()
1181 *
1182 *FUNCTION:
1183 * This function will be called to abort the ongoing offloaded scan
1184 * request.
1185 *
1186 *
1187 *NOTE:
1188 *
1189 * @param pMac Pointer to Global MAC structure
1190 * @return eHAL_STATUS_SUCCESS or eHAL_STATUS_FAILURE
1191 */
1192eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 SessionId)
1193{
1194 tSirMsgQ msg;
1195 tSirRetStatus rc = eSIR_SUCCESS;
1196 tAbortScanParams *pAbortScanParams;
1197
Kiet Lamb1233192013-11-28 13:38:20 +05301198 pAbortScanParams = vos_mem_malloc(sizeof(tAbortScanParams));
1199 if (NULL == pAbortScanParams)
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301200 {
1201 limLog(pMac, LOGP, FL("Memory allocation failed for AbortScanParams"));
1202 return eHAL_STATUS_FAILURE;
1203 }
1204
1205 pAbortScanParams->SessionId = SessionId;
1206 msg.type = WDA_STOP_SCAN_OFFLOAD_REQ;
1207 msg.bodyptr = pAbortScanParams;
1208 msg.bodyval = 0;
1209
1210 rc = wdaPostCtrlMsg(pMac, &msg);
1211 if (rc != eSIR_SUCCESS)
1212 {
Jeff Johnson0f4d0bc2013-11-03 17:48:50 -08001213 limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"));
Kiet Lamb1233192013-11-28 13:38:20 +05301214 vos_mem_free(pAbortScanParams);
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301215 return eHAL_STATUS_FAILURE;
1216 }
1217
Rashmi Ramanna6c13a342014-01-07 11:44:07 +05301218 limLog(pMac, LOG1, FL("Abort ongoing offload scan."));
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301219 return eHAL_STATUS_SUCCESS;
1220
1221}
Jeff Johnson295189b2012-06-20 16:38:30 -07001222
1223/**
1224 * limProcessAbortScanInd()
1225 *
1226 *FUNCTION:
1227 * This function is called from HDD to abort the scan which is presently being run
1228 *
1229 *
1230 *NOTE:
1231 *
1232 * @param pMac Pointer to Global MAC structure
1233 * @param *pMsgBuf A pointer to the SME message buffer
1234 * @return None
1235 */
1236void
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301237limProcessAbortScanInd(tpAniSirGlobal pMac, tANI_U8 SessionId)
Jeff Johnson295189b2012-06-20 16:38:30 -07001238{
1239#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT
1240 limDiagEventReport(pMac, WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT, NULL, 0, 0);
1241#endif //FEATURE_WLAN_DIAG_SUPPORT
1242
1243 /* Deactivate the gLimBackgroundScanTimer as part of the abort scan.
1244 * SME should send WNI_CFG_BACKGROUND_SCAN_PERIOD indication
1245 * to start the background scan again
1246 */
Abhishek Singh525045c2014-12-15 17:18:45 +05301247 limLog(pMac, LOG1, FL("Processing AbortScan Ind"));
Jeff Johnson295189b2012-06-20 16:38:30 -07001248
1249 limAbortBackgroundScan(pMac);
1250
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301251 if (pMac->fScanOffload)
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 {
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301253 /* send stop scan cmd to fw if scan offload is enabled. */
1254 limSendStopScanOffloadReq(pMac, SessionId);
1255 }
1256 else
1257 {
1258 /* Abort the scan if its running, else just return */
1259 if(limIsSystemInScanState(pMac))
Jeff Johnson295189b2012-06-20 16:38:30 -07001260 {
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301261 if( (eLIM_HAL_INIT_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1262 (eLIM_HAL_START_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1263 (eLIM_HAL_END_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState ) ||
1264 (eLIM_HAL_FINISH_SCAN_WAIT_STATE == pMac->lim.gLimHalScanState) )
1265 {
1266 //Simply signal we need to abort
1267 limLog( pMac, LOGW, FL(" waiting for HAL, simply signal abort gLimHalScanState = %d"), pMac->lim.gLimHalScanState );
1268 pMac->lim.abortScan = 1;
1269 }
1270 else
1271 {
1272 //Force abort
1273 limLog( pMac, LOGW, FL(" Force aborting scan") );
1274 pMac->lim.abortScan = 0;
1275 limDeactivateAndChangeTimer(pMac, eLIM_MIN_CHANNEL_TIMER);
1276 limDeactivateAndChangeTimer(pMac, eLIM_MAX_CHANNEL_TIMER);
1277 //Set the resume channel to Any valid channel (invalid).
1278 //This will instruct HAL to set it to any previous valid channel.
1279 peSetResumeChannel(pMac, 0, 0);
1280 limSendHalFinishScanReq(pMac, eLIM_HAL_FINISH_SCAN_WAIT_STATE);
1281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001282 }
1283 }
1284 return;
1285}
1286
1287/**
1288 * limMessageProcessor
1289 *
1290 *FUNCTION:
1291 * Wrapper function for limProcessMessages when handling messages received by LIM.
1292 * Could either defer messages or process them.
1293 * @param pMac Pointer to Global MAC structure
1294 * @param limMsg Received LIM message
1295 * @return None
1296 */
1297
1298void limMessageProcessor(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
1299{
1300 if (eLIM_MLM_OFFLINE_STATE == pMac->lim.gLimMlmState)
1301 {
1302 peFreeMsg(pMac, limMsg);
1303 return;
1304 }
1305
1306 if (!defMsgDecision(pMac, limMsg))
1307 {
1308 limProcessMessages(pMac, limMsg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001309 // process deferred message queue if allowed
1310 {
1311 if ( (! (pMac->lim.gLimAddtsSent))
1312 &&
1313 (! (limIsSystemInScanState(pMac)))
1314 )
1315 {
1316 if (true == GET_LIM_PROCESS_DEFD_MESGS(pMac))
1317 limProcessDeferredMessageQueue(pMac);
1318 }
1319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001320 }
1321}
1322
Jeff Johnsone7245742012-09-05 17:12:55 -07001323#ifdef FEATURE_OEM_DATA_SUPPORT
1324
1325void limOemDataRspHandleResumeLinkRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32* mlmOemDataRsp)
1326{
1327 if(status != eHAL_STATUS_SUCCESS)
1328 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001329 limLog(pMac, LOGE, FL("OEM Data Rsp failed to get the response for resume link"));
Jeff Johnsone7245742012-09-05 17:12:55 -07001330 }
1331
1332 if(NULL != pMac->lim.gpLimMlmOemDataReq)
1333 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301334 vos_mem_free(pMac->lim.gpLimMlmOemDataReq);
Jeff Johnsone7245742012-09-05 17:12:55 -07001335 pMac->lim.gpLimMlmOemDataReq = NULL;
1336 }
1337
1338 //"Failure" status doesn't mean that Oem Data Rsp did not happen
1339 //and hence we need to respond to upper layers. Only Resume link is failed, but
1340 //we got the oem data response already.
1341 //Post the meessage to MLM
1342 limPostSmeMessage(pMac, LIM_MLM_OEM_DATA_CNF, (tANI_U32*)(mlmOemDataRsp));
1343
1344 return;
1345}
1346
1347void limProcessOemDataRsp(tpAniSirGlobal pMac, tANI_U32* body)
1348{
Jeff Johnsone7245742012-09-05 17:12:55 -07001349 tpLimMlmOemDataRsp mlmOemDataRsp = NULL;
1350 tpStartOemDataRsp oemDataRsp = NULL;
1351
1352 //Process all the messages for the lim queue
1353 SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
1354
1355 oemDataRsp = (tpStartOemDataRsp)(body);
1356
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301357 mlmOemDataRsp = vos_mem_malloc(sizeof(tLimMlmOemDataRsp));
1358 if ( NULL == mlmOemDataRsp )
Jeff Johnsone7245742012-09-05 17:12:55 -07001359 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001360 limLog(pMac, LOGP, FL("could not allocate memory for mlmOemDataRsp"));
Jeff Johnsone7245742012-09-05 17:12:55 -07001361 return;
1362 }
1363
1364 //copy the memory into tLimMlmOemDataRsp and free the tStartOemDataRsp
1365 //the structures tStartOemDataRsp and tLimMlmOemDataRsp have the same structure
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301366 vos_mem_copy((void*)(mlmOemDataRsp), (void*)(oemDataRsp),
1367 sizeof(tLimMlmOemDataRsp));
Jeff Johnsone7245742012-09-05 17:12:55 -07001368
1369 //Now free the incoming memory
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301370 vos_mem_free(oemDataRsp);
Jeff Johnsone7245742012-09-05 17:12:55 -07001371
1372 limResumeLink(pMac, limOemDataRspHandleResumeLinkRsp, (tANI_U32*)mlmOemDataRsp);
1373
1374 return;
1375}
1376
1377#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001378
Katya Nigam3802f202013-12-16 19:27:14 +05301379static tANI_BOOLEAN limAgeOutProbeReq( tpAniSirGlobal pMac, tpSirMsgQ limMsg,
1380 vos_pkt_t *pVosPkt )
1381{
1382 tANI_U8 *pRxPacketInfo = NULL;
1383 tSirMacFrameCtl fc;
1384 tpSirMacMgmtHdr pHdr=NULL;
1385 tANI_BOOLEAN match = VOS_FALSE;
1386
1387 limGetBDfromRxPacket(pMac, limMsg->bodyptr, (tANI_U32 **)&pRxPacketInfo);
1388 pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo);
1389 fc = pHdr->fc;
1390 if ( fc.subType == SIR_MAC_MGMT_PROBE_REQ )
1391 {
1392 if( vos_timer_get_system_ticks() - pVosPkt->timestamp >= MAX_PROBEREQ_TIME )
1393 {
1394 // drop packet
1395 limLog(pMac, LOGE,
1396 FL("Dropping Aged Out probe requests. Peer MAC is "MAC_ADDRESS_STR),
1397 MAC_ADDR_ARRAY(pHdr->sa));
1398
1399 vos_pkt_return_packet(pVosPkt);
1400 match = VOS_TRUE;
1401 }
1402 }
1403 return match;
1404}
1405
Jeff Johnson295189b2012-06-20 16:38:30 -07001406/**
1407 * limProcessMessages
1408 *
1409 *FUNCTION:
1410 * This function is called by limProcessMessageQueue function. This
1411 * function processes messages received by LIM.
1412 *
1413 *LOGIC:
1414 * Depending on the message type, corresponding function will be
1415 * called, for example limProcessSmeMessages() will be called to
1416 * process SME messages received from HDD/Upper layer software module.
1417 *
1418 *ASSUMPTIONS:
1419 * NA
1420 *
1421 *NOTE:
1422 * NA
1423 *
1424 * @param pMac Pointer to Global MAC structure
1425 * @param limMsg Received LIM message
1426 * @return None
1427 */
1428
1429void
1430limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
1431{
1432 tANI_U8 deferMsg = false;
1433 tLinkStateParams *linkStateParams;
1434#if defined WLAN_FEATURE_VOWIFI_11R
1435 tpPESession pSession;
1436#endif
1437#if defined(ANI_DVT_DEBUG)
1438 tSirMsgQ msgQ;
1439#endif
1440 if(pMac->gDriverType == eDRIVER_TYPE_MFG)
1441 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301442 vos_mem_free(limMsg->bodyptr);
Jeff Johnsone7245742012-09-05 17:12:55 -07001443 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001444 return;
1445 }
1446#ifdef WLAN_DEBUG
1447 pMac->lim.numTot++;
1448#endif
1449
1450
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001451 PELOG3(limLog(pMac, LOG3, FL("rcvd msgType = %s, sme state = %s, mlm state = %s"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 limMsgStr(limMsg->type), limSmeStateStr(pMac->lim.gLimSmeState),
1453 limMlmStateStr(pMac->lim.gLimMlmState));)
1454
Konamki, Sreelakshmi824f93e2015-07-31 12:55:48 +05301455 /*
1456 * MTRACE logs not captured for events received from SME
1457 * SME enums (eWNI_SME_START_REQ) starts with 0x16xx.
1458 * Compare received SME events with SIR_SME_MODULE_ID
Konamki, Sreelakshmi2bfb8b02015-07-29 11:41:24 +05301459 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001460
Konamki, Sreelakshmi824f93e2015-07-31 12:55:48 +05301461 if (SIR_SME_MODULE_ID == (tANI_U8)MAC_TRACE_GET_MODULE_ID(limMsg->type))
1462 {
1463 MTRACE(macTrace(pMac, TRACE_CODE_RX_SME_MSG, NO_SESSION, limMsg->type));
1464 }
1465 else
1466 {
1467 /* Omitting below message types as these are too frequent and when crash
1468 * happens we loose critical trace logs if these are also logged
1469 */
1470 if (limMsg->type != SIR_LIM_MAX_CHANNEL_TIMEOUT &&
1471 limMsg->type != SIR_LIM_MIN_CHANNEL_TIMEOUT &&
1472 limMsg->type != SIR_LIM_PERIODIC_PROBE_REQ_TIMEOUT &&
1473 limMsg->type != SIR_CFG_PARAM_UPDATE_IND &&
1474 limMsg->type != SIR_BB_XPORT_MGMT_MSG)
1475 MTRACE(macTraceMsgRx(pMac, NO_SESSION,
1476 LIM_TRACE_MAKE_RXMSG(limMsg->type, LIM_MSG_PROCESSED));)
1477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 switch (limMsg->type)
1479 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001480
1481 case SIR_LIM_UPDATE_BEACON:
1482 limUpdateBeacon(pMac);
1483 break;
1484
Jeff Johnson295189b2012-06-20 16:38:30 -07001485 case SIR_CFG_PARAM_UPDATE_IND:
1486 /// CFG parameter updated
1487 if (limIsSystemInScanState(pMac))
1488 {
1489 // System is in DFS (Learn) mode
1490 // Defer processsing this message
1491 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
1492 {
Leela Venkata Kiran Kumar Reddy Chirala2247e962013-03-22 19:21:10 -07001493 if(!(pMac->lim.deferredMsgCnt & 0xF))
1494 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001495 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 -07001496 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
1497 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
Leela Venkata Kiran Kumar Reddy Chirala2247e962013-03-22 19:21:10 -07001498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001499 limLogSessionStates(pMac);
1500 limPrintMsgName(pMac, LOGE, limMsg->type);
1501 }
1502 }
1503 else
1504 {
1505 limHandleCFGparamUpdate(pMac, limMsg->bodyval);
1506 }
1507
1508 break;
1509
1510 case WDA_INIT_SCAN_RSP:
1511 limProcessInitScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001512 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001513 break;
1514
1515 case WDA_START_SCAN_RSP:
1516 limProcessStartScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001517 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001518 break;
1519
1520 case WDA_END_SCAN_RSP:
1521 limProcessEndScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001522 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 break;
1524
1525 case WDA_FINISH_SCAN_RSP:
1526 limProcessFinishScanRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001527 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001528 break;
Jeff Johnsone7245742012-09-05 17:12:55 -07001529#ifdef FEATURE_OEM_DATA_SUPPORT
1530 case WDA_START_OEM_DATA_RSP:
1531 limProcessOemDataRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001532 limMsg->bodyptr = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07001533 break;
1534#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001535
1536 case WDA_SWITCH_CHANNEL_RSP:
1537 limProcessSwitchChannelRsp(pMac, limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08001538 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001539 break;
1540
1541#ifdef ANI_SIR_IBSS_PEER_CACHING
1542 case WDA_IBSS_STA_ADD:
1543 limIbssStaAdd(pMac, limMsg->bodyptr);
1544 break;
1545#endif
1546 case SIR_BB_XPORT_MGMT_MSG:
1547 // These messages are from Peer MAC entity.
1548#ifdef WLAN_DEBUG
1549 pMac->lim.numBbt++;
1550#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001551 {
1552 v_U16_t pktLen = 0;
1553 vos_pkt_t *pVosPkt;
1554 VOS_STATUS vosStatus;
1555 tSirMsgQ limMsgNew;
Jeff Johnson295189b2012-06-20 16:38:30 -07001556 /* The original limMsg which we were deferring have the
1557 * bodyPointer point to 'BD' instead of 'Vos pkt'. If we don't make a copy
1558 * of limMsg, then vos_pkt_peek_data will overwrite the limMsg->bodyPointer.
1559 * and next time when we try to process the msg, we will try to use 'BD' as
1560 * 'Vos Pkt' which will cause a crash
1561 */
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301562 vos_mem_copy((tANI_U8*)&limMsgNew, (tANI_U8*)limMsg,
1563 sizeof(tSirMsgQ));
Jeff Johnson295189b2012-06-20 16:38:30 -07001564 pVosPkt = (vos_pkt_t *)limMsgNew.bodyptr;
1565 vos_pkt_get_packet_length(pVosPkt, &pktLen);
1566
1567 vosStatus = WDA_DS_PeekRxPacketInfo( pVosPkt, (v_PVOID_t *)&limMsgNew.bodyptr, VOS_FALSE );
1568
1569 if( !VOS_IS_STATUS_SUCCESS(vosStatus) )
1570 {
Katya Nigamfdf5a522015-02-03 14:38:55 +05301571 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001572 vos_pkt_return_packet(pVosPkt);
1573 break;
1574
1575 }
Katya Nigam3802f202013-12-16 19:27:14 +05301576
Padma, Santhosh Kumar30971cf2015-04-06 19:59:37 +05301577#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
1578 if (WDA_GET_ROAMCANDIDATEIND(limMsgNew.bodyptr))
1579 limLog(pMac, LOG1, FL("roamCandidateInd %d"),
1580 WDA_GET_ROAMCANDIDATEIND(limMsgNew.bodyptr));
1581
1582 if (WDA_GET_OFFLOADSCANLEARN(limMsgNew.bodyptr))
1583 limLog(pMac, LOG1, FL("offloadScanLearn %d"),
1584 WDA_GET_OFFLOADSCANLEARN(limMsgNew.bodyptr));
1585#endif
1586
Katya Nigam3802f202013-12-16 19:27:14 +05301587 /*
1588 * putting a check for age out probe request frames
1589 * such that any probe req more than 0.5 sec old can directly
1590 * be dropped. With this, there won't be blocking of MC thread.
1591 */
1592
1593 if( limAgeOutProbeReq ( pMac, &limMsgNew, pVosPkt ))
1594 {
Katya Nigamfdf5a522015-02-03 14:38:55 +05301595 limDecrementPendingMgmtCount(pMac);
Katya Nigam3802f202013-12-16 19:27:14 +05301596 break;
1597 }
1598
Katya Nigam3802f202013-12-16 19:27:14 +05301599
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 limHandle80211Frames(pMac, &limMsgNew, &deferMsg);
1601
1602 if ( deferMsg == true )
1603 {
Abhishek Singh3cbf6052014-12-15 16:46:42 +05301604 limLog(pMac, LOG2, FL("Defer message type=%X "),
1605 limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001606 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
1607 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001608 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 -07001609 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
1610 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
1611 limLogSessionStates(pMac);
1612 limPrintMsgName(pMac, LOGE, limMsg->type);
Katya Nigamfdf5a522015-02-03 14:38:55 +05301613 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001614 vos_pkt_return_packet(pVosPkt);
1615 }
1616 }
1617 else
1618 {
1619 /* PE is not deferring this 802.11 frame so we need to call vos_pkt_return.
1620 * Asumption here is when Rx mgmt frame processing is done,
1621 * voss packet could be freed here.
1622 */
Katya Nigamfdf5a522015-02-03 14:38:55 +05301623 limDecrementPendingMgmtCount(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 vos_pkt_return_packet(pVosPkt);
1625 }
1626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001627 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 case eWNI_SME_SCAN_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001629 case eWNI_SME_REMAIN_ON_CHANNEL_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001630 case eWNI_SME_DISASSOC_REQ:
1631 case eWNI_SME_DEAUTH_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 case eWNI_SME_GET_SCANNED_CHANNEL_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -07001633#ifdef FEATURE_OEM_DATA_SUPPORT
1634 case eWNI_SME_OEM_DATA_REQ:
1635#endif
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001636#ifdef FEATURE_WLAN_TDLS
1637 case eWNI_SME_TDLS_SEND_MGMT_REQ:
1638 case eWNI_SME_TDLS_ADD_STA_REQ:
1639 case eWNI_SME_TDLS_DEL_STA_REQ:
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301640 case eWNI_SME_TDLS_LINK_ESTABLISH_REQ:
Atul Mittalc0f739f2014-07-31 13:47:47 +05301641// tdlsoffchan
1642 case eWNI_SME_TDLS_CHANNEL_SWITCH_REQ:
Mohit Khanna698ba2a2012-12-04 15:08:18 -08001643#endif
Gopichand Nakkalacca24d12013-03-07 17:05:07 +05301644 case eWNI_SME_RESET_AP_CAPS_CHANGED:
Jeff Johnson295189b2012-06-20 16:38:30 -07001645 // These messages are from HDD
1646 limProcessNormalHddMsg(pMac, limMsg, true); //need to response to hdd
1647 break;
1648
1649 case eWNI_SME_SCAN_ABORT_IND:
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301650 {
1651 tANI_U8 *pSessionId = (tANI_U8 *)limMsg->bodyptr;
1652 limProcessAbortScanInd(pMac, *pSessionId);
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 vos_mem_free((v_VOID_t *)limMsg->bodyptr);
1654 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001655 break;
Madan Mohan Koyyalamudiff3a7152013-06-13 14:47:55 +05301656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001657 case eWNI_SME_START_REQ:
1658 case eWNI_SME_SYS_READY_IND:
1659#ifndef WNI_ASKEY_NON_SUPPORT_FEATURE
1660 case eWNI_SME_JOIN_REQ:
1661#endif
1662 case eWNI_SME_AUTH_REQ:
1663 case eWNI_SME_REASSOC_REQ:
1664 case eWNI_SME_START_BSS_REQ:
1665 case eWNI_SME_STOP_BSS_REQ:
1666 case eWNI_SME_SWITCH_CHL_REQ:
1667 case eWNI_SME_SWITCH_CHL_CB_PRIMARY_REQ:
1668 case eWNI_SME_SWITCH_CHL_CB_SECONDARY_REQ:
1669 case eWNI_SME_SETCONTEXT_REQ:
1670 case eWNI_SME_REMOVEKEY_REQ:
1671#ifndef WNI_ASKEY_NON_SUPPORT_FEATURE
1672 case eWNI_SME_PROMISCUOUS_MODE_REQ:
1673#endif
1674 case eWNI_SME_DISASSOC_CNF:
1675 case eWNI_SME_DEAUTH_CNF:
1676 case eWNI_SME_ASSOC_CNF:
1677 case eWNI_SME_REASSOC_CNF:
1678 case eWNI_SME_ADDTS_REQ:
1679 case eWNI_SME_DELTS_REQ:
1680 case eWNI_SME_DEL_BA_PEER_IND:
1681 case eWNI_SME_SET_TX_POWER_REQ:
1682 case eWNI_SME_GET_TX_POWER_REQ:
1683 case eWNI_SME_GET_NOISE_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 case eWNI_SME_GET_ASSOC_STAS_REQ:
1685 case eWNI_SME_TKIP_CNTR_MEAS_REQ:
1686 case eWNI_SME_UPDATE_APWPSIE_REQ:
1687 case eWNI_SME_HIDE_SSID_REQ:
1688 case eWNI_SME_GET_WPSPBC_SESSION_REQ:
1689 case eWNI_SME_SET_APWPARSNIEs_REQ:
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -08001690 case eWNI_SME_CHNG_MCC_BEACON_INTERVAL:
Jeff Johnson295189b2012-06-20 16:38:30 -07001691#if defined WLAN_FEATURE_VOWIFI
1692 case eWNI_SME_NEIGHBOR_REPORT_REQ_IND:
1693 case eWNI_SME_BEACON_REPORT_RESP_XMIT_IND:
1694#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001695#if defined FEATURE_WLAN_ESE
1696 case eWNI_SME_ESE_ADJACENT_AP_REPORT:
Jeff Johnson295189b2012-06-20 16:38:30 -07001697#endif
1698#ifdef WLAN_FEATURE_VOWIFI_11R
1699 case eWNI_SME_FT_UPDATE_KEY:
1700 case eWNI_SME_FT_PRE_AUTH_REQ:
1701 case eWNI_SME_FT_AGGR_QOS_REQ:
1702#endif
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05301703#ifdef WLAN_FEATURE_LFR_MBB
1704 case eWNI_SME_MBB_PRE_AUTH_REASSOC_REQ:
1705#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001706 case eWNI_SME_ADD_STA_SELF_REQ:
1707 case eWNI_SME_DEL_STA_SELF_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 case eWNI_SME_REGISTER_MGMT_FRAME_REQ:
1709 case eWNI_SME_UPDATE_NOA:
Gopichand Nakkalac178ac82013-05-30 19:53:39 +05301710 case eWNI_SME_CLEAR_DFS_CHANNEL_LIST:
Madan Mohan Koyyalamudi44bbc152013-07-05 21:13:10 +05301711 case eWNI_SME_STA_STAT_REQ:
1712 case eWNI_SME_AGGR_STAT_REQ:
1713 case eWNI_SME_GLOBAL_STAT_REQ:
1714 case eWNI_SME_STAT_SUMM_REQ:
1715 case eWNI_SME_GET_STATISTICS_REQ:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001716#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Madan Mohan Koyyalamudi44bbc152013-07-05 21:13:10 +05301717 case eWNI_SME_GET_ROAM_RSSI_REQ:
1718#endif
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001719#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07001720 case eWNI_SME_GET_TSM_STATS_REQ:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001721#endif /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
Siddharth Bhal6af5d4e2014-09-29 21:11:16 +05301722 case eWNI_SME_MAC_SPOOF_ADDR_IND:
Abhishek Singh7d624e12015-11-30 14:29:27 +05301723 case eWNI_SME_REGISTER_MGMT_FRAME_CB:
Abhishek Singh02605092017-10-25 14:06:12 +05301724 case eWNI_SME_SET_CHAN_SW_IE_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 // These messages are from HDD
1726 limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd
1727 break;
1728
1729 //Power Save Messages From HDD
1730 case eWNI_PMC_PWR_SAVE_CFG:
1731 case eWNI_PMC_ENTER_BMPS_REQ:
1732 case eWNI_PMC_EXIT_BMPS_REQ:
1733 case eWNI_PMC_ENTER_IMPS_REQ:
1734 case eWNI_PMC_EXIT_IMPS_REQ:
1735 case eWNI_PMC_ENTER_UAPSD_REQ:
1736 case eWNI_PMC_EXIT_UAPSD_REQ:
1737 case eWNI_PMC_ENTER_WOWL_REQ:
1738 case eWNI_PMC_EXIT_WOWL_REQ:
1739 case eWNI_PMC_WOWL_ADD_BCAST_PTRN:
1740 case eWNI_PMC_WOWL_DEL_BCAST_PTRN:
1741 pmmProcessMessage(pMac, limMsg);
1742 break;
1743
1744 case eWNI_PMC_SMPS_STATE_IND :
1745 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 if(limMsg->bodyptr){
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301747 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001748 limMsg->bodyptr = NULL;
1749 }
1750 }
1751 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001752 case eWNI_SME_SEND_ACTION_FRAME_IND:
1753 limSendP2PActionFrame(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301754 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001755 limMsg->bodyptr = NULL;
1756 break;
1757 case eWNI_SME_ABORT_REMAIN_ON_CHAN_IND:
1758 limAbortRemainOnChan(pMac);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301759 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 limMsg->bodyptr = NULL;
1761 break;
1762
Abhishek Singh00b71972016-01-07 10:51:04 +05301763#ifdef WLAN_FEATURE_RMC
1764 case eWNI_SME_ENABLE_RMC_REQ:
1765 case eWNI_SME_DISABLE_RMC_REQ:
1766 /*
1767 * These messages are from HDD
1768 * No need to response to hdd
1769 */
1770 limProcessSmeReqMessages(pMac,limMsg);
1771 break;
1772#endif /* WLAN_FEATURE_RMC */
1773
Viral Modid86bde22012-12-10 13:09:21 -08001774 case SIR_HAL_P2P_NOA_START_IND:
1775 {
1776 tpPESession psessionEntry = &pMac->lim.gpSession[0];
1777 tANI_U8 i;
Viral Modid440e682013-03-06 02:25:31 -08001778 tANI_U8 p2pGOExists = 0;
Gopichand Nakkala78a6c812013-05-13 16:39:49 +05301779
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001780 limLog(pMac, LOG1, "LIM received NOA start %x", limMsg->type);
Viral Modid440e682013-03-06 02:25:31 -08001781
1782 /* Since insert NOA is done and NOA start msg received, we should deactivate the Insert NOA timer */
1783 limDeactivateAndChangeTimer(pMac, eLIM_INSERT_SINGLESHOT_NOA_TIMER);
1784
Viral Modid86bde22012-12-10 13:09:21 -08001785 for(i=0; i < pMac->lim.maxBssId; i++)
1786 {
1787 psessionEntry = &pMac->lim.gpSession[i];
1788 if ( (psessionEntry != NULL) && (psessionEntry->valid) &&
1789 (psessionEntry->pePersona == VOS_P2P_GO_MODE))
1790 { //Save P2P NOA start attributes for P2P Go persona
Viral Modid440e682013-03-06 02:25:31 -08001791 p2pGOExists = 1;
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301792 vos_mem_copy(&psessionEntry->p2pGoPsNoaStartInd, limMsg->bodyptr,
1793 sizeof(tSirP2PNoaStart));
Viral Modid440e682013-03-06 02:25:31 -08001794 if (psessionEntry->p2pGoPsNoaStartInd.status != eHAL_STATUS_SUCCESS)
Viral Modid86bde22012-12-10 13:09:21 -08001795 {
Viral Modid440e682013-03-06 02:25:31 -08001796 limLog(pMac, LOGW, FL("GO NOA start failure status %d reported by FW."
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001797 " - still go ahead with deferred sme req. This is just info"),
Viral Modid440e682013-03-06 02:25:31 -08001798 psessionEntry->p2pGoPsNoaStartInd.status);
Viral Modid86bde22012-12-10 13:09:21 -08001799 }
Viral Modid86bde22012-12-10 13:09:21 -08001800 break;
1801 }
1802 }
Viral Modid440e682013-03-06 02:25:31 -08001803
1804 if (p2pGOExists == 0)
1805 {
1806 limLog(pMac, LOGW, FL("By the time, we received NOA start, GO is already removed."
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001807 " - still go ahead with deferred sme req. This is just info"));
Viral Modid440e682013-03-06 02:25:31 -08001808 }
1809
1810 /* We received the NOA start indication. Now we can send down the SME request which requires off-channel operation */
1811 limProcessRegdDefdSmeReqAfterNOAStart(pMac);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301812 vos_mem_free(limMsg->bodyptr);
Viral Modid86bde22012-12-10 13:09:21 -08001813 limMsg->bodyptr = NULL;
Viral Modid440e682013-03-06 02:25:31 -08001814 }
Viral Modid86bde22012-12-10 13:09:21 -08001815 break;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301816#ifdef FEATURE_WLAN_TDLS
1817 case SIR_HAL_TDLS_IND:
1818 {
1819 tSirTdlsInd *pTdlsInd = (tpSirTdlsInd)limMsg->bodyptr ;
1820 tpDphHashNode pStaDs = NULL ;
1821 tpPESession psessionEntry = NULL;
1822 tANI_U8 sessionId;
1823 if((psessionEntry = peFindSessionByStaId(pMac,pTdlsInd->staIdx,&sessionId))== NULL)
1824 {
1825 limLog(pMac, LOG1, FL("session does not exist for given bssId\n"));
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301826 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301827 limMsg->bodyptr = NULL;
1828 return;
1829 }
1830 if ((pStaDs = dphGetHashEntry(pMac, pTdlsInd->assocId, &psessionEntry->dph.dphHashTable)) == NULL)
1831 {
1832 limLog(pMac, LOG1, FL("pStaDs Does not exist for given staId\n"));
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301833 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301834 limMsg->bodyptr = NULL;
1835 return;
1836 }
Viral Modid86bde22012-12-10 13:09:21 -08001837
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301838 if ((STA_ENTRY_TDLS_PEER == pStaDs->staType))
1839 {
1840 limLog(pMac, LOGE,
1841 FL("received TDLS Indication from the Firmware with Reason Code %d "),
1842 pTdlsInd->reasonCode);
1843 limSendSmeTDLSDelStaInd(pMac, pStaDs, psessionEntry,
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05301844 pTdlsInd->reasonCode);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301845 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301846 vos_mem_free(limMsg->bodyptr);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301847 limMsg->bodyptr = NULL;
1848 }
1849 break;
1850#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 case SIR_HAL_P2P_NOA_ATTR_IND:
1852 {
1853 tpPESession psessionEntry = &pMac->lim.gpSession[0];
1854 tANI_U8 i;
1855
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001856 limLog(pMac, LOGW, FL("Received message Noa_ATTR %x"), limMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 for(i=0; i < pMac->lim.maxBssId; i++)
1858 {
Viral Modid86bde22012-12-10 13:09:21 -08001859 psessionEntry = &pMac->lim.gpSession[i];
1860 if ( (psessionEntry != NULL) && (psessionEntry->valid) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 (psessionEntry->pePersona == VOS_P2P_GO_MODE))
1862 { //Save P2P attributes for P2P Go persona
1863
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301864 vos_mem_copy(&psessionEntry->p2pGoPsUpdate, limMsg->bodyptr,
1865 sizeof(tSirP2PNoaAttr));
1866
Arif Hussain24bafea2013-11-15 15:10:03 -08001867 limLog(pMac, LOG2, FL(" &psessionEntry->bssId "
1868 MAC_ADDRESS_STR " ctWin=%d oppPsFlag=%d"),
1869 MAC_ADDR_ARRAY(psessionEntry->bssId),
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 psessionEntry->p2pGoPsUpdate.ctWin,
1871 psessionEntry->p2pGoPsUpdate.oppPsFlag);
1872
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07001873 limLog(pMac, LOG2, FL(" uNoa1IntervalCnt=%d uNoa1Duration=%d uNoa1Interval=%d uNoa1StartTime=%d"),
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 psessionEntry->p2pGoPsUpdate.uNoa1IntervalCnt,
1875 psessionEntry->p2pGoPsUpdate.uNoa1Duration,
1876 psessionEntry->p2pGoPsUpdate.uNoa1Interval,
1877 psessionEntry->p2pGoPsUpdate.uNoa1StartTime);
1878
1879
1880 break;
1881 }
1882 }
1883
1884 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301885 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001886 limMsg->bodyptr = NULL;
1887
1888 break;
1889
1890
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 /* eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER Message comes after the
1892 * device comes out of full power for the full power request sent
1893 * because of channel switch with switch count as 0, so call the same
1894 * function used in timeout case(i.e SIR_LIM_CHANNEL_SWITCH_TIMEOUT)
1895 * for switching the channel*/
1896 case eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER:
Jeff Johnsone7245742012-09-05 17:12:55 -07001897 if ( !tx_timer_running(&pMac->lim.limTimers.gLimChannelSwitchTimer) )
1898 {
1899 limProcessChannelSwitchTimeout(pMac);
1900 }
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301901 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 limMsg->bodyptr = NULL;
1903 break;
1904
1905 //Power Save Related Messages From HAL
1906 case WDA_ENTER_BMPS_RSP:
1907 case WDA_EXIT_BMPS_RSP:
1908 case WDA_EXIT_BMPS_IND:
1909 case WDA_ENTER_IMPS_RSP:
1910 case WDA_EXIT_IMPS_RSP:
1911 case WDA_ENTER_UAPSD_RSP:
1912 case WDA_EXIT_UAPSD_RSP:
1913 case WDA_WOWL_ENTER_RSP:
1914 case WDA_WOWL_EXIT_RSP:
1915 pmmProcessMessage(pMac, limMsg);
1916 break;
1917
1918 case WDA_LOW_RSSI_IND:
1919 //limHandleLowRssiInd(pMac);
1920 break;
1921
1922 case WDA_BMPS_STATUS_IND:
1923 limHandleBmpsStatusInd(pMac);
1924 break;
1925
Kapil Gupta7a3d9b12016-12-20 20:36:38 +05301926#ifdef WLAN_FEATURE_APFIND
1927 case WDA_AP_FIND_IND:
1928 limHandleAPFindInd(pMac);
1929 break;
1930#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 case WDA_MISSED_BEACON_IND:
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08001932 limHandleMissedBeaconInd(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301933 vos_mem_free(limMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08001934 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 break;
1936 case WDA_MIC_FAILURE_IND:
1937 limMicFailureInd(pMac, limMsg);
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05301938 vos_mem_free(limMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 limMsg->bodyptr = NULL;
1940 break;
1941
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +05301942 case WDA_LOST_LINK_PARAMS_IND:
1943 limProcessLostLinkParamsInd(pMac,limMsg);
1944 vos_mem_free(limMsg->bodyptr);
1945 limMsg->bodyptr = NULL;
1946 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001947
1948 case SIR_LIM_ADDTS_RSP_TIMEOUT:
1949 limProcessSmeReqMessages(pMac,limMsg);
1950 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001951#ifdef FEATURE_WLAN_ESE
1952 case SIR_LIM_ESE_TSM_TIMEOUT:
1953#ifndef FEATURE_WLAN_ESE_UPLOAD
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 limProcessTsmTimeoutHandler(pMac,limMsg);
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001955#endif /* FEATURE_WLAN_ESE_UPLOAD */
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 break;
1957 case WDA_TSM_STATS_RSP:
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001958#ifdef FEATURE_WLAN_ESE_UPLOAD
1959 limSendSmePEEseTsmRsp(pMac, (tAniGetTsmStatsRsp *)limMsg->bodyptr);
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07001960#else
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08001961 limProcessHalEseTsmRsp(pMac, limMsg);
1962#endif /* FEATURE_WLAN_ESE_UPLOAD */
Jeff Johnson295189b2012-06-20 16:38:30 -07001963 break;
1964#endif
1965 case WDA_ADD_TS_RSP:
1966 limProcessHalAddTsRsp(pMac, limMsg);
1967 break;
1968
1969 case SIR_LIM_DEL_TS_IND:
1970 limProcessDelTsInd(pMac, limMsg);
Madan Mohan Koyyalamudif244d8f2012-11-29 11:21:05 -08001971 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07001972 case SIR_LIM_ADD_BA_IND:
1973 limProcessAddBaInd(pMac, limMsg);
1974 break;
1975 case SIR_LIM_DEL_BA_ALL_IND:
Kiran Kumar Lokere458d7322013-05-29 14:29:43 -07001976 limDelAllBASessions(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001977 break;
1978 case SIR_LIM_DEL_BA_IND:
1979 limProcessMlmHalBADeleteInd( pMac, limMsg );
1980 break;
1981
1982 case SIR_LIM_BEACON_GEN_IND: {
Jeff Johnson295189b2012-06-20 16:38:30 -07001983
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 if( pMac->lim.gLimSystemRole != eLIM_AP_ROLE )
Jeff Johnson295189b2012-06-20 16:38:30 -07001985 schProcessPreBeaconInd(pMac, limMsg);
1986
1987 }
1988 break;
1989
1990 case SIR_LIM_DELETE_STA_CONTEXT_IND:
1991 limDeleteStaContext(pMac, limMsg);
1992 break;
1993
1994 case SIR_LIM_MIN_CHANNEL_TIMEOUT:
1995 case SIR_LIM_MAX_CHANNEL_TIMEOUT:
1996 case SIR_LIM_PERIODIC_PROBE_REQ_TIMEOUT:
1997 case SIR_LIM_JOIN_FAIL_TIMEOUT:
Madan Mohan Koyyalamudi9aff9ff2012-11-29 11:27:25 -08001998 case SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT:
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 case SIR_LIM_AUTH_FAIL_TIMEOUT:
2000 case SIR_LIM_AUTH_RSP_TIMEOUT:
2001 case SIR_LIM_ASSOC_FAIL_TIMEOUT:
2002 case SIR_LIM_REASSOC_FAIL_TIMEOUT:
2003#ifdef WLAN_FEATURE_VOWIFI_11R
2004 case SIR_LIM_FT_PREAUTH_RSP_TIMEOUT:
2005#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 case SIR_LIM_REMAIN_CHN_TIMEOUT:
Viral Modid86bde22012-12-10 13:09:21 -08002007 case SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT:
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08002008 case SIR_LIM_DISASSOC_ACK_TIMEOUT:
2009 case SIR_LIM_DEAUTH_ACK_TIMEOUT:
Gopichand Nakkalad492d202013-05-10 02:50:47 +05302010 case SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE:
Sushant Kaushik9e923872015-04-02 17:09:31 +05302011 case SIR_LIM_AUTH_RETRY_TIMEOUT:
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05302012#ifdef WLAN_FEATURE_LFR_MBB
2013 case SIR_LIM_PREAUTH_MBB_RSP_TIMEOUT:
Padma, Santhosh Kumarf4966dc2017-01-03 18:56:00 +05302014 case SIR_LIM_REASSOC_MBB_RSP_TIMEOUT:
Padma, Santhosh Kumar67f479b2016-12-28 15:43:42 +05302015#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 // These timeout messages are handled by MLM sub module
2017
2018 limProcessMlmReqMessages(pMac,
2019 limMsg);
2020
2021 break;
2022
2023 case SIR_LIM_HEART_BEAT_TIMEOUT:
2024 /** check if heart beat failed, even if one Beacon
2025 * is rcvd within the Heart Beat interval continue
2026 * normal processing
2027 */
2028
2029 #if 0
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002030 PELOG1(limLog(pMac, LOG1, FL("Heartbeat timeout, SME %d, MLME %d, #bcn %d"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 pMac->lim.gLimSmeState, pMac->lim.gLimMlmState,
2032 pMac->lim.gLimRxedBeaconCntDuringHB);)
2033
2034 if(pMac->lim.gLimSystemRole == eLIM_STA_IN_IBSS_ROLE)
2035 limIbssHeartBeatHandle(pMac); //HeartBeat for peers.
2036 else
2037 /**
2038 * Heartbeat failure occurred on STA
2039 * This is handled by LMM sub module.
2040 */
2041 limHandleHeartBeatFailure(pMac);
2042
2043 break;
2044 #endif //TO SUPPORT BT-AMP
Yathish9f22e662012-12-10 14:21:35 -08002045 if (limIsSystemInScanState(pMac))
2046 {
2047 // System is in DFS (Learn) mode
2048 // Defer processsing this message
2049 if (limDeferMsg(pMac, limMsg) != TX_SUCCESS)
2050 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002051 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 -08002052 limMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
2053 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
2054 limLogSessionStates(pMac);
2055 }
2056 }
2057 else
2058 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002059 if (NULL == limMsg->bodyptr)
2060 {
2061 limHandleHeartBeatTimeout(pMac);
2062 }
2063 else
2064 {
2065 limHandleHeartBeatTimeoutForSession(pMac, (tpPESession)limMsg->bodyptr);
2066 }
Gopichand Nakkala78a6c812013-05-13 16:39:49 +05302067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 break;
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -08002069
Jeff Johnson295189b2012-06-20 16:38:30 -07002070 case SIR_LIM_PROBE_HB_FAILURE_TIMEOUT:
2071 limHandleHeartBeatFailureTimeout(pMac);
2072 break;
2073
2074 case SIR_LIM_CHANNEL_SCAN_TIMEOUT:
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 /**
2076 * Background scan timeout occurred on STA.
2077 * This is handled by LMM sub module.
2078 */
2079 limDeactivateAndChangeTimer(pMac, eLIM_BACKGROUND_SCAN_TIMER);
2080
2081 //We will do background scan even in bcnps mode
2082 //if (pMac->sys.gSysEnableScanMode)
2083 pMac->lim.gLimReportBackgroundScanResults = FALSE;
2084 limTriggerBackgroundScan(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002085 break;
2086
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 case SIR_LIM_CNF_WAIT_TIMEOUT:
2088
2089 /*
2090 ** Does not receive CNF or dummy packet
2091 **/
2092 limHandleCnfWaitTimeout(pMac, (tANI_U16) limMsg->bodyval);
2093
2094 break;
2095
2096 case SIR_LIM_KEEPALIVE_TIMEOUT:
2097 limSendKeepAliveToPeer(pMac);
2098
2099 break;
2100
2101 case SIR_LIM_RETRY_INTERRUPT_MSG:
2102 // Message from ISR upon TFP's max retry limit interrupt
2103
2104 break;
2105
2106 case SIR_LIM_INV_KEY_INTERRUPT_MSG:
2107 // Message from ISR upon SP's Invalid session key interrupt
2108
2109 break;
2110
2111 case SIR_LIM_KEY_ID_INTERRUPT_MSG:
2112 // Message from ISR upon SP's Invalid key ID interrupt
2113
2114 break;
2115
2116 case SIR_LIM_REPLAY_THRES_INTERRUPT_MSG:
2117 // Message from ISR upon SP's Replay threshold interrupt
2118
2119 break;
2120
2121 case SIR_LIM_CHANNEL_SWITCH_TIMEOUT:
2122 limProcessChannelSwitchTimeout(pMac);
2123 break;
2124
2125 case SIR_LIM_QUIET_TIMEOUT:
2126 limProcessQuietTimeout(pMac);
2127 break;
2128
2129 case SIR_LIM_QUIET_BSS_TIMEOUT:
2130 limProcessQuietBssTimeout(pMac);
2131 break;
2132
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 case SIR_LIM_UPDATE_OLBC_CACHEL_TIMEOUT:
2134 limHandleUpdateOlbcCache(pMac);
2135 break;
2136#if 0
2137 case SIR_LIM_WPS_OVERLAP_TIMEOUT:
2138 limProcessWPSOverlapTimeout(pMac);
2139 break;
2140#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 case WDA_ADD_BSS_RSP:
2142 limProcessMlmAddBssRsp( pMac, limMsg );
2143 break;
2144
2145 case WDA_ADD_STA_RSP:
2146
2147 //call a wrapper by paasing bodyptr, their get sessionID and and call proper function from there.
2148 limProcessAddStaRsp(pMac,limMsg);
2149 break;
2150
2151 case WDA_DELETE_STA_RSP:
2152 limProcessMlmDelStaRsp(pMac, limMsg);
2153 break;
2154
2155 case WDA_ADD_STA_SELF_RSP:
2156 limProcessAddStaSelfRsp(pMac, limMsg);
2157 break;
2158 case WDA_DEL_STA_SELF_RSP:
2159 limProcessDelStaSelfRsp(pMac, limMsg);
2160 break;
2161
2162 case WDA_DELETE_BSS_RSP:
2163 limHandleDeleteBssRsp(pMac,limMsg); //wrapper routine to handle delete bss response
2164 break;
2165
2166 case WDA_SET_BSSKEY_RSP:
2167 case WDA_SET_STA_BCASTKEY_RSP:
2168 limProcessMlmSetBssKeyRsp( pMac, limMsg );
2169 break;
2170 case WDA_SET_STAKEY_RSP:
2171 limProcessMlmSetStaKeyRsp( pMac, limMsg );
2172 break;
2173 case WDA_REMOVE_BSSKEY_RSP:
2174 case WDA_REMOVE_STAKEY_RSP:
2175 limProcessMlmRemoveKeyRsp( pMac, limMsg );
2176 break;
2177 case WDA_ADDBA_RSP:
2178 limProcessMlmHalAddBARsp( pMac, limMsg );
2179 break;
2180
2181 case WDA_STA_STAT_RSP:
2182 case WDA_AGGR_STAT_RSP:
2183 case WDA_GLOBAL_STAT_RSP:
2184 case WDA_STAT_SUMM_RSP:
2185 limSendSmeStatsRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2186 break;
2187
2188 case WDA_GET_STATISTICS_RSP:
2189 limSendSmePEStatisticsRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2190 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002191#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08002192 case WDA_GET_ROAM_RSSI_RSP:
2193 limSendSmePEGetRoamRssiRsp ( pMac, limMsg->type, (void *)limMsg->bodyptr);
2194 break;
2195#endif
2196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197
2198 case WDA_SET_MIMOPS_RSP: //limProcessSetMimoRsp(pMac, limMsg);
2199 case WDA_SET_TX_POWER_RSP: //limProcessSetTxPowerRsp(pMac, limMsg);
2200 case WDA_GET_TX_POWER_RSP: //limProcessGetTxPowerRsp(pMac, limMsg);
2201 case WDA_GET_NOISE_RSP:
2202 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2203 limMsg->bodyptr = NULL;
2204 //limProcessGetNoiseRsp(pMac, limMsg);
2205 break;
2206
2207 case WDA_SET_MAX_TX_POWER_RSP:
2208#if defined WLAN_FEATURE_VOWIFI
2209 rrmSetMaxTxPowerRsp( pMac, limMsg );
2210#endif
2211 if(limMsg->bodyptr != NULL)
2212 {
2213 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2214 limMsg->bodyptr = NULL;
2215 }
2216 break;
2217
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 case SIR_LIM_ADDR2_MISS_IND:
2219 {
2220 limLog(pMac, LOGE,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002221 FL("Addr2 mismatch interrupt received %X"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 limMsg->type);
2223 /*a message from HAL indicating addr2 mismatch interrupt occurred
2224 limMsg->bodyptr contains only pointer to 48-bit addr2 field*/
2225 //Dinesh fix this. the third parameter should be sessionentry.
2226 //limHandleUnknownA2IndexFrames(pMac, (void *)limMsg->bodyptr);
2227
2228 /*Free message body pointer*/
2229 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002230 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 break;
2232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002233
2234#ifdef WLAN_FEATURE_VOWIFI_11R
2235 case WDA_AGGR_QOS_RSP:
2236 limProcessFTAggrQoSRsp( pMac, limMsg );
2237 break;
2238#endif
2239
2240 case WDA_SET_LINK_STATE_RSP:
2241 linkStateParams = (tLinkStateParams *)limMsg->bodyptr;
2242#if defined WLAN_FEATURE_VOWIFI_11R
2243 pSession = linkStateParams->session;
2244 if(linkStateParams->ft)
2245 {
2246 limSendReassocReqWithFTIEsMgmtFrame(pMac,
2247 pSession->pLimMlmReassocReq,
2248 pSession);
2249 }
2250#endif
2251 if( linkStateParams->callback )
2252 {
2253 linkStateParams->callback( pMac, linkStateParams->callbackArg );
2254 }
2255 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002256 limMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 break;
2258
2259#ifdef WLAN_FEATURE_PACKET_FILTERING
2260 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP:
2261 pmmProcessMessage(pMac, limMsg);
2262 break;
2263#endif // WLAN_FEATURE_PACKET_FILTERING
2264
2265#ifdef WLAN_FEATURE_GTK_OFFLOAD
2266 case WDA_GTK_OFFLOAD_GETINFO_RSP:
2267 pmmProcessMessage(pMac, limMsg);
2268 break;
2269#endif // WLAN_FEATURE_GTK_OFFLOAD
Yathish9f22e662012-12-10 14:21:35 -08002270 case eWNI_SME_SET_BCN_FILTER_REQ:
2271 {
2272#ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE
2273 tpPESession psessionEntry;
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302274 tANI_U8 sessionId;
2275 tSirSetActiveModeSetBncFilterReq *bcnFilterReq =
2276 (tSirSetActiveModeSetBncFilterReq *)limMsg->bodyptr;
2277 psessionEntry = peFindSessionByBssid(pMac, bcnFilterReq->bssid,
2278 &sessionId);
Yathish9f22e662012-12-10 14:21:35 -08002279 if(psessionEntry != NULL && IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE)
2280 {
2281 // sending beacon filtering information down to HAL
2282 if (limSendBeaconFilterInfo(pMac, psessionEntry) != eSIR_SUCCESS)
2283 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002284 limLog(pMac, LOGE, FL("Fail to send Beacon Filter Info "));
Yathish9f22e662012-12-10 14:21:35 -08002285 }
2286 }
Dhanashri Atred7885c22013-03-29 11:19:05 -07002287 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2288 limMsg->bodyptr = NULL;
Yathish9f22e662012-12-10 14:21:35 -08002289#endif
2290 }
2291 break;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302292 case eWNI_SME_HT40_OBSS_SCAN_IND:
2293 {
Sandeep Puligilla9f384742014-04-11 02:27:04 +05302294 tpPESession psessionEntry = NULL;
2295 tANI_U8 sessionId;
2296 tSirSmeHT40OBSSScanInd *ht40ScanInd =
Siddharth Bhald31c1252014-05-05 19:34:14 +05302297 (tSirSmeHT40OBSSScanInd *)limMsg->bodyptr;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302298
Sandeep Puligilla9f384742014-04-11 02:27:04 +05302299 psessionEntry = peFindSessionByBssid(pMac, ht40ScanInd->peerMacAddr,
Siddharth Bhald31c1252014-05-05 19:34:14 +05302300 &sessionId);
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302301
Siddharth Bhald31c1252014-05-05 19:34:14 +05302302 if (psessionEntry != NULL)
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302303 {
Siddharth Bhald31c1252014-05-05 19:34:14 +05302304 if( IS_HT40_OBSS_SCAN_FEATURE_ENABLE &&
2305 psessionEntry->htSupportedChannelWidthSet ==
2306 WNI_CFG_CHANNEL_BONDING_MODE_ENABLE )
2307 {
2308 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
2309 "OBSS Scan Start Req: session id %d"
2310 "htSupportedChannelWidthSet %d", psessionEntry->peSessionId,
2311 psessionEntry->htSupportedChannelWidthSet);
2312 limSendHT40OBSSScanInd(pMac, psessionEntry);
2313 }
2314 else
2315 {
2316 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
2317 "OBSS Scan not started: htSupportedChannelWidthSet- %d"
2318 " session id %d", psessionEntry->htSupportedChannelWidthSet,
2319 psessionEntry->peSessionId);
2320 }
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302321 }
2322 else
2323 {
2324 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
Siddharth Bhald31c1252014-05-05 19:34:14 +05302325 "OBSS Scan not started: session id is NULL");
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302326 }
2327 vos_mem_free(limMsg->bodyptr);
2328 limMsg->bodyptr = NULL;
2329 }
2330 break;
2331 case eWNI_SME_HT40_STOP_OBSS_SCAN_IND:
2332 {
2333 tpPESession psessionEntry = NULL;
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302334 tANI_U8 sessionId;
2335 tSirSmeHT40OBSSStopScanInd *ht40StopScanInd =
2336 (tSirSmeHT40OBSSStopScanInd *)limMsg->bodyptr;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302337
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302338 psessionEntry = peFindSessionByBssid(pMac,
2339 ht40StopScanInd->bssid, &sessionId);;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302340 /* Sending LIM STOP OBSS SCAN Indication
2341 Stop command support is only for debugging purpose */
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302342 if (psessionEntry && IS_HT40_OBSS_SCAN_FEATURE_ENABLE)
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302343 limSendHT40OBSSStopScanInd(pMac, psessionEntry);
2344 else
2345 VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_ERROR,
2346 "OBSS Scan Stop not started ");
2347 }
Sreelakshmi Konamkidb3f75a2016-05-26 15:41:04 +05302348 vos_mem_free(limMsg->bodyptr);
2349 limMsg->bodyptr = NULL;
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302350 break;
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05302351#ifdef WLAN_FEATURE_AP_HT40_24G
2352 case eWNI_SME_SET_HT_2040_MODE:
2353 limProcessSmeReqMessages(pMac, limMsg);
2354 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2355 limMsg->bodyptr = NULL;
2356 break;
2357#endif
2358
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302359#ifdef FEATURE_WLAN_TDLS
2360 case WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP:
2361 {
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302362 tpPESession psessionEntry;
2363 tANI_U8 sessionId;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302364 tDphHashNode *pStaDs = NULL;
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302365 int i, aid;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05302366 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
2367 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams*) limMsg->bodyptr;
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302368
2369 if((psessionEntry = peFindSessionByStaId(pMac,
2370 pTdlsLinkEstablishParams->staIdx,
2371 &sessionId))== NULL)
2372 {
Sushant Kaushik87787972015-09-11 16:05:00 +05302373 limLog(pMac, LOGE, FL("session %u does not exist"), sessionId);
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302374 /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME
2375 with session id as zero and status as FAILURE so, that message
2376 queued in SME queue can be freed to prevent the SME cmd buffer leak */
2377 limSendSmeTdlsLinkEstablishReqRsp(pMac,
2378 0,
2379 NULL,
2380 NULL,
2381 eSIR_FAILURE);
2382 }
2383 else
2384 {
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302385 for (i = 0;
2386 i < sizeof(psessionEntry->peerAIDBitmap)/sizeof(tANI_U32);
2387 i++) {
2388 for (aid = 0; aid < (sizeof(tANI_U32) << 3); aid++) {
2389 if (CHECK_BIT(psessionEntry->peerAIDBitmap[i], aid)) {
2390 pStaDs = dphGetHashEntry(pMac,
2391 (aid + i*(sizeof(tANI_U32) << 3)),
2392 &psessionEntry->dph.dphHashTable);
2393 if ((NULL != pStaDs) &&
2394 (pTdlsLinkEstablishParams->staIdx ==
2395 pStaDs->staIndex))
2396 goto send_link_resp;
2397 }
2398 }
2399 }
2400send_link_resp:
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302401 if (pStaDs)
2402 limSendSmeTdlsLinkEstablishReqRsp(pMac,
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302403 psessionEntry->smeSessionId,
Masti, Narayanraddif10fd792015-12-15 15:01:01 +05302404 pStaDs->staAddr,
2405 pStaDs,
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302406 pTdlsLinkEstablishParams->status) ;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302407 else
2408 limSendSmeTdlsLinkEstablishReqRsp(pMac,
2409 psessionEntry->smeSessionId,
2410 NULL, NULL,
2411 pTdlsLinkEstablishParams->status) ;
Gopichand Nakkala24be5312013-07-02 16:47:12 +05302412 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05302413 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2414 limMsg->bodyptr = NULL;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302415 break;
2416 }
Atul Mittal60bd4292014-08-14 12:19:27 +05302417
2418 case WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP:
2419 {
2420 tpPESession psessionEntry;
2421 tANI_U8 sessionId;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302422 tDphHashNode *pStaDs = NULL;
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302423 int i, aid;
Atul Mittal60bd4292014-08-14 12:19:27 +05302424 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
2425 pTdlsChanSwitchParams = (tTdlsChanSwitchParams*) limMsg->bodyptr;
2426
2427 if((psessionEntry = peFindSessionByStaId(pMac,
2428 pTdlsChanSwitchParams->staIdx,
2429 &sessionId))== NULL)
2430 {
Sushant Kaushik87787972015-09-11 16:05:00 +05302431 limLog(pMac, LOGE, FL("session %u does not exist"), sessionId);
Atul Mittal60bd4292014-08-14 12:19:27 +05302432 /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME
2433 with session id as zero and status as FAILURE so, that message
2434 queued in SME queue can be freed to prevent the SME cmd buffer leak */
2435 limSendSmeTdlsChanSwitchReqRsp(pMac,
2436 0,
2437 NULL,
2438 NULL,
2439 eSIR_FAILURE);
2440 }
2441 else
2442 {
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302443 for (i = 0;
2444 i < sizeof(psessionEntry->peerAIDBitmap)/sizeof(tANI_U32);
2445 i++) {
2446 for (aid = 0; aid < (sizeof(tANI_U32) << 3); aid++) {
2447 if (CHECK_BIT(psessionEntry->peerAIDBitmap[i], aid)) {
2448 pStaDs = dphGetHashEntry(pMac,
2449 (aid + i*(sizeof(tANI_U32) << 3)),
2450 &psessionEntry->dph.dphHashTable);
2451 if ((NULL != pStaDs) &&
2452 (pTdlsChanSwitchParams->staIdx ==
2453 pStaDs->staIndex))
2454 goto send_chan_switch_resp;
2455 }
2456 }
2457 }
2458send_chan_switch_resp:
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302459 if (pStaDs)
2460 limSendSmeTdlsChanSwitchReqRsp(pMac,
Atul Mittal60bd4292014-08-14 12:19:27 +05302461 psessionEntry->smeSessionId,
Masti, Narayanraddi36c67622016-01-06 16:07:34 +05302462 pStaDs->staAddr,
2463 pStaDs,
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +05302464 pTdlsChanSwitchParams->status);
2465 else
2466 limSendSmeTdlsChanSwitchReqRsp(pMac,
2467 psessionEntry->smeSessionId,
2468 NULL, NULL,
2469 pTdlsChanSwitchParams->status);
Atul Mittal60bd4292014-08-14 12:19:27 +05302470 }
2471 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2472 limMsg->bodyptr = NULL;
2473 break;
2474 }
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05302475#endif
Gopichand Nakkala2c231c82013-06-11 17:49:16 +05302476
2477 case WDA_RX_SCAN_EVENT:
2478 limProcessRxScanEvent(pMac, limMsg->bodyptr);
2479 break;
2480
Ravi Joshid2ca7c42013-07-23 08:37:49 -07002481 case WDA_IBSS_PEER_INACTIVITY_IND:
2482 {
2483 limProcessIbssPeerInactivity(pMac, limMsg->bodyptr);
2484 vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
2485 limMsg->bodyptr = NULL;
2486 break;
2487 }
Abhishek Singh00b71972016-01-07 10:51:04 +05302488#ifdef WLAN_FEATURE_RMC
2489 case WDA_RMC_BECOME_RULER:
2490 limProcessRMCMessages(pMac, eLIM_RMC_BECOME_RULER_RESP,
2491 (void *)limMsg->bodyptr);
2492 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2493 limMsg->bodyptr = NULL;
2494 break ;
2495
2496 case WDA_RMC_RULER_SELECT_RESP:
2497 limProcessRMCMessages(pMac, eLIM_RMC_RULER_SELECT_RESP,
2498 (void *)limMsg->bodyptr);
2499 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2500 limMsg->bodyptr = NULL;
2501 break ;
2502
2503 case WDA_RMC_UPDATE_IND:
2504 limProcessRMCMessages(pMac, eLIM_RMC_RULER_PICK_NEW,
2505 (void *)limMsg->bodyptr);
2506 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2507 limMsg->bodyptr = NULL;
2508 break ;
2509#endif /* WLAN_FEATURE_RMC */
Ravi Joshid2ca7c42013-07-23 08:37:49 -07002510
Siddharth Bhal4f3187c2014-10-09 21:38:08 +05302511 case WDA_SPOOF_MAC_ADDR_RSP:
2512 limProcessMlmSpoofMacAddrRsp(pMac, (tSirRetStatus)limMsg->bodyval);
2513 break;
2514
Pradeep Reddy POTTETI31505892015-04-16 16:47:54 +05302515 case eWNI_SME_SET_TDLS_2040_BSSCOEX_REQ:
2516 limProcessSmeSetTdls2040BSSCoexReq(pMac, limMsg->bodyptr);
2517 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2518 limMsg->bodyptr = NULL;
2519 break;
2520
Masti, Narayanraddi1fb32a92015-06-29 13:14:06 +05302521 case eWNI_SME_DEL_ALL_TDLS_PEERS:
2522 limProcessSmeDelAllTdlsPeers(pMac, limMsg->bodyptr);
2523 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2524 limMsg->bodyptr = NULL;
2525 break;
Manjeet Singh3ed79242017-01-11 19:04:32 +05302526
2527 case eWNI_SME_CAP_TSF_REQ:
2528 lim_process_sme_cap_tsf_req(pMac, limMsg->bodyptr);
2529 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2530 limMsg->bodyptr = NULL;
2531 break;
2532
2533 case eWNI_SME_GET_TSF_REQ:
2534 lim_process_sme_get_tsf_req(pMac, limMsg->bodyptr);
2535 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2536 limMsg->bodyptr = NULL;
2537 break;
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +05302538 case eWNI_SME_DEL_BA_SES_REQ:
2539 lim_process_sme_del_ba_ses_req(pMac, limMsg->bodyptr);
2540 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2541 limMsg->bodyptr = NULL;
2542 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 default:
2544 vos_mem_free((v_VOID_t*)limMsg->bodyptr);
2545 limMsg->bodyptr = NULL;
2546 // Unwanted messages
2547 // Log error
2548 limLog(pMac, LOGE,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002549 FL("Discarding unexpected message received %X"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 limMsg->type);
2551 limPrintMsgName(pMac, LOGE, limMsg->type);
2552 break;
2553
2554 } // switch (limMsg->type)
2555
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002556 PELOG2(limLog(pMac, LOG2, FL("Done Processing msgType = %d, sme state = %s, mlm state = %s"),
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 limMsg->type, limSmeStateStr(pMac->lim.gLimSmeState),
2558 limMlmStateStr(pMac->lim.gLimMlmState));)
2559
2560} /*** end limProcessMessages() ***/
2561
2562
2563
2564/**
2565 * limProcessDeferredMessageQueue
2566 *
2567 *FUNCTION:
2568 * This function is called by LIM while exiting from Learn
2569 * mode. This function fetches messages posted to the LIM
2570 * deferred message queue limDeferredMsgQ.
2571 *
2572 *LOGIC:
2573 *
2574 *ASSUMPTIONS:
2575 * NA
2576 *
2577 *NOTE:
2578 * NA
2579 *
2580 * @param pMac - Pointer to Global MAC structure
2581 * @return None
2582 */
2583
2584void
2585limProcessDeferredMessageQueue(tpAniSirGlobal pMac)
2586{
2587 tSirMsgQ limMsg = { 0, 0, 0 };
2588
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 tSirMsgQ *readMsg;
2590 tANI_U16 size;
2591
2592 /*
2593 ** check any deferred messages need to be processed
2594 **/
2595 size = pMac->lim.gLimDeferredMsgQ.size;
2596 if (size > 0)
2597 {
2598 while ((readMsg = limReadDeferredMsgQ(pMac)) != NULL)
2599 {
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302600 vos_mem_copy((tANI_U8*) &limMsg,
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 (tANI_U8*) readMsg, sizeof(tSirMsgQ));
2602 size--;
2603 limProcessMessages(pMac, &limMsg);
2604
2605 if((limIsSystemInScanState(pMac)) || (true != GET_LIM_PROCESS_DEFD_MESGS(pMac)) ||
Hema Aparna Medicharlab56b6612015-05-18 11:42:52 +05302606 (pMac->lim.gLimSystemInScanLearnMode) || pMac->lim.gLimAddtsSent)
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 break;
2608 }
2609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002610} /*** end limProcessDeferredMessageQueue() ***/
2611
2612
2613/*
2614 * limProcessNormalHddMsg
2615 * Function: this function checks the current lim state and decide whether the message passed shall be deffered.
2616 * @param pMac - Pointer to Global MAC structure
2617 * pLimMsg -- the message need to be processed
2618 * fRspReqd -- whether return result to hdd
2619 * @return None
2620 */
2621void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRspReqd)
2622{
2623 tANI_BOOLEAN fDeferMsg = eANI_BOOLEAN_TRUE;
2624
2625 /* Added For BT-AMP Support */
2626 if ((pMac->lim.gLimSystemRole == eLIM_AP_ROLE) ||(pMac->lim.gLimSystemRole == eLIM_BT_AMP_AP_ROLE )
2627 ||(pMac->lim.gLimSystemRole == eLIM_BT_AMP_STA_ROLE)
2628 ||(pMac->lim.gLimSystemRole == eLIM_UNKNOWN_ROLE))
2629 {
2630 /** This check is required only for the AP and in 2 cases.
2631 * 1. If we are in learn mode and we receive any of these messages,
2632 * you have to come out of scan and process the message, hence dont
2633 * defer the message here. In handler, these message could be defered
2634 * till we actually come out of scan mode.
2635 * 2. If radar is detected, you might have to defer all of these
2636 * messages except Stop BSS request/ Switch channel request. This
2637 * decision is also made inside its handler.
2638 *
2639 * Please be careful while using the flag fDeferMsg. Possibly you
2640 * might end up in an infinite loop.
2641 **/
2642 if (((pLimMsg->type == eWNI_SME_START_BSS_REQ) ||
2643 (pLimMsg->type == eWNI_SME_STOP_BSS_REQ) ||
2644 (pLimMsg->type == eWNI_SME_SWITCH_CHL_REQ) ||
2645 (pLimMsg->type == eWNI_SME_SWITCH_CHL_CB_SECONDARY_REQ) ||
2646 (pLimMsg->type == eWNI_SME_SWITCH_CHL_CB_PRIMARY_REQ)))
2647 {
2648 fDeferMsg = eANI_BOOLEAN_FALSE;
2649 }
2650 }
2651
2652 /* limInsystemInscanState() refers the psessionEntry, how to get session Entry????*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002653 if (((pMac->lim.gLimAddtsSent) || (limIsSystemInScanState(pMac)) /*||
2654 (LIM_IS_RADAR_DETECTED(pMac))*/) && fDeferMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 {
2656 // System is in DFS (Learn) mode or awaiting addts response
2657 // or if radar is detected, Defer processsing this message
2658 if (limDeferMsg(pMac, pLimMsg) != TX_SUCCESS)
2659 {
2660#ifdef WLAN_DEBUG
2661 pMac->lim.numSme++;
2662#endif
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002663 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 -07002664 pLimMsg->type, pMac->lim.gLimSmeState, pMac->lim.gLimPrevSmeState,
2665 pMac->lim.gLimSystemRole, pMac->lim.gLimMlmState, pMac->lim.gLimPrevMlmState);)
2666 limLogSessionStates(pMac);
2667 limPrintMsgName(pMac, LOGE, pLimMsg->type);
2668 // Release body
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302669 vos_mem_free(pLimMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002670 pLimMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 }
2672 }
2673 else
2674 {
2675 if(fRspReqd)
2676 {
2677 // These messages are from HDD
2678 // Since these requests may also be generated
2679 // internally within LIM module, need to
2680 // distinquish and send response to host
2681 pMac->lim.gLimRspReqd = eANI_BOOLEAN_TRUE;
2682 }
2683#ifdef WLAN_DEBUG
2684 pMac->lim.numSme++;
2685#endif
2686 if(limProcessSmeReqMessages(pMac, pLimMsg))
2687 {
2688 // Release body
2689 // limProcessSmeReqMessage consumed the buffer. We can free it.
Bansidhar Gopalachari1d9c6162013-07-11 10:24:30 +05302690 vos_mem_free(pLimMsg->bodyptr);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -08002691 pLimMsg->bodyptr = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 }
2693 }
2694}
2695
2696void
Jeff Johnsone7245742012-09-05 17:12:55 -07002697handleHTCapabilityandHTInfo(struct sAniSirGlobal *pMac, tpPESession psessionEntry)
Jeff Johnson295189b2012-06-20 16:38:30 -07002698{
2699 tSirMacHTCapabilityInfo macHTCapabilityInfo;
2700 tSirMacHTParametersInfo macHTParametersInfo;
2701 tSirMacHTInfoField1 macHTInfoField1;
2702 tSirMacHTInfoField2 macHTInfoField2;
2703 tSirMacHTInfoField3 macHTInfoField3;
2704 tANI_U32 cfgValue;
2705 tANI_U8 *ptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07002706
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &cfgValue) != eSIR_SUCCESS)
2708 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002709 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_CAP_INFO value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 return ;
2711 }
2712 ptr = (tANI_U8 *) &macHTCapabilityInfo;
2713 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2714 pMac->lim.gHTLsigTXOPProtection = (tANI_U8)macHTCapabilityInfo.lsigTXOPProtection;
2715 pMac->lim.gHTMIMOPSState = (tSirMacHTMIMOPowerSaveState) macHTCapabilityInfo.mimoPowerSave;
2716 pMac->lim.gHTGreenfield = (tANI_U8)macHTCapabilityInfo.greenField;
2717 pMac->lim.gHTMaxAmsduLength = (tANI_U8)macHTCapabilityInfo.maximalAMSDUsize;
2718 pMac->lim.gHTShortGI20Mhz = (tANI_U8)macHTCapabilityInfo.shortGI20MHz;
2719 pMac->lim.gHTShortGI40Mhz = (tANI_U8)macHTCapabilityInfo.shortGI40MHz;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 pMac->lim.gHTPSMPSupport = (tANI_U8)macHTCapabilityInfo.psmp;
2721 pMac->lim.gHTDsssCckRate40MHzSupport = (tANI_U8)macHTCapabilityInfo.dsssCckMode40MHz;
2722
2723 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, &cfgValue) != eSIR_SUCCESS)
2724 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002725 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_PARAM_INFO value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002726 return ;
2727 }
2728 ptr = (tANI_U8 *) &macHTParametersInfo;
2729 *ptr = (tANI_U8) (cfgValue & 0xff);
2730 pMac->lim.gHTAMpduDensity = (tANI_U8)macHTParametersInfo.mpduDensity;
2731 pMac->lim.gHTMaxRxAMpduFactor = (tANI_U8)macHTParametersInfo.maxRxAMPDUFactor;
2732
2733 // Get HT IE Info
2734 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD1, &cfgValue) != eSIR_SUCCESS)
2735 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002736 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD1 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 return ;
2738 }
2739 ptr = (tANI_U8 *) &macHTInfoField1;
2740 *((tANI_U8 *)ptr) = (tANI_U8) (cfgValue & 0xff);
2741 pMac->lim.gHTServiceIntervalGranularity = (tANI_U8)macHTInfoField1.serviceIntervalGranularity;
2742 pMac->lim.gHTControlledAccessOnly = (tANI_U8)macHTInfoField1.controlledAccessOnly;
2743 pMac->lim.gHTRifsMode = (tANI_U8)macHTInfoField1.rifsMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07002744
2745 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD2, &cfgValue) != eSIR_SUCCESS)
2746 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002747 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD2 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 return ;
2749 }
2750 ptr = (tANI_U8 *) &macHTInfoField2;
2751 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2752 pMac->lim.gHTOperMode = (tSirMacHTOperatingMode) macHTInfoField2.opMode;
2753
2754 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_INFO_FIELD3, &cfgValue) != eSIR_SUCCESS)
2755 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -07002756 limLog(pMac, LOGP, FL("Fail to retrieve WNI_CFG_HT_INFO_FIELD3 value"));
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return ;
2758 }
2759 ptr = (tANI_U8 *) &macHTInfoField3;
2760 *((tANI_U16 *)ptr) = (tANI_U16) (cfgValue & 0xffff);
2761 pMac->lim.gHTPCOActive = (tANI_U8)macHTInfoField3.pcoActive;
2762 pMac->lim.gHTPCOPhase = (tANI_U8)macHTInfoField3.pcoPhase;
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 pMac->lim.gHTSecondaryBeacon = (tANI_U8)macHTInfoField3.secondaryBeacon;
2764 pMac->lim.gHTDualCTSProtection = (tANI_U8)macHTInfoField3.dualCTSProtection;
2765 pMac->lim.gHTSTBCBasicMCS = (tANI_U8)macHTInfoField3.basicSTBCMCS;
Jeff Johnsone7245742012-09-05 17:12:55 -07002766
2767 /* The lim globals for channelwidth and secondary chnl have been removed and should not be used during no session;
2768 * instead direct cfg is read and used when no session for transmission of mgmt frames (same as old);
2769 * For now, we might come here during init and join with sessionEntry = NULL; in that case just fill the globals which exist
2770 * Sessionized entries values will be filled in join or add bss req. The ones which are missed in join are filled below
2771 */
2772 if (psessionEntry != NULL)
2773 {
Sandeep Puligilla11d49a62014-01-30 12:05:16 +05302774 psessionEntry->htCapability =
2775 IS_DOT11_MODE_HT(psessionEntry->dot11mode);
2776 psessionEntry->beaconParams.fLsigTXOPProtectionFullSupport =
2777 (tANI_U8)macHTInfoField3.lsigTXOPProtectionFullSupport;
Sandeep Puligilla70b6b162014-04-19 02:06:04 +05302778 limInitOBSSScanParams(pMac, psessionEntry);
Jeff Johnsone7245742012-09-05 17:12:55 -07002779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002780}
2781
2782void limLogSessionStates(tpAniSirGlobal pMac)
2783{
2784#ifdef WLAN_DEBUG
2785 int i;
2786
2787 for(i = 0; i < pMac->lim.maxBssId; i++)
2788 {
2789 if(pMac->lim.gpSession[i].valid)
2790 {
Abhishek Singh3cbf6052014-12-15 16:46:42 +05302791 limLog(pMac, LOG1, FL("Session[%d] sysRole(%d) limSmeState %d "
2792 "(prev sme state %d) mlm state %d (prev mlm state %d)"),
2793 i, pMac->lim.gpSession[i].limSystemRole,
2794 pMac->lim.gpSession[i].limSmeState,
2795 pMac->lim.gpSession[i].limPrevSmeState,
2796 pMac->lim.gpSession[i].limMlmState,
2797 pMac->lim.gpSession[i].limPrevMlmState);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 }
2799 }
2800#endif //ifdef WLAN_DEBUG
2801}