blob: b1de38a55407162b7df8ae4bd9d67193ada9d26f [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002 * Copyright (c) 2012-2014 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.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam842dad02014-02-18 18:44:02 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028/**=========================================================================
29
30 \file limSession.c
31
32 \brief implementation for lim Session related APIs
33
34 \author Sunit Bhatia
35
Jeff Johnson295189b2012-06-20 16:38:30 -070036
37 ========================================================================*/
38
39
40/*--------------------------------------------------------------------------
41 Include Files
42 ------------------------------------------------------------------------*/
43#include "aniGlobal.h"
44#include "limDebug.h"
45#include "limSession.h"
46#include "limUtils.h"
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080047#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
48#include "eseApi.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070049#endif
50
51/*--------------------------------------------------------------------------
52
53 \brief peInitBeaconParams() - Initialize the beaconParams structure
54
55
56 \param tpPESession - pointer to the session context or NULL if session can not be created.
57 \return void
58 \sa
59
60 --------------------------------------------------------------------------*/
61
62void peInitBeaconParams(tpAniSirGlobal pMac, tpPESession psessionEntry)
63{
64 psessionEntry->beaconParams.beaconInterval = 0;
65 psessionEntry->beaconParams.fShortPreamble = 0;
66 psessionEntry->beaconParams.llaCoexist = 0;
67 psessionEntry->beaconParams.llbCoexist = 0;
68 psessionEntry->beaconParams.llgCoexist = 0;
69 psessionEntry->beaconParams.ht20Coexist = 0;
70 psessionEntry->beaconParams.llnNonGFCoexist = 0;
71 psessionEntry->beaconParams.fRIFSMode = 0;
72 psessionEntry->beaconParams.fLsigTXOPProtectionFullSupport = 0;
73 psessionEntry->beaconParams.gHTObssMode = 0;
74
75 // Number of legacy STAs associated
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +053076 vos_mem_set((void*)&psessionEntry->gLim11bParams, sizeof(tLimProtStaParams), 0);
77 vos_mem_set((void*)&psessionEntry->gLim11aParams, sizeof(tLimProtStaParams), 0);
78 vos_mem_set((void*)&psessionEntry->gLim11gParams, sizeof(tLimProtStaParams), 0);
79 vos_mem_set((void*)&psessionEntry->gLimNonGfParams, sizeof(tLimProtStaParams), 0);
80 vos_mem_set((void*)&psessionEntry->gLimHt20Params, sizeof(tLimProtStaParams), 0);
81 vos_mem_set((void*)&psessionEntry->gLimLsigTxopParams, sizeof(tLimProtStaParams), 0);
82 vos_mem_set((void*)&psessionEntry->gLimOlbcParams, sizeof(tLimProtStaParams), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070083}
84
85/*--------------------------------------------------------------------------
86
87 \brief peCreateSession() - creates a new PE session given the BSSID
88
89 This function returns the session context and the session ID if the session
90 corresponding to the passed BSSID is found in the PE session table.
91
92 \param pMac - pointer to global adapter context
93 \param bssid - BSSID of the new session
94 \param sessionId -session ID is returned here, if session is created.
95
96 \return tpPESession - pointer to the session context or NULL if session can not be created.
97
98 \sa
99
100 --------------------------------------------------------------------------*/
101tpPESession peCreateSession(tpAniSirGlobal pMac, tANI_U8 *bssid , tANI_U8* sessionId, tANI_U16 numSta)
102{
103 tANI_U8 i;
104 for(i =0; i < pMac->lim.maxBssId; i++)
105 {
106 /* Find first free room in session table */
107 if(pMac->lim.gpSession[i].valid == FALSE)
108 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530109 vos_mem_set((void*)&pMac->lim.gpSession[i], sizeof(tPESession), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700110
111 //Allocate space for Station Table for this session.
Sushant Kaushike470a452015-04-07 15:37:56 +0530112 pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = vos_mem_vmalloc(
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530113 sizeof(tpDphHashNode)*numSta);
114 if ( NULL == pMac->lim.gpSession[i].dph.dphHashTable.pHashTable )
Jeff Johnson295189b2012-06-20 16:38:30 -0700115 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530116 limLog(pMac, LOGE, FL("memory allocate for size %lu failed!"),
117 (long unsigned int) sizeof(tpDphHashNode)*numSta);
Jeff Johnson295189b2012-06-20 16:38:30 -0700118 return NULL;
119 }
120
Sushant Kaushike470a452015-04-07 15:37:56 +0530121 pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray = vos_mem_vmalloc(
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530122 sizeof(tDphHashNode)*numSta);
123 if ( NULL == pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray )
Jeff Johnson295189b2012-06-20 16:38:30 -0700124 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530125 limLog(pMac, LOGE, FL("memory allocate failed for Node array"
126 "of size %lu"),
127 (long unsigned int) sizeof(tDphHashNode)*numSta);
128 vos_mem_vfree(pMac->lim.gpSession[i].dph.dphHashTable.pHashTable);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -0800129 pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700130 return NULL;
131 }
132 pMac->lim.gpSession[i].dph.dphHashTable.size = numSta;
133
134 dphHashTableClassInit(pMac,
135 &pMac->lim.gpSession[i].dph.dphHashTable);
136
Sushant Kaushike470a452015-04-07 15:37:56 +0530137 pMac->lim.gpSession[i].gpLimPeerIdxpool = vos_mem_vmalloc(sizeof(
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530138 *pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1));
139 if ( NULL == pMac->lim.gpSession[i].gpLimPeerIdxpool )
Gopichand Nakkala777e6032012-12-31 16:39:21 -0800140 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530141 limLog(pMac, LOGE, FL("memory allocate failed "
142 "for peerId pool of size %lu!"), (long unsigned int)
143 sizeof(*pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1));
144 vos_mem_vfree(pMac->lim.gpSession[i].dph.dphHashTable.pHashTable);
145 vos_mem_vfree(pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray);
Leela Venkata Kiran Kumar Reddy Chiralad6c0fe22013-12-11 19:10:50 -0800146 pMac->lim.gpSession[i].dph.dphHashTable.pHashTable = NULL;
147 pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray = NULL;
Gopichand Nakkala777e6032012-12-31 16:39:21 -0800148 return NULL;
149 }
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530150 vos_mem_set(pMac->lim.gpSession[i].gpLimPeerIdxpool,
151 sizeof(*pMac->lim.gpSession[i].gpLimPeerIdxpool) * (numSta+1), 0);
Gopichand Nakkala777e6032012-12-31 16:39:21 -0800152 pMac->lim.gpSession[i].freePeerIdxHead = 0;
153 pMac->lim.gpSession[i].freePeerIdxTail = 0;
154 pMac->lim.gpSession[i].gLimNumOfCurrentSTAs = 0;
155
Jeff Johnson295189b2012-06-20 16:38:30 -0700156 /* Copy the BSSID to the session table */
157 sirCopyMacAddr(pMac->lim.gpSession[i].bssId, bssid);
158 pMac->lim.gpSession[i].valid = TRUE;
159
160 /* Intialize the SME and MLM states to IDLE */
161 pMac->lim.gpSession[i].limMlmState = eLIM_MLM_IDLE_STATE;
162 pMac->lim.gpSession[i].limSmeState = eLIM_SME_IDLE_STATE;
163 pMac->lim.gpSession[i].limCurrentAuthType = eSIR_OPEN_SYSTEM;
164 peInitBeaconParams(pMac, &pMac->lim.gpSession[i]);
165#ifdef WLAN_FEATURE_VOWIFI_11R
166 pMac->lim.gpSession[i].is11Rconnection = FALSE;
167#endif
168
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800169#ifdef FEATURE_WLAN_ESE
170 pMac->lim.gpSession[i].isESEconnection = FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#endif
172
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800173#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700174 pMac->lim.gpSession[i].isFastTransitionEnabled = FALSE;
175#endif
Jeff Johnson43971f52012-07-17 12:26:56 -0700176#ifdef FEATURE_WLAN_LFR
177 pMac->lim.gpSession[i].isFastRoamIniFeatureEnabled = FALSE;
178#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700179 *sessionId = i;
180
Jeff Johnsone7245742012-09-05 17:12:55 -0700181 pMac->lim.gpSession[i].gLimPhyMode = WNI_CFG_PHY_MODE_11G; //TODO :Check with the team what should be default mode
182 /* Initialize CB mode variables when session is created */
183 pMac->lim.gpSession[i].htSupportedChannelWidthSet = 0;
184 pMac->lim.gpSession[i].htRecommendedTxWidthSet = 0;
185 pMac->lim.gpSession[i].htSecondaryChannelOffset = 0;
Gopichand Nakkala2a0a1572013-02-10 21:39:16 -0800186#ifdef FEATURE_WLAN_TDLS
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530187 vos_mem_set(pMac->lim.gpSession[i].peerAIDBitmap,
188 sizeof(pMac->lim.gpSession[i].peerAIDBitmap), 0);
Atul Mittalbceb4a12014-11-27 18:50:19 +0530189 pMac->lim.gpSession[i].tdlsChanSwitProhibited = 0;
Gopichand Nakkala2a0a1572013-02-10 21:39:16 -0800190#endif
Gopichand Nakkalabe8653b2013-04-10 08:16:05 +0530191 pMac->lim.gpSession[i].fWaitForProbeRsp = 0;
192 pMac->lim.gpSession[i].fIgnoreCapsChange = 0;
Abhishek Singh9c1262f2014-02-26 14:48:36 +0530193 limLog(pMac, LOG1, FL("Create a new sessionId (%d) with BSSID: "
194 MAC_ADDRESS_STR " Max No. of STA %d"),
195 pMac->lim.gpSession[i].peSessionId,
196 MAC_ADDR_ARRAY(bssid), numSta);
Jeff Johnson295189b2012-06-20 16:38:30 -0700197 return(&pMac->lim.gpSession[i]);
198 }
199 }
200 limLog(pMac, LOGE, FL("Session can not be created.. Reached Max permitted sessions \n "));
201 return NULL;
202}
203
204
205/*--------------------------------------------------------------------------
206 \brief peFindSessionByBssid() - looks up the PE session given the BSSID.
207
208 This function returns the session context and the session ID if the session
209 corresponding to the given BSSID is found in the PE session table.
210
211 \param pMac - pointer to global adapter context
212 \param bssid - BSSID of the session
213 \param sessionId -session ID is returned here, if session is found.
214
215 \return tpPESession - pointer to the session context or NULL if session is not found.
216
217 \sa
218 --------------------------------------------------------------------------*/
219tpPESession peFindSessionByBssid(tpAniSirGlobal pMac, tANI_U8* bssid, tANI_U8* sessionId)
220{
221 tANI_U8 i;
222
223 for(i =0; i < pMac->lim.maxBssId; i++)
224 {
225 /* If BSSID matches return corresponding tables address*/
226 if( (pMac->lim.gpSession[i].valid) && (sirCompareMacAddr(pMac->lim.gpSession[i].bssId, bssid)))
227 {
228 *sessionId = i;
229 return(&pMac->lim.gpSession[i]);
230 }
231 }
232
233 limLog(pMac, LOG4, FL("Session lookup fails for BSSID: \n "));
234 limPrintMacAddr(pMac, bssid, LOG4);
235 return(NULL);
236
237}
238
239
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -0800240/*--------------------------------------------------------------------------
241 \brief peFindSessionByBssIdx() - looks up the PE session given the bssIdx.
242
243 This function returns the session context if the session
244 corresponding to the given bssIdx is found in the PE session table.
245 \param pMac - pointer to global adapter context
246 \param bssIdx - bss index of the session
247 \return tpPESession - pointer to the session context or NULL if session is not found.
248 \sa
249 --------------------------------------------------------------------------*/
250tpPESession peFindSessionByBssIdx(tpAniSirGlobal pMac, tANI_U8 bssIdx)
251{
252 tANI_U8 i;
253 for (i = 0; i < pMac->lim.maxBssId; i++)
254 {
255 /* If BSSID matches return corresponding tables address*/
256 if ( (pMac->lim.gpSession[i].valid) && (pMac->lim.gpSession[i].bssIdx == bssIdx))
257 {
258 return &pMac->lim.gpSession[i];
259 }
260 }
261 limLog(pMac, LOG4, FL("Session lookup fails for bssIdx: %d"), bssIdx);
262 return NULL;
263}
Jeff Johnson295189b2012-06-20 16:38:30 -0700264
265/*--------------------------------------------------------------------------
266 \brief peFindSessionBySessionId() - looks up the PE session given the session ID.
267
268 This function returns the session context if the session
269 corresponding to the given session ID is found in the PE session table.
270
271 \param pMac - pointer to global adapter context
272 \param sessionId -session ID for which session context needs to be looked up.
273
274 \return tpPESession - pointer to the session context or NULL if session is not found.
275
276 \sa
277 --------------------------------------------------------------------------*/
278 tpPESession peFindSessionBySessionId(tpAniSirGlobal pMac , tANI_U8 sessionId)
279{
280 if(sessionId >= pMac->lim.maxBssId)
281 {
282 limLog(pMac, LOGE, FL("Invalid sessionId: %d \n "), sessionId);
283 return(NULL);
284 }
285 if((pMac->lim.gpSession[sessionId].valid == TRUE))
286 {
287 return(&pMac->lim.gpSession[sessionId]);
288 }
289 limLog(pMac, LOG1, FL("Session %d not active\n "), sessionId);
290 return(NULL);
291
292}
293
294
295/*--------------------------------------------------------------------------
296 \brief peFindSessionByStaId() - looks up the PE session given staid.
297
298 This function returns the session context and the session ID if the session
299 corresponding to the given StaId is found in the PE session table.
300
301 \param pMac - pointer to global adapter context
302 \param staid - StaId of the session
303 \param sessionId -session ID is returned here, if session is found.
304
305 \return tpPESession - pointer to the session context or NULL if session is not found.
306
307 \sa
308 --------------------------------------------------------------------------*/
309tpPESession peFindSessionByStaId(tpAniSirGlobal pMac, tANI_U8 staid, tANI_U8* sessionId)
310{
311 tANI_U8 i, j;
312
313 for(i =0; i < pMac->lim.maxBssId; i++)
314 {
315 if(pMac->lim.gpSession[i].valid)
316 {
317 for(j = 0; j < pMac->lim.gpSession[i].dph.dphHashTable.size; j++)
318 {
319 if((pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray[j].valid) &&
320 (pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray[j].added) &&
321 (staid == pMac->lim.gpSession[i].dph.dphHashTable.pDphNodeArray[j].staIndex))
322 {
323 *sessionId = i;
324 return(&pMac->lim.gpSession[i]);
325 }
326 }
327 }
328 }
329
Jeff Johnsone7245742012-09-05 17:12:55 -0700330 limLog(pMac, LOG4, FL("Session lookup fails for StaId: %d\n "), staid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return(NULL);
332}
333
334
335
336/*--------------------------------------------------------------------------
337 \brief peDeleteSession() - deletes the PE session given the session ID.
338
339
340 \param pMac - pointer to global adapter context
341 \param sessionId -session ID of the session which needs to be deleted.
342
343 \sa
344 --------------------------------------------------------------------------*/
345void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry)
346{
347 tANI_U16 i = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -0700348 tANI_U16 n;
349 TX_TIMER *timer_ptr;
Jeff Johnson295189b2012-06-20 16:38:30 -0700350
Abhishek Singh9c1262f2014-02-26 14:48:36 +0530351 limLog(pMac, LOGW, FL("Trying to delete a session %d Opmode %d BssIdx %d"
352 " BSSID: " MAC_ADDRESS_STR), psessionEntry->peSessionId,
353 psessionEntry->operMode, psessionEntry->bssIdx,
354 MAC_ADDR_ARRAY(psessionEntry->bssId));
Jeff Johnson295189b2012-06-20 16:38:30 -0700355
Jeff Johnsone7245742012-09-05 17:12:55 -0700356 for (n = 0; n < pMac->lim.maxStation; n++)
357 {
358 timer_ptr = &pMac->lim.limTimers.gpLimCnfWaitTimer[n];
359
360 if(psessionEntry->peSessionId == timer_ptr->sessionId)
361 {
362 if(VOS_TRUE == tx_timer_running(timer_ptr))
363 {
364 tx_timer_deactivate(timer_ptr);
365 }
366 }
367 }
Abhishek Singh6d5d29c2014-07-03 14:25:22 +0530368
369#ifdef WLAN_FEATURE_11AC
370
371 /* Unblock the MuBF for other session if the MuBf session is deleted
372 */
373 if(psessionEntry->txMuBformee)
374 {
375 pMac->isMuBfsessionexist = FALSE;
376 }
377
378#endif
379
380 if (psessionEntry->pLimStartBssReq != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530382 vos_mem_free( psessionEntry->pLimStartBssReq );
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 psessionEntry->pLimStartBssReq = NULL;
384 }
385
386 if(psessionEntry->pLimJoinReq != NULL)
387 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530388 vos_mem_free( psessionEntry->pLimJoinReq );
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 psessionEntry->pLimJoinReq = NULL;
390 }
391
392 if(psessionEntry->pLimReAssocReq != NULL)
393 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530394 vos_mem_free( psessionEntry->pLimReAssocReq );
Jeff Johnson295189b2012-06-20 16:38:30 -0700395 psessionEntry->pLimReAssocReq = NULL;
396 }
397
398 if(psessionEntry->pLimMlmJoinReq != NULL)
399 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530400 vos_mem_free( psessionEntry->pLimMlmJoinReq );
Jeff Johnson295189b2012-06-20 16:38:30 -0700401 psessionEntry->pLimMlmJoinReq = NULL;
402 }
403
404 if(psessionEntry->dph.dphHashTable.pHashTable != NULL)
405 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530406 vos_mem_vfree(psessionEntry->dph.dphHashTable.pHashTable);
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 psessionEntry->dph.dphHashTable.pHashTable = NULL;
408 }
409
410 if(psessionEntry->dph.dphHashTable.pDphNodeArray != NULL)
411 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530412 vos_mem_vfree(psessionEntry->dph.dphHashTable.pDphNodeArray);
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 psessionEntry->dph.dphHashTable.pDphNodeArray = NULL;
414 }
415
Gopichand Nakkala777e6032012-12-31 16:39:21 -0800416 if(psessionEntry->gpLimPeerIdxpool != NULL)
417 {
Sushant Kaushike470a452015-04-07 15:37:56 +0530418 vos_mem_vfree(psessionEntry->gpLimPeerIdxpool);
Gopichand Nakkala777e6032012-12-31 16:39:21 -0800419 psessionEntry->gpLimPeerIdxpool = NULL;
420 }
421
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 if(psessionEntry->beacon != NULL)
423 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530424 vos_mem_free( psessionEntry->beacon);
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 psessionEntry->beacon = NULL;
426 }
427
428 if(psessionEntry->assocReq != NULL)
429 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530430 vos_mem_free( psessionEntry->assocReq);
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 psessionEntry->assocReq = NULL;
432 }
433
434 if(psessionEntry->assocRsp != NULL)
435 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530436 vos_mem_free( psessionEntry->assocRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 psessionEntry->assocRsp = NULL;
438 }
439
440
441 if(psessionEntry->parsedAssocReq != NULL)
442 {
443 // Cleanup the individual allocation first
444 for (i=0; i < psessionEntry->dph.dphHashTable.size; i++)
445 {
446 if ( psessionEntry->parsedAssocReq[i] != NULL )
447 {
448 if( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame )
449 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530450 vos_mem_free(((tpSirAssocReq)
451 (psessionEntry->parsedAssocReq[i]))->assocReqFrame);
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame = NULL;
453 ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrameLength = 0;
454 }
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530455 vos_mem_free(psessionEntry->parsedAssocReq[i]);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 psessionEntry->parsedAssocReq[i] = NULL;
457 }
458 }
459 // Cleanup the whole block
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530460 vos_mem_free(psessionEntry->parsedAssocReq);
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 psessionEntry->parsedAssocReq = NULL;
462 }
Dhanashri Atree3a2a592013-03-08 13:18:42 -0800463 if (NULL != psessionEntry->limAssocResponseData)
464 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530465 vos_mem_free( psessionEntry->limAssocResponseData);
Dhanashri Atree3a2a592013-03-08 13:18:42 -0800466 psessionEntry->limAssocResponseData = NULL;
467 }
468
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800469#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
Dhanashri Atree3a2a592013-03-08 13:18:42 -0800470 if (NULL != psessionEntry->pLimMlmReassocRetryReq)
471 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530472 vos_mem_free( psessionEntry->pLimMlmReassocRetryReq);
Dhanashri Atree3a2a592013-03-08 13:18:42 -0800473 psessionEntry->pLimMlmReassocRetryReq = NULL;
474 }
475#endif
476
477 if (NULL != psessionEntry->pLimMlmReassocReq)
478 {
Bansidhar Gopalachari72515da2013-07-11 11:14:27 +0530479 vos_mem_free( psessionEntry->pLimMlmReassocReq);
Dhanashri Atree3a2a592013-03-08 13:18:42 -0800480 psessionEntry->pLimMlmReassocReq = NULL;
481 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700482
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800483#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
484 limCleanupEseCtxt(pMac, psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485#endif
486
487 psessionEntry->valid = FALSE;
488 return;
489}
490
491
492/*--------------------------------------------------------------------------
493 \brief peFindSessionByPeerSta() - looks up the PE session given the Station Address.
494
495 This function returns the session context and the session ID if the session
496 corresponding to the given station address is found in the PE session table.
497
498 \param pMac - pointer to global adapter context
499 \param sa - Peer STA Address of the session
500 \param sessionId -session ID is returned here, if session is found.
501
502 \return tpPESession - pointer to the session context or NULL if session is not found.
503
504 \sa
505 --------------------------------------------------------------------------*/
506
507
508tpPESession peFindSessionByPeerSta(tpAniSirGlobal pMac, tANI_U8* sa, tANI_U8* sessionId)
509{
510 tANI_U8 i;
511 tpDphHashNode pSta;
512 tANI_U16 aid;
513
514 for(i =0; i < pMac->lim.maxBssId; i++)
515 {
516 if( (pMac->lim.gpSession[i].valid))
517 {
518 pSta = dphLookupHashEntry(pMac, sa, &aid, &pMac->lim.gpSession[i].dph.dphHashTable);
519 if (pSta != NULL)
520 {
521 *sessionId = i;
522 return &pMac->lim.gpSession[i];
523 }
524 }
525 }
Jeff Johnsone7245742012-09-05 17:12:55 -0700526
527 limLog(pMac, LOG1, FL("Session lookup fails for Peer StaId: \n "));
528 limPrintMacAddr(pMac, sa, LOG1);
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 return NULL;
530}
531
532
533
534
535
536
537
538
539