blob: 6ae8ee53b828ec0b8947ba25335855ef34c3e61c [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
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/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*
43 * Airgo Networks, Inc proprietary. All rights reserved.
44 * This file limProcessCfgUpdates.cc contains the utility functions
45 * to handle various CFG parameter update events
46 * Author: Chandra Modumudi
47 * Date: 01/20/03
48 * History:-
49 * Date Modified by Modification Information
50 * --------------------------------------------------------------------
51 */
52
53#include "aniGlobal.h"
54
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "wniCfgSta.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070056#include "sirMacProtDef.h"
57#include "cfgApi.h"
58#include "limTypes.h"
59#include "limUtils.h"
60#include "limPropExtsUtils.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070061#include "schApi.h"
62#include "pmmApi.h"
63#if defined WLAN_FEATURE_VOWIFI
64#include "rrmApi.h"
65#endif
66
67static void limUpdateConfig(tpAniSirGlobal pMac,tpPESession psessionEntry);
68
69#if 0
70/**
71 * limGetCfgIdOfDefaultKeyid()
72 *
73 *FUNCTION:
74 * This function is called to get CFG ID of default key id
75 *
76 *PARAMS:
77 *
78 *LOGIC:
79 *
80 *ASSUMPTIONS:
81 * NA
82 *
83 *NOTE:
84 * NA
85 *
86 * @param dkid - Value of default key id
87 * @return dkCfgId - CFG ID of key corresponding to default key Id
88 */
89
90static tANI_U32
91limGetCfgIdOfDefaultKeyid(tANI_U32 dkid)
92{
93 if (dkid == WNI_CFG_WEP_DEFAULT_KEYID_0)
94 return WNI_CFG_WEP_DEFAULT_KEY_1;
95 else if (dkid == WNI_CFG_WEP_DEFAULT_KEYID_1)
96 return WNI_CFG_WEP_DEFAULT_KEY_2;
97 else if (dkid == WNI_CFG_WEP_DEFAULT_KEYID_2)
98 return WNI_CFG_WEP_DEFAULT_KEY_3;
99 else // dkid == WNI_CFG_WEP_DEFAULT_KEYID_3
100 return WNI_CFG_WEP_DEFAULT_KEY_4;
101} /*** end limGetCfgIdOfDefaultKeyid() ***/
102#endif
103
104
105/**
106 * limSetDefaultKeyIdAndKeys()
107 *
108 *FUNCTION:
109 * This function is called while applying configuration
110 * during JOIN/REASSOC/START_BSS.
111 *
112 *PARAMS:
113 *
114 *LOGIC:
115 *
116 *ASSUMPTIONS:
117 * NA
118 *
119 *NOTE:
120 *
121 * @param pMac - Pointer to Global MAC structure
122 * @return None
123 */
124
125static void
126limSetDefaultKeyIdAndKeys(tpAniSirGlobal pMac)
127{
128#ifdef FIXME_GEN6
129 tANI_U32 val;
130 tANI_U32 dkCfgId;
131
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700132 PELOG1(limLog(pMac, LOG1, FL("Setting default keys at SP"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700133
134 if (wlan_cfgGetInt(pMac, WNI_CFG_WEP_DEFAULT_KEYID,
135 &val) != eSIR_SUCCESS)
136 {
137 limLog(pMac, LOGP,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700138 FL("Unable to retrieve defaultKeyId from CFG"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700139 }
140 dkCfgId = limGetCfgIdOfDefaultKeyid(val);
141#endif
142
143} /*** end limSetDefaultKeyIdAndKeys() ***/
144
Jeff Johnson295189b2012-06-20 16:38:30 -0700145/** -------------------------------------------------------------
146\fn limSetCfgProtection
147\brief sets lim global cfg cache from the config.
148\param tpAniSirGlobal pMac
149\return None
150 -------------------------------------------------------------*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void limSetCfgProtection(tpAniSirGlobal pMac, tpPESession pesessionEntry)
Jeff Johnson295189b2012-06-20 16:38:30 -0700152{
153 tANI_U32 val = 0;
154
Jeff Johnson295189b2012-06-20 16:38:30 -0700155 if(( pesessionEntry != NULL ) && (pesessionEntry->limSystemRole == eLIM_AP_ROLE )){
156 if (pesessionEntry->gLimProtectionControl == WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE )
157 palZeroMemory( pMac->hHdd, (void *)&pesessionEntry->cfgProtection , sizeof(tCfgProtection));
158 else{
159 limLog(pMac, LOG1, FL(" frm11a = %d, from11b = %d, frm11g = %d, "
160 "ht20 = %d, nongf = %d, lsigTxop = %d, "
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700161 "rifs = %d, obss = %d"),
Jeff Johnson295189b2012-06-20 16:38:30 -0700162 pesessionEntry->cfgProtection.fromlla,
163 pesessionEntry->cfgProtection.fromllb,
164 pesessionEntry->cfgProtection.fromllg,
165 pesessionEntry->cfgProtection.ht20,
166 pesessionEntry->cfgProtection.nonGf,
167 pesessionEntry->cfgProtection.lsigTxop,
168 pesessionEntry->cfgProtection.rifs,
169 pesessionEntry->cfgProtection.obss);
170 }
171 }
172 else{
Jeff Johnson295189b2012-06-20 16:38:30 -0700173 if (wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION, &val) != eSIR_SUCCESS)
174 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700175 limLog(pMac, LOGP, FL("reading WNI_CFG_FORCE_POLICY_PROTECTION cfg failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700176 return;
177 }
178 else
179 pMac->lim.gLimProtectionControl = (tANI_U8)val;
180
181 if (wlan_cfgGetInt(pMac, WNI_CFG_PROTECTION_ENABLED, &val) != eSIR_SUCCESS)
182 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700183 limLog(pMac, LOGP, FL("reading protection cfg failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700184 return;
185 }
186
187 if(pMac->lim.gLimProtectionControl == WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE)
188 palZeroMemory( pMac->hHdd, (void *)&pMac->lim.cfgProtection , sizeof(tCfgProtection));
189 else
190 {
Jeff Johnson295189b2012-06-20 16:38:30 -0700191 pMac->lim.cfgProtection.fromlla = (val >> WNI_CFG_PROTECTION_ENABLED_FROM_llA) & 1;
192 pMac->lim.cfgProtection.fromllb = (val >> WNI_CFG_PROTECTION_ENABLED_FROM_llB) & 1;
193 pMac->lim.cfgProtection.fromllg = (val >> WNI_CFG_PROTECTION_ENABLED_FROM_llG) & 1;
194 pMac->lim.cfgProtection.ht20 = (val >> WNI_CFG_PROTECTION_ENABLED_HT_20) & 1;
195 pMac->lim.cfgProtection.nonGf = (val >> WNI_CFG_PROTECTION_ENABLED_NON_GF) & 1;
196 pMac->lim.cfgProtection.lsigTxop = (val >> WNI_CFG_PROTECTION_ENABLED_LSIG_TXOP) & 1;
197 pMac->lim.cfgProtection.rifs = (val >> WNI_CFG_PROTECTION_ENABLED_RIFS) & 1;
198 pMac->lim.cfgProtection.obss= (val >> WNI_CFG_PROTECTION_ENABLED_OBSS) & 1;
199
200 }
Jeff Johnson3c3e1782013-02-27 10:48:42 -0800201 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700202}
203
204
205
206/**
207 * limUpdateTriggerStaBkScanFlag
208 *
209 * FUNCTION:
210 * This function updates the lim global gLimTriggerBackgroundScanDuringQuietBss
211 * based on cfg configuration. Usually triggered after a cfgSetInt call.
212 *
213 * PARAMS:
214 * pMac - Pointer to Global MAC structure
215 *
216 */
217static tSirRetStatus limUpdateTriggerStaBkScanFlag(tpAniSirGlobal pMac)
218{
219 tANI_U32 val;
220 tANI_U8 flag;
221
222 if(wlan_cfgGetInt(pMac, WNI_CFG_TRIG_STA_BK_SCAN, &val) != eSIR_SUCCESS)
223 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700224 PELOG1(limLog(pMac, LOG1, FL("Failed to get WNI_CFG_TRIG_STA_BK_SCAN from cfg"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700225 return eSIR_FAILURE;
226 }
227
228 flag = (val) ? 1 : 0;
229 if(flag != pMac->lim.gLimTriggerBackgroundScanDuringQuietBss)
230 {
231 /* Update global flag */
232 pMac->lim.gLimTriggerBackgroundScanDuringQuietBss = flag;
233 /*Update beacon prop IE also if we're an AP */
234
235 //call a wrapper and if the session role is other than the sta call this function schsetfixedbeacon fields function
236 limUpdateBeacon(pMac);
237
238 }
239
240 return eSIR_FAILURE;
241}
242
243
244/**
245 * limHandleCFGparamUpdate()
246 *
247 *FUNCTION:
248 * This function is called by limProcessMessages() to
249 * whenever SIR_CFG_PARAM_UPDATE_IND message is posted
250 * to LIM (due to a set operation on a CFG parameter).
251 *
252 *PARAMS:
253 *
254 *LOGIC:
255 *
256 *ASSUMPTIONS:
257 * NA
258 *
259 *NOTE:
260 *
261 * @param pMac - Pointer to Global MAC structure
262 * @param cfgId - ID of CFG parameter that got updated
263 * @return None
264 */
265
266void
267limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId)
268{
269 tANI_U32 val1, val2;
270 tANI_U16 val16;
Jeff Johnson295189b2012-06-20 16:38:30 -0700271 tSirMacHTCapabilityInfo *pHTCapabilityInfo;
272 tSirMacHTParametersInfo *pAmpduParamInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700274 PELOG3(limLog(pMac, LOG3, FL("Handling CFG parameter id %X update"), cfgId);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 switch (cfgId)
276 {
277 case WNI_CFG_WEP_DEFAULT_KEYID:
278
279 // !!LAC - when the default KeyID is changed, force all of the
280 // keys and the keyID to be reprogrammed. this allows the
281 // keys to change after the initial setting of the keys when the CFG was
282 // applied at association time through CFG changes of the keys.
283 limSetDefaultKeyIdAndKeys( pMac );
284
285 break;
286
287 case WNI_CFG_EXCLUDE_UNENCRYPTED:
288 if (wlan_cfgGetInt(pMac, WNI_CFG_EXCLUDE_UNENCRYPTED,
289 &val1) != eSIR_SUCCESS)
290 {
291 limLog(pMac, LOGP,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700292 FL("Unable to retrieve excludeUnencr from CFG"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700293 }
294#if 0
295 halSetSpExclUndecrypted(pMac, (tHalBitVal) val);
296#else
297 limLog(pMac, LOGE,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700298 FL("Unsupported CFG: WNI_CFG_EXCLUDE_UNENCRYPTED"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700299#endif
300
301 break;
302
303 case WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT:
304 if (pMac->lim.gLimMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)
305 {
306 // 'Change' timer for future activations
307 limDeactivateAndChangeTimer(pMac,
308 eLIM_ASSOC_FAIL_TIMER);
309 }
310
311 break;
312
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 case WNI_CFG_BACKGROUND_SCAN_PERIOD:
314
315
316 limDeactivateAndChangeTimer(pMac, eLIM_BACKGROUND_SCAN_TIMER);
317
318 if (wlan_cfgGetInt(pMac, WNI_CFG_BACKGROUND_SCAN_PERIOD, &val1) != eSIR_SUCCESS)
319 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700320 limLog(pMac, LOGP, FL("could not retrieve Background scan period value"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700321 break;
322 }
323 if (val1 == 0)
324 break;
325
326
327
328 if ( (pMac->lim.gLimSystemRole == eLIM_STA_ROLE) ||
329 ( (pMac->lim.gLimSystemRole == eLIM_STA_IN_IBSS_ROLE) &&
330 (pMac->lim.gLimSmeState == eLIM_SME_NORMAL_STATE)))
331 {
332 // Reactivate Background scan timer
Jeff Johnsone7245742012-09-05 17:12:55 -0700333 MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, NO_SESSION, eLIM_BACKGROUND_SCAN_TIMER));
Jeff Johnson295189b2012-06-20 16:38:30 -0700334 if (tx_timer_activate(
335 &pMac->lim.limTimers.gLimBackgroundScanTimer) != TX_SUCCESS)
336 {
337 /// Could not activate background scan timer.
338 // Log error
339 limLog(pMac, LOGP,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700340 FL("could not activate background scan timer"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 pMac->lim.gLimBackgroundScanStarted = FALSE;
342 pMac->lim.gLimBackgroundScanTerminate = TRUE;
343 }
344 else
345 {
346 pMac->lim.gLimBackgroundScanStarted = TRUE;
347 pMac->lim.gLimBackgroundScanTerminate = FALSE;
348 }
349
350 PELOG3(limLog(pMac, LOG3,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700351 FL("Updated Background scan period"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 }
353
354 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700355
356 case WNI_CFG_BG_SCAN_CHANNEL_LIST:
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 PELOG1(limLog(pMac, LOG1,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700358 FL("VALID_CHANNEL_LIST has changed, reset next bg scan channel"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 pMac->lim.gLimBackgroundScanChannelId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700360
361 break;
362
Jeff Johnson295189b2012-06-20 16:38:30 -0700363 case WNI_CFG_TRIG_STA_BK_SCAN:
364 if(limUpdateTriggerStaBkScanFlag(pMac) != eSIR_SUCCESS)
365 {
366 PELOG2(limLog(pMac, LOG2,
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700367 FL("Updating lim trigger sta bk scan global flag failed!"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700368 }
369 break;
370
371 case WNI_CFG_PROTECTION_ENABLED:
Jeff Johnson295189b2012-06-20 16:38:30 -0700372 limSetCfgProtection(pMac, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -0700373 break;
374 case WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG:
375 {
376 tSirMsgQ msg = {0};
377 tANI_U32 status;
378
379 msg.type = SIR_LIM_UPDATE_BEACON;
380
381 status = limPostMsgApi(pMac, &msg);
382
383 if (status != TX_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700384 PELOGE(limLog(pMac, LOGE, FL("Failed limPostMsgApi"), status);)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 break;
386 }
387 case WNI_CFG_GREENFIELD_CAPABILITY:
388 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &val1) != eSIR_SUCCESS)
389 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700390 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 break;
392 }
393 if (wlan_cfgGetInt(pMac, WNI_CFG_GREENFIELD_CAPABILITY, &val2) != eSIR_SUCCESS)
394 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700395 PELOGE(limLog(pMac, LOGE, FL("could not retrieve GreenField CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 break;
397 }
398 val16 = ( tANI_U16 ) val1;
399 pHTCapabilityInfo = ( tSirMacHTCapabilityInfo* ) &val16;
400 pHTCapabilityInfo->greenField = (tANI_U16)val2;
401 if(cfgSetInt(pMac, WNI_CFG_HT_CAP_INFO, *(tANI_U16*)pHTCapabilityInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700402 PELOGE(limLog(pMac, LOGE, FL("could not update HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 break;
404
405 case WNI_CFG_HT_RX_STBC:
406 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &val1) != eSIR_SUCCESS)
407 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700408 PELOGE(limLog(pMac, LOGE, FL("could not retrieve WNI_CFG_HT_CAP_INFO "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 break;
410 }
411 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_RX_STBC, &val2) != eSIR_SUCCESS)
412 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700413 PELOGE(limLog(pMac, LOGE, FL("could not retrieve WNI_CFG_HT_RX_STBC"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 break;
415 }
416 val16 = ( tANI_U16 ) val1;
417 pHTCapabilityInfo = ( tSirMacHTCapabilityInfo* ) &val16;
418 pHTCapabilityInfo->rxSTBC = (tANI_U16)val2;
419 if(cfgSetInt(pMac, WNI_CFG_HT_CAP_INFO, *(tANI_U16*)pHTCapabilityInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700420 PELOGE(limLog(pMac, LOGE, FL("could not update HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 break;
422
423 case WNI_CFG_MAX_AMSDU_LENGTH:
424 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &val1) != eSIR_SUCCESS)
425 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700426 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 break;
428 }
429 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_AMSDU_LENGTH, &val2) != eSIR_SUCCESS)
430 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700431 PELOGE(limLog(pMac, LOGE, FL("could not retrieve Max AMSDU Length CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 break;
433 }
434 val16 = ( tANI_U16 ) val1;
435 pHTCapabilityInfo = ( tSirMacHTCapabilityInfo* ) &val16;
436 pHTCapabilityInfo->maximalAMSDUsize = (tANI_U16)val2;
437 if(cfgSetInt(pMac, WNI_CFG_HT_CAP_INFO, *(tANI_U16*)pHTCapabilityInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700438 PELOGE(limLog(pMac, LOGE, FL("could not update HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 break;
440
441 case WNI_CFG_SHORT_GI_20MHZ:
442 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &val1) != eSIR_SUCCESS)
443 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700444 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT Cap CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 break;
446 }
447 if (wlan_cfgGetInt(pMac, WNI_CFG_SHORT_GI_20MHZ, &val2) != eSIR_SUCCESS)
448 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700449 PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 20Mhz CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 break;
451 }
452 val16 = ( tANI_U16 ) val1;
453 pHTCapabilityInfo = ( tSirMacHTCapabilityInfo* ) &val16;
454 pHTCapabilityInfo->shortGI20MHz = (tANI_U16)val2;
455 if(cfgSetInt(pMac, WNI_CFG_HT_CAP_INFO, *(tANI_U16*)pHTCapabilityInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700456 PELOGE(limLog(pMac, LOGE, FL("could not update HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 break;
458 case WNI_CFG_SHORT_GI_40MHZ:
459 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_CAP_INFO, &val1) != eSIR_SUCCESS)
460 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700461 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT Cap CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 break;
463 }
464 if (wlan_cfgGetInt(pMac, WNI_CFG_SHORT_GI_40MHZ, &val2) != eSIR_SUCCESS)
465 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700466 PELOGE(limLog(pMac, LOGE, FL("could not retrieve shortGI 40Mhz CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 break;
468 }
469 val16 = ( tANI_U16 ) val1;
470 pHTCapabilityInfo = ( tSirMacHTCapabilityInfo* ) &val16;
471 pHTCapabilityInfo->shortGI40MHz = (tANI_U16)val2;
472 if(cfgSetInt(pMac, WNI_CFG_HT_CAP_INFO, *(tANI_U16*)pHTCapabilityInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700473 PELOGE(limLog(pMac, LOGE, FL("could not update HT Cap Info CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 break;
475 case WNI_CFG_MPDU_DENSITY:
476 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, &val1) != eSIR_SUCCESS)
477 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700478 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT AMPDU Param CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 break;
480 }
481 if (wlan_cfgGetInt(pMac, WNI_CFG_MPDU_DENSITY, &val2) != eSIR_SUCCESS)
482 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700483 PELOGE(limLog(pMac, LOGE, FL("could not retrieve MPDU Density CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 break;
485 }
486 val16 = ( tANI_U16 ) val1;
487 pAmpduParamInfo = ( tSirMacHTParametersInfo* ) &val16;
488 pAmpduParamInfo->mpduDensity = (tANI_U8)val2;
489 if(cfgSetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, *(tANI_U8*)pAmpduParamInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700490 PELOGE(limLog(pMac, LOGE, FL("could not update HT AMPDU Param CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700491
492 break;
493 case WNI_CFG_MAX_RX_AMPDU_FACTOR:
494 if (wlan_cfgGetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, &val1) != eSIR_SUCCESS)
495 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700496 PELOGE(limLog(pMac, LOGE, FL("could not retrieve HT AMPDU Param CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700497 break;
498 }
499 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_RX_AMPDU_FACTOR, &val2) != eSIR_SUCCESS)
500 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700501 PELOGE(limLog(pMac, LOGE, FL("could not retrieve AMPDU Factor CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700502 break;
503 }
504 val16 = ( tANI_U16 ) val1;
505 pAmpduParamInfo = ( tSirMacHTParametersInfo* ) &val16;
506 pAmpduParamInfo->maxRxAMPDUFactor = (tANI_U8)val2;
507 if(cfgSetInt(pMac, WNI_CFG_HT_AMPDU_PARAMS, *(tANI_U8*)pAmpduParamInfo) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700508 PELOGE(limLog(pMac, LOGE, FL("could not update HT AMPDU Param CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 break;
510
511 case WNI_CFG_HEART_BEAT_THRESHOLD:
512 if (wlan_cfgGetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, &val1) != eSIR_SUCCESS)
513 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700514 PELOGE(limLog(pMac, LOGE, FL("could not retrieve WNI_CFG_HEART_BEAT_THRESHOLD CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 break;
516 }
517 if(!val1)
518 {
519 limDeactivateAndChangeTimer(pMac, eLIM_HEART_BEAT_TIMER);
520 pMac->sys.gSysEnableLinkMonitorMode = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700521 }
522 else
523 {
Madan Mohan Koyyalamudi49a7c0f2012-11-06 18:57:59 -0800524 tANI_U16 sessionId;
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 pMac->sys.gSysEnableLinkMonitorMode = 1;
Madan Mohan Koyyalamudi49a7c0f2012-11-06 18:57:59 -0800526 for(sessionId = 0; sessionId < pMac->lim.maxBssId; sessionId++)
527 {
528 if( (pMac->lim.gpSession[sessionId].valid )&&
529 (eLIM_MLM_LINK_ESTABLISHED_STATE == pMac->lim.gpSession[sessionId].limMlmState) &&
Yathish9f22e662012-12-10 14:21:35 -0800530 ( pMac->pmm.gPmmState != ePMM_STATE_BMPS_SLEEP) &&
531 (!IS_ACTIVEMODE_OFFLOAD_FEATURE_ENABLE))
Madan Mohan Koyyalamudi49a7c0f2012-11-06 18:57:59 -0800532 {
Srikant Kuppae6812eb2012-12-27 17:34:52 -0800533 PELOG2(limLog(pMac, LOG2, "HB link monitoring reactivated"
534 " for session=%d", sessionId);)
Srinivas Girigowda35f6a712013-04-04 16:48:34 -0700535 PELOGW(limLog(pMac, LOGW, "Before reactivating HB timer; parameters are"
536 " session=%d limMlmState=%d pmmState=%d", sessionId,
537 pMac->lim.gpSession[sessionId].limMlmState,
538 pMac->pmm.gPmmState);)
Madan Mohan Koyyalamudi49a7c0f2012-11-06 18:57:59 -0800539 limReactivateHeartBeatTimer(pMac, &pMac->lim.gpSession[sessionId]);
540 }
Srikant Kuppae6812eb2012-12-27 17:34:52 -0800541 else if ( pMac->lim.gpSession[sessionId].valid )
542 {
Srinivas Girigowda35f6a712013-04-04 16:48:34 -0700543 PELOGW(limLog(pMac, LOGW, "HB link monitoring not reactivated-"
Srikant Kuppae6812eb2012-12-27 17:34:52 -0800544 "session=%d, limMlmState=%d, gPmmState=%d",
545 sessionId, pMac->lim.gpSession[sessionId].limMlmState,
546 pMac->pmm.gPmmState);)
547 }
Madan Mohan Koyyalamudi49a7c0f2012-11-06 18:57:59 -0800548 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 }
550 case WNI_CFG_MAX_PS_POLL:
551 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
552 case WNI_CFG_MIN_RSSI_THRESHOLD:
553 case WNI_CFG_NTH_BEACON_FILTER:
554 case WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE:
555 {
556 tpSirPowerSaveCfg pPowerSaveConfig;
557
558 /* Allocate and fill in power save configuration. */
559 if (palAllocateMemory(pMac->hHdd, (void **)&pPowerSaveConfig,
560 sizeof(tSirPowerSaveCfg)) != eHAL_STATUS_SUCCESS)
561 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700562 PELOGE(limLog(pMac, LOGE, FL("LIM: Cannot allocate memory for power save configuration"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 break;
564 }
565
566 /* This context should be valid if power-save configuration message has been already dispathed
567 * during initialization process. Re-using the present configuration mask
568 */
569 palCopyMemory(pMac->hHdd, pPowerSaveConfig, (tANI_U8 *)&pMac->pmm.gPmmCfg, sizeof(tSirPowerSaveCfg));
570
571 if ( (pmmSendPowerSaveCfg(pMac, pPowerSaveConfig)) != eSIR_SUCCESS)
572 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700573 PELOGE(limLog(pMac, LOGE, FL("LIM: pmmSendPowerSaveCfg() failed "));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 }
575 }
576 break;
577
578
579 case WNI_CFG_DOT11_MODE:
580 if (wlan_cfgGetInt(pMac, WNI_CFG_DOT11_MODE, &val1) != eSIR_SUCCESS)
581 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700582 PELOGE(limLog(pMac, LOGE, FL("could not retrieve Dot11 Mode CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 break;
584 }
585 /* TODO */
586 //psessionEntry->dot11mode = val1; //// un comment this line ...FORBUILD -TEMPFIX.. HOW TO GET sessionEntry?????
587 break;
588 case WNI_CFG_ADDBA_REQ_DECLINE:
589 if(wlan_cfgGetInt(pMac, WNI_CFG_ADDBA_REQ_DECLINE, &val1) != eSIR_SUCCESS) {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700590 limLog( pMac, LOGE, FL( "Unable to get ADDBA_REQ_DECLINE cfg" ));
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 break;
592 }
593 pMac->lim.gAddBA_Declined = (tANI_U8)val1;
594 break;
595
596 case WNI_CFG_SCAN_IN_POWERSAVE:
597 if(wlan_cfgGetInt(pMac, WNI_CFG_SCAN_IN_POWERSAVE, &val1) != eSIR_SUCCESS) {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700598 limLog( pMac, LOGE, FL( "Unable to get WNI_CFG_SCAN_IN_POWERSAVE " ));
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 break;
600 }
601 pMac->lim.gScanInPowersave = (tANI_U8)val1;
602 break;
603
604
605 case WNI_CFG_ASSOC_STA_LIMIT:
606 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, &val1) != eSIR_SUCCESS) {
607 limLog( pMac, LOGE, FL( "Unable to get WNI_CFG_ASSOC_STA_LIMIT" ));
608 break;
609 }
610 pMac->lim.gLimAssocStaLimit = (tANI_U16)val1;
611 break;
612
Kiran Kumar Lokere458d7322013-05-29 14:29:43 -0700613 case WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC:
614 if (wlan_cfgGetInt
615 (pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val1) !=
616 eSIR_SUCCESS)
617 {
618 limLog(pMac, LOGE,
619 FL( "Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
620 break;
621 }
622 if (val1)
623 {
624 limLog(pMac, LOGW,
625 FL("BTC requested to disable all RX BA sessions"));
626 limDelAllBASessionsBtc(pMac);
627 }
628 else
629 {
630 limLog(pMac, LOGW,
631 FL("Resetting the WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
632 }
633 break;
634
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 default:
636 break;
637 }
638} /*** end limHandleCFGparamUpdate() ***/
639
640
641
642/**
643 * limApplyConfiguration()
644 *
645 *FUNCTION:
646 * This function is called to apply the configured parameters
647 * before joining or reassociating with a BSS or starting a BSS.
648 *
649 *PARAMS:
650 *
651 *LOGIC:
652 *
653 *ASSUMPTIONS:
654 * NA
655 *
656 *NOTE:
657 *
658 * @param pMac - Pointer to Global MAC structure
659 * @return None
660 */
661
662void
663limApplyConfiguration(tpAniSirGlobal pMac,tpPESession psessionEntry)
664{
665 tANI_U32 val=0, phyMode;
666
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700667 PELOG2(limLog(pMac, LOG2, FL("Applying config"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700668
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 limInitWdsInfoParams(pMac);
670
671 psessionEntry->limSentCapsChangeNtf = false;
672
673 limGetPhyMode(pMac, &phyMode, psessionEntry);
674
675 // Set default keyId and keys
676 limSetDefaultKeyIdAndKeys(pMac);
677
678 limUpdateConfig(pMac,psessionEntry);
679
Madan Mohan Koyyalamudi6db7ad12012-10-29 16:14:41 -0700680 psessionEntry->shortSlotTimeSupported = limGetShortSlotFromPhyMode(pMac, psessionEntry, phyMode);
Jeff Johnson295189b2012-06-20 16:38:30 -0700681
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 limSetCfgProtection(pMac, psessionEntry);
Jeff Johnson295189b2012-06-20 16:38:30 -0700683
684
685 /* Added for BT - AMP Support */
686 if ( (psessionEntry->limSystemRole == eLIM_AP_ROLE) ||
687 (psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)||
688 (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE)||
689 (psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE) )
690 {
691 /* This check is required to ensure the beacon generation is not done
692 as a part of join request for a BT-AMP station */
693
694 if(psessionEntry->statypeForBss == STA_ENTRY_SELF)
695 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700696 PELOG1(limLog(pMac, LOG1, FL("Initializing BT-AMP beacon generation"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 schSetBeaconInterval(pMac,psessionEntry);
698 schSetFixedBeaconFields(pMac,psessionEntry);
699 }
700 }
701
702 if (wlan_cfgGetInt(pMac, WNI_CFG_SCAN_IN_POWERSAVE, &val) != eSIR_SUCCESS)
703 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700704 limLog(pMac, LOGP, FL("could not retrieve WNI_CFG_SCAN_IN_POWERSAVE"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 return;
706 }
707 pMac->lim.gScanInPowersave = (tANI_U8) val;
708
709} /*** end limApplyConfiguration() ***/
710
711
712/**
713 * limUpdateConfig
714 *
715 * FUNCTION:
716 * Update the local state from CFG database
717 * (This used to be dphUpdateConfig)
718 *
719 * LOGIC:
720 *
721 * ASSUMPTIONS:
722 *
723 * NOTE:
724 *
725 * @param None
726 * @return None
727 */
728
729static void
730limUpdateConfig(tpAniSirGlobal pMac,tpPESession psessionEntry)
731{
732 tANI_U32 val;
733
734 #if 0
735 if (wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, pMac->lim.gLimMyMacAddr, &len) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700736 limLog(pMac, LOGP, FL("cfg get sta id failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 #endif //To SUPPORT BT-AMP
738 sirCopyMacAddr(pMac->lim.gLimMyMacAddr,psessionEntry->selfMacAddr);
739
740 if (wlan_cfgGetInt(pMac, WNI_CFG_SHORT_PREAMBLE, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700741 limLog(pMac, LOGP, FL("cfg get short preamble failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 psessionEntry->beaconParams.fShortPreamble = (val) ? 1 : 0;
743
744 if (wlan_cfgGetInt(pMac, WNI_CFG_WME_ENABLED, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700745 limLog(pMac, LOGP, FL("cfg get wme enabled failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 psessionEntry->limWmeEnabled = (val) ? 1 : 0;
747
748 if (wlan_cfgGetInt(pMac, WNI_CFG_WSM_ENABLED, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700749 limLog(pMac, LOGP, FL("cfg get wsm enabled failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 psessionEntry->limWsmEnabled = (val) ? 1 : 0;
751
752 if ((! psessionEntry->limWmeEnabled) && (psessionEntry->limWsmEnabled))
753 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700754 PELOGE(limLog(pMac, LOGE, FL("Can't enable WSM without WME"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 psessionEntry->limWsmEnabled = 0;
756 }
757
758 if (wlan_cfgGetInt(pMac, WNI_CFG_QOS_ENABLED, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700759 limLog(pMac, LOGP, FL("cfg get qos enabled failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 psessionEntry->limQosEnabled = (val) ? 1 : 0;
761
762 if (wlan_cfgGetInt(pMac, WNI_CFG_HCF_ENABLED, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700763 limLog(pMac, LOGP, FL("cfg get hcf enabled failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 psessionEntry->limHcfEnabled = (val) ? 1 : 0;
765
766 // Update the ADD BA Declined configuration
767 if(wlan_cfgGetInt(pMac, WNI_CFG_ADDBA_REQ_DECLINE, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700768 limLog( pMac, LOGP, FL( "Unable to get ADDBA_REQ_DECLINE cfg" ));
Jeff Johnson295189b2012-06-20 16:38:30 -0700769 pMac->lim.gAddBA_Declined = (val) ? 0xff : 0x0;
770
771 // AP: WSM should enable HCF as well, for STA enable WSM only after
772 // association response is received
773 if (psessionEntry->limWsmEnabled && psessionEntry->limSystemRole == eLIM_AP_ROLE)
774 psessionEntry->limHcfEnabled = 1;
775
776 if (wlan_cfgGetInt(pMac, WNI_CFG_11D_ENABLED, &val) != eSIR_SUCCESS)
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700777 limLog(pMac, LOGP, FL("cfg get 11d enabled failed"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 psessionEntry->lim11dEnabled = (val) ? 1 : 0;
779
780 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, &val) != eSIR_SUCCESS) {
781 limLog( pMac, LOGP, FL( "cfg get assoc sta limit failed" ));
782 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -0800783 if( (!WDI_getFwWlanFeatCaps(SAP32STA)) && (val >= WNI_CFG_ASSOC_STA_LIMIT_STAMAX))
784 {
785 if(ccmCfgSetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, WNI_CFG_ASSOC_STA_LIMIT_STADEF,
786 NULL, eANI_BOOLEAN_FALSE) != eHAL_STATUS_SUCCESS)
787 {
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700788 limLog( pMac, LOGP, FL( "cfg get assoc sta limit failed" ));
Gopichand Nakkala976e3252013-01-03 15:45:56 -0800789 }
790 val = WNI_CFG_ASSOC_STA_LIMIT_STADEF;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 pMac->lim.gLimAssocStaLimit = (tANI_U16)val;
793
794#if defined WLAN_FEATURE_VOWIFI
795 rrmUpdateConfig( pMac, psessionEntry );
796#endif
Kiran Kumar Lokere531ca702013-04-01 13:24:23 -0700797 PELOG1(limLog(pMac, LOG1, FL("Updated Lim shadow state based on CFG"));)
Jeff Johnson295189b2012-06-20 16:38:30 -0700798
799
800}
801
802