blob: 4e19702c588983ead7901ba3afb3c38f733636dd [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam0fb93dd2014-02-19 00:32:59 -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.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam0fb93dd2014-02-19 00:32:59 -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 s a p F s m . C
31
32 OVERVIEW:
33
34 This software unit holds the implementation of the WLAN SAP Finite
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070035 State Machine modules
Jeff Johnson295189b2012-06-20 16:38:30 -070036
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070039 Are listed for each API below.
Jeff Johnson295189b2012-06-20 16:38:30 -070040
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070041
Jeff Johnson295189b2012-06-20 16:38:30 -070042===========================================================================*/
43
44/*===========================================================================
45
46 EDIT HISTORY FOR FILE
47
48
49 This section contains comments describing changes made to the module.
50 Notice that changes are listed in reverse chronological order.
51
52
53
54 when who what, where, why
55---------- --- --------------------------------------------------------
562010-03-15 Created module
57
58===========================================================================*/
59
60
61/*----------------------------------------------------------------------------
62 * Include Files
63 * -------------------------------------------------------------------------*/
64#include "sapInternal.h"
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +053065#ifdef WLAN_FEATURE_AP_HT40_24G
66#include "csrInsideApi.h"
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +053067#include "cfgApi.h"
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +053068#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070069// Pick up the SME API definitions
70#include "sme_Api.h"
71// Pick up the PMC API definitions
72#include "pmcApi.h"
73#include "wlan_nv.h"
74
75/*----------------------------------------------------------------------------
76 * Preprocessor Definitions and Constants
77 * -------------------------------------------------------------------------*/
78
79/*----------------------------------------------------------------------------
80 * Type Declarations
81 * -------------------------------------------------------------------------*/
82
83/*----------------------------------------------------------------------------
84 * Global Data Definitions
85 * -------------------------------------------------------------------------*/
86
87/*----------------------------------------------------------------------------
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070088 * External declarations for global context
Jeff Johnson295189b2012-06-20 16:38:30 -070089 * -------------------------------------------------------------------------*/
Abhishek Singhb51853c2014-03-13 18:26:41 +053090#ifdef FEATURE_WLAN_CH_AVOID
91extern safeChannelType safeChannels[];
92#endif /* FEATURE_WLAN_CH_AVOID */
Jeff Johnson295189b2012-06-20 16:38:30 -070093/*----------------------------------------------------------------------------
94 * Static Variable Definitions
95 * -------------------------------------------------------------------------*/
96
97/*----------------------------------------------------------------------------
98 * Static Function Declarations and Definitions
99 * -------------------------------------------------------------------------*/
100#ifdef SOFTAP_CHANNEL_RANGE
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700101static VOS_STATUS sapGetChannelList(ptSapContext sapContext, v_U8_t **channelList,
Jeff Johnson295189b2012-06-20 16:38:30 -0700102 v_U8_t *numberOfChannels);
103#endif
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530104
105#ifdef WLAN_FEATURE_AP_HT40_24G
106static VOS_STATUS sapGetChannelListForObss(tHalHandle halHandle,
107 ptSapContext psapCtx, v_U8_t **channelList,
108 v_U8_t *numberOfChannels);
109#endif
110
Jeff Johnson295189b2012-06-20 16:38:30 -0700111/*----------------------------------------------------------------------------
112 * Externalized Function Definitions
113* -------------------------------------------------------------------------*/
114
115/*----------------------------------------------------------------------------
116 * Function Declarations and Documentation
117 * -------------------------------------------------------------------------*/
118
119/*==========================================================================
120 FUNCTION sapEventInit
121
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700122 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700123 Function for initializing sWLAN_SAPEvent structure
124
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700125 DEPENDENCIES
126 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700127
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700128 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700129
130 IN
131 sapEvent : State machine event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700132
Jeff Johnson295189b2012-06-20 16:38:30 -0700133 RETURN VALUE
134
135 None
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700136
137 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700138============================================================================*/
139static inline void sapEventInit(ptWLAN_SAPEvent sapEvent)
140{
141 sapEvent->event = eSAP_MAC_SCAN_COMPLETE;
142 sapEvent->params = 0;
143 sapEvent->u1 = 0;
144 sapEvent->u2 = 0;
145}
146
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +0530147#ifdef WLAN_FEATURE_AP_HT40_24G
148/*==========================================================================
149 FUNCTION sapSetObssParm
150
151 DESCRIPTION
152 Function for Setting OBSS Scan interval & OBSS TRANS_DELAY_FACTOR
153
154 DEPENDENCIES
155 NA.
156
157 PARAMETERS
158
159 IN
160 sapContext : Sap Context value
161
162 RETURN VALUE
163 The VOS_STATUS code associated with performing the operation
164
165 VOS_STATUS_SUCCESS: Success
166
167 SIDE EFFECTS
168============================================================================*/
169void sapSetObssParm(ptSapContext sapContext)
170{
171 tHalHandle hHal;
172 tpAniSirGlobal pMac;
173 tANI_U32 cfgValue;
174
175 /* tHalHandle */
176 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
177
178 if (NULL == hHal)
179 {
180 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
181 FL("Invalid hHal"));
182 return;
183 }
184
185 pMac = PMAC_STRUCT( hHal );
186
187 if (wlan_cfgGetInt(pMac, WNI_CFG_OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL,
188 &cfgValue) != eSIR_SUCCESS)
189 {
190 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
191 FL("Fail to retrieve"
192 "WNI_CFG_OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL value"));
193 return;
194 }
195
196 sapContext->ObssScanInterval = cfgValue;
197
198 if (wlan_cfgGetInt(pMac,
199 WNI_CFG_OBSS_HT40_WIDTH_CHANNEL_TRANSITION_DELAY_FACTOR,
200 &cfgValue) != eSIR_SUCCESS)
201 {
202 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
203 FL("Fail to retrieve"
204 "WNI_CFG_OBSS_HT40_WIDTH_CHANNEL_TRANSITION_DELAY_FACTOR value"));
205 return;
206 }
207
208 sapContext->ObssTransitionDelayFactor = cfgValue;
209
210 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
211 FL("ObssScanInterval: %d"
212 " ObssTransitionDelayFactor: %d"),
213 sapContext->ObssScanInterval,
214 sapContext->ObssTransitionDelayFactor);
215
216 return;
217}
218#endif
219
220
Jeff Johnson295189b2012-06-20 16:38:30 -0700221/*==========================================================================
222 FUNCTION sapGotoChannelSel
223
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700224 DESCRIPTION
225 Function for initiating scan request for SME
Jeff Johnson295189b2012-06-20 16:38:30 -0700226
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700227 DEPENDENCIES
228 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700229
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700230 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700231
232 IN
233 sapContext : Sap Context value
234 sapEvent : State machine event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700235
Jeff Johnson295189b2012-06-20 16:38:30 -0700236 RETURN VALUE
237 The VOS_STATUS code associated with performing the operation
238
239 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700240
241 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700242============================================================================*/
243VOS_STATUS
244sapGotoChannelSel
245(
246 ptSapContext sapContext,
247 ptWLAN_SAPEvent sapEvent
248)
249{
250 /* Initiate a SCAN request */
Jeff Johnson43971f52012-07-17 12:26:56 -0700251 eHalStatus halStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -0700252 tCsrScanRequest scanRequest;/* To be initialised if scan is required */
253 v_U32_t scanRequestID = 0;
254 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530255 eSapPhyMode sapPhyMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700256
257#ifdef SOFTAP_CHANNEL_RANGE
258 v_U8_t *channelList = NULL;
259 v_U8_t numOfChannels = 0 ;
260#endif
261 tHalHandle hHal;
262 tANI_U8 channel;
263
Ratnam Rachuri90e3b0c2015-07-12 15:20:45 +0530264#ifdef FEATURE_WLAN_CH_AVOID
265 v_U8_t i;
266#endif
267
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME, sapContext->pvosGCtx);
269 if (NULL == hHal)
270 {
271 /* we have a serious problem */
272 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700273 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 return VOS_STATUS_E_FAULT;
275 }
276
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530277 sapPhyMode =
278 sapConvertSapPhyModeToCsrPhyMode(sapContext->csrRoamProfile.phyMode);
279
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 /*If STA-AP concurrency is enabled take the concurrent connected channel first. In other cases wpa_supplicant should take care */
281 if (vos_get_concurrency_mode() == VOS_STA_SAP)
282 {
283 channel = sme_GetConcurrentOperationChannel(hHal);
284
285 if (channel)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700286 { /*if a valid channel is returned then use concurrent channel.
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 Else take whatever comes from configuartion*/
288 sapContext->channel = channel;
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530289#ifdef WLAN_FEATURE_AP_HT40_24G
290 if (sapContext->channel > SIR_11B_CHANNEL_END)
291#endif
292 sme_SelectCBMode(hHal, sapPhyMode, sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700293 }
294 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700295
296 if (sapContext->channel == AUTO_CHANNEL_SELECT)
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 {
298 vos_mem_zero(&scanRequest, sizeof(scanRequest));
299
300 /* Set scanType to Passive scan */
301 scanRequest.scanType = eSIR_PASSIVE_SCAN;
302
303 /* Set min and max channel time to zero */
304 scanRequest.minChnTime = 0;
305 scanRequest.maxChnTime = 0;
306
307 /* Set BSSType to default type */
308 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700309
310#ifndef SOFTAP_CHANNEL_RANGE
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 /*Scan all the channels */
312 scanRequest.ChannelInfo.numOfChannels = 0;
313
314 scanRequest.ChannelInfo.ChannelList = NULL;
315
316 scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN;//eCSR_SCAN_REQUEST_11D_SCAN;
317
318#else
319
320 sapGetChannelList(sapContext, &channelList, &numOfChannels);
321
322 /*Scan the channels in the list*/
323 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700324
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 scanRequest.ChannelInfo.ChannelList = channelList;
326
327 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
328
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530329 sapContext->numofChannel = numOfChannels;
330
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 sapContext->channelList = channelList;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700332
Jeff Johnson295189b2012-06-20 16:38:30 -0700333#endif
334 /* Set requestType to Full scan */
335
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530336 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
337 FL("Auto Channel Selection Scan"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700338
Jeff Johnson43971f52012-07-17 12:26:56 -0700339 halStatus = sme_ScanRequest(hHal,
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 0,//Not used in csrScanRequest
341 &scanRequest,
342 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
343 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
344 sapContext);//void * pContext scanRequestID filled up
Jeff Johnson43971f52012-07-17 12:26:56 -0700345 if (eHAL_STATUS_SUCCESS != halStatus)
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530347 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
348 FL("Auto Channel Selection Scan fail %d!!!"), halStatus);
349 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
350 FL("SoftAP Configuring for default channel, Ch= %d"),
351 sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 /* In case of error, switch to default channel */
353 sapContext->channel = SAP_DEFAULT_CHANNEL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700354#ifdef SOFTAP_CHANNEL_RANGE
355 if(sapContext->channelList != NULL)
356 {
Ratnam Rachuri90e3b0c2015-07-12 15:20:45 +0530357 for ( i = 0 ; i < sapContext->numofChannel ; i++)
358 if (NV_CHANNEL_ENABLE ==
359 vos_nv_getChannelEnabledState(sapContext->channelList[i]))
360 {
361 sapContext->channel = sapContext->channelList[i];
362 }
363 vos_mem_free(sapContext->channelList);
364 sapContext->channelList = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
Ratnam Rachuri90e3b0c2015-07-12 15:20:45 +0530366#ifdef FEATURE_WLAN_CH_AVOID
367 else
368 {
369 for( i = 0; i < NUM_20MHZ_RF_CHANNELS; i++ )
370 {
371 if((NV_CHANNEL_ENABLE ==
372 vos_nv_getChannelEnabledState(safeChannels[i].channelNumber))
373 && (VOS_TRUE == safeChannels[i].isSafe))
374 {
375 sapContext->channel = safeChannels[i].channelNumber;
376 break;
377 }
378 }
379 }
380#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700381#endif
382 /* Fill in the event structure */
383 sapEventInit(sapEvent);
384 /* Handle event */
385 vosStatus = sapFsm(sapContext, sapEvent);
386 }
387 else
388 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530389 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
390 FL("Auto Channel Selection Scan Success"
391 " scanRequestID=%d, Ch= %d"),
392 scanRequestID, sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 }
394
395 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700396 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700397 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530398 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
399 FL("For configured channel, Ch= %d"), sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700400
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530401#ifdef WLAN_FEATURE_AP_HT40_24G
402 if (vos_get_concurrency_mode() != VOS_STA_SAP)
403 {
404 if ((sapContext->channel <= SIR_11B_CHANNEL_END)
405 && (sapContext->channel > RF_CHAN_1))
406 {
407 // OBSS Scan for P2P GO/SAP where Auto Channel Selection is Disable
408 vosStatus = sapGetChannelListForObss(hHal, sapContext,
409 &channelList, &numOfChannels);
410 if (VOS_STATUS_SUCCESS == vosStatus && channelList != NULL)
411 {
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +0530412
413 if (sapCheckHT40SecondaryIsNotAllowed(sapContext))
414 {
415 if(channelList != NULL)
416 {
417 vos_mem_free(channelList);
418 channelList = NULL;
419 }
420 goto disable24GChannelBonding;
421 }
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530422 vos_mem_zero(&scanRequest, sizeof(scanRequest));
423
424 /* Set scanType to Passive scan */
425 scanRequest.scanType = eSIR_PASSIVE_SCAN;
426
427 /* Set min and max channel time to zero */
428 scanRequest.minChnTime = CSR_ACTIVE_MIN_CHANNEL_TIME;
429 scanRequest.maxChnTime = CSR_ACTIVE_MAX_CHANNEL_TIME;
430
431 /* Set BSSType to default type */
432 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
433
434 /*Scan the channels in the list*/
435 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
436 scanRequest.ChannelInfo.ChannelList = channelList;
437 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
438 sapContext->channelList = channelList;
439
440 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
441 FL("OBSS Scan for SAP/P2P GO: Ch= %d"),
442 sapContext->channel);
443
444 halStatus = sme_ScanRequest(hHal,
445 0,//Not used in csrScanRequest
446 &scanRequest,
447 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
448 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
449 sapContext);//void * pContext scanRequestID filled up
450
451 if (eHAL_STATUS_SUCCESS != halStatus)
452 {
453 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
454 FL("OBSS ScanRequest Fail %d!!!"),
455 halStatus);
456 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
457 FL("SoftAP Configuring for default channel, Ch= %d"),
458 sapContext->channel);
459
460 if(sapContext->channelList != NULL)
461 {
462 vos_mem_free(sapContext->channelList);
463 sapContext->channelList = NULL;
464 }
465 goto disable24GChannelBonding;
466 }
467 else
468 {
469 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
470 FL("OBSS ScanRequest Success, scanRequestID=%d"
471 " Ch= %d"), scanRequestID, sapContext->channel);
472 goto startgo;
473 }
474 }
475 else
476 {
477 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
478 FL("Failed to Prepare the OBSS Scan channel list"));
479 goto disable24GChannelBonding;
480 }
481disable24GChannelBonding:
482 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
483 FL("Disable Channel Bonding"));
484 /* Disable Channel Bonding for 2.4GHz */
485 sme_UpdateChannelBondingMode24G(hHal,
486 PHY_SINGLE_CHANNEL_CENTERED);
487 }
488 else
489 {
490 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
491 FL("No concurrency & Channel: %d"),
492 sapContext->channel);
493 goto selectChannelBonding;
494 }
495 }
496 else
497 {
498 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
499 FL("With concurrency & Channel: %d"),
500 sapContext->channel);
501 goto selectChannelBonding;
502 }
503#endif
504
505#ifdef WLAN_FEATURE_AP_HT40_24G
506selectChannelBonding:
507 if (sapContext->channel > SIR_11B_CHANNEL_END)
508#endif
509 sme_SelectCBMode(hHal, sapPhyMode, sapContext->channel);
510
511 /* Fill in the event structure */
512 // Eventhough scan was not done, means a user set channel was chosen
513 sapEventInit(sapEvent);
514 /* Handle event */
515 vosStatus = sapFsm(sapContext, sapEvent);
516 }
517#ifdef WLAN_FEATURE_AP_HT40_24G
518startgo:
519#endif
520 /* If scan failed, get default channel and advance state
521 * machine as success with default channel. Have to wait
522 * for the call back to be called to get the channel cannot
523 * advance state machine here as said above */
524
525 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
526 FL("Before exiting sapGotoChannelSel channel=%d"),
527 sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700528
529 return VOS_STATUS_SUCCESS;
530}// sapGotoChannelSel
531
532/*==========================================================================
533 FUNCTION sapGotoStarting
534
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700535 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 Function for initiating start bss request for SME
537
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700538 DEPENDENCIES
539 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700540
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700541 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700542
543 IN
544 sapContext : Sap Context value
545 sapEvent : State machine event
546 bssType : Type of bss to start, INRA AP
547 status : Return the SAP status here
548
549 RETURN VALUE
550 The VOS_STATUS code associated with performing the operation
551
552 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700553
554 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700555============================================================================*/
556VOS_STATUS
557sapGotoStarting
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700558(
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 ptSapContext sapContext,
560 ptWLAN_SAPEvent sapEvent,
561 eCsrRoamBssType bssType
562)
563{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700564 /* tHalHandle */
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
566 eHalStatus halStatus;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700567
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 /*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700569 char key_material[32]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,};
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 sapContext->key_type = 0x05;
571 sapContext->key_length = 32;
572 vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700573
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700574 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 if (NULL == hHal)
576 {
577 /* we have a serious problem */
578 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700579 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 return VOS_STATUS_E_FAULT;
581 }
582
583 //TODO: What shall we do if failure????
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700584 halStatus = pmcRequestFullPower( hHal,
585 WLANSAP_pmcFullPwrReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 sapContext,
587 eSME_REASON_OTHER);
588
589 /* Open SME Session for Softap */
590 halStatus = sme_OpenSession(hHal,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700591 &WLANSAP_RoamCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 sapContext,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700593 sapContext->self_mac_addr,
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 &sapContext->sessionId);
595
596 if(eHAL_STATUS_SUCCESS != halStatus )
597 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700598 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "Error: In %s calling sme_RoamConnect status = %d", __func__, halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 return VOS_STATUS_E_FAILURE;
600 }
601
602 return VOS_STATUS_SUCCESS;
603}// sapGotoStarting
604
605/*==========================================================================
606 FUNCTION sapGotoDisconnecting
607
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700608 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 Processing of SAP FSM Disconnecting state
610
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700611 DEPENDENCIES
612 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700613
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700614 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700615
616 IN
617 sapContext : Sap Context value
618 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700619
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 RETURN VALUE
621 The VOS_STATUS code associated with performing the operation
622
623 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700624
625 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700626============================================================================*/
627VOS_STATUS
628sapGotoDisconnecting
629(
630 ptSapContext sapContext
631)
632{
633 eHalStatus halStatus;
634 tHalHandle hHal;
635
636 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
637 if (NULL == hHal)
638 {
639 /* we have a serious problem */
640 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700641 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 return VOS_STATUS_E_FAULT;
643 }
644
645 sapFreeRoamProfile(&sapContext->csrRoamProfile);
646 halStatus = sme_RoamStopBss(hHal, sapContext->sessionId);
647 if(eHAL_STATUS_SUCCESS != halStatus )
648 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700649 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "Error: In %s calling sme_RoamStopBss status = %d", __func__, halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 return VOS_STATUS_E_FAILURE;
651 }
652
653 return VOS_STATUS_SUCCESS;
654}
655
656static eHalStatus sapRoamSessionCloseCallback(void *pContext)
657{
658 ptSapContext sapContext = (ptSapContext)pContext;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700659 return sapSignalHDDevent(sapContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 eSAP_STOP_BSS_EVENT, (v_PVOID_t) eSAP_STATUS_SUCCESS);
661}
662
663/*==========================================================================
664 FUNCTION sapGotoDisconnected
665
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700666 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 Function for setting the SAP FSM to Disconnection state
668
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700669 DEPENDENCIES
670 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700671
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700672 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700673
674 IN
675 sapContext : Sap Context value
676 sapEvent : State machine event
677 status : Return the SAP status here
678
679 RETURN VALUE
680 The VOS_STATUS code associated with performing the operation
681
682 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700683
684 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700685============================================================================*/
686VOS_STATUS
687sapGotoDisconnected
688(
689 ptSapContext sapContext
690)
691{
692 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
693 tWLAN_SAPEvent sapEvent;
694 // Processing has to be coded
695 // Clean up stations from TL etc as AP BSS is shut down then set event
696 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;// hardcoded
697 sapEvent.params = 0;
698 sapEvent.u1 = 0;
699 sapEvent.u2 = 0;
700 /* Handle event */
701 vosStatus = sapFsm(sapContext, &sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700702
Jeff Johnson295189b2012-06-20 16:38:30 -0700703 return vosStatus;
704}
705
706/*==========================================================================
707 FUNCTION sapSignalHDDevent
708
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700709 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 Function for HDD to send the event notification using callback
711
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700712 DEPENDENCIES
713 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700714
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700715 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700716
717 IN
718 sapContext : Sap Context value
719 pCsrRoamInfo : Pointer to CSR roam information
720 sapHddevent : SAP HDD event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700721 context : to pass the element for future support
722
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 RETURN VALUE
724 The VOS_STATUS code associated with performing the operation
725
726 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700727
728 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700729============================================================================*/
730VOS_STATUS
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700731sapSignalHDDevent
732(
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 ptSapContext sapContext, /* sapContext value */
734 tCsrRoamInfo *pCsrRoamInfo,
735 eSapHddEvent sapHddevent,
736 void *context
737)
738{
739 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
740 tSap_Event sapApAppEvent; /* This now encodes ALL event types */
741 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
742
743 /* Format the Start BSS Complete event to return... */
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530744 if (NULL == sapContext->pfnSapEventCallback)
745 {
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530746 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
747 FL("HDD Event callaback invalid"));
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530748 return VOS_STATUS_E_INVAL;
749 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700750
751 switch (sapHddevent)
752 {
753 case eSAP_STA_ASSOC_IND:
Madan Mohan Koyyalamudi8bdd3112012-09-24 13:55:14 -0700754 // TODO - Indicate the assoc request indication to OS
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_IND;
756
757 vos_mem_copy( &sapApAppEvent.sapevt.sapAssocIndication.staMac, pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
758 sapApAppEvent.sapevt.sapAssocIndication.staId = pCsrRoamInfo->staId;
759 sapApAppEvent.sapevt.sapAssocIndication.status = 0;
760 // Required for indicating the frames to upper layer
761 sapApAppEvent.sapevt.sapAssocIndication.beaconLength = pCsrRoamInfo->beaconLength;
762 sapApAppEvent.sapevt.sapAssocIndication.beaconPtr = pCsrRoamInfo->beaconPtr;
763 sapApAppEvent.sapevt.sapAssocIndication.assocReqLength = pCsrRoamInfo->assocReqLength;
764 sapApAppEvent.sapevt.sapAssocIndication.assocReqPtr = pCsrRoamInfo->assocReqPtr;
765 sapApAppEvent.sapevt.sapAssocIndication.fWmmEnabled = pCsrRoamInfo->wmmEnabledSta;
766 if ( pCsrRoamInfo->u.pConnectedProfile != NULL )
767 {
768 sapApAppEvent.sapevt.sapAssocIndication.negotiatedAuthType = pCsrRoamInfo->u.pConnectedProfile->AuthType;
769 sapApAppEvent.sapevt.sapAssocIndication.negotiatedUCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->EncryptionType;
770 sapApAppEvent.sapevt.sapAssocIndication.negotiatedMCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->mcEncryptionType;
771 sapApAppEvent.sapevt.sapAssocIndication.fAuthRequired = pCsrRoamInfo->fAuthRequired;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 break;
774 case eSAP_START_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530775 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
776 FL("SAP event callback event = %s"),
777 "eSAP_START_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 sapApAppEvent.sapHddEventCode = eSAP_START_BSS_EVENT;
779 sapApAppEvent.sapevt.sapStartBssCompleteEvent.status = (eSapStatus )context;
780 if(pCsrRoamInfo != NULL ){
781 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = pCsrRoamInfo->staId;
782 }
783 else
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700784 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 sapApAppEvent.sapevt.sapStartBssCompleteEvent.operatingChannel = (v_U8_t)sapContext->channel;
786 break;
787
788 case eSAP_STOP_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530789 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
790 FL("SAP event callback event = %s"),
791 "eSAP_STOP_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 sapApAppEvent.sapHddEventCode = eSAP_STOP_BSS_EVENT;
793 sapApAppEvent.sapevt.sapStopBssCompleteEvent.status = (eSapStatus )context;
794 break;
795
796 case eSAP_STA_ASSOC_EVENT:
797 {
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530798 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
799 FL("SAP event callback event = %s"),
800 "eSAP_STA_ASSOC_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 if (pCsrRoamInfo->fReassocReq)
802 sapApAppEvent.sapHddEventCode = eSAP_STA_REASSOC_EVENT;
803 else
804 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_EVENT;
805
806 //TODO: Need to fill the SET KEY information and pass to HDD
807 vos_mem_copy( &sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700808 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
809 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.staId = pCsrRoamInfo->staId ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
811 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen = pCsrRoamInfo->rsnIELen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700812 vos_mem_copy(sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.ies, pCsrRoamInfo->prsnIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 pCsrRoamInfo->rsnIELen);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700814
815 if(pCsrRoamInfo->addIELen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 {
817 v_U8_t len = sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700818 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 += pCsrRoamInfo->addIELen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700820 vos_mem_copy(&sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.ies[len], pCsrRoamInfo->paddIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700821 pCsrRoamInfo->addIELen);
822 }
823
Deepthi Gowriae6a1662015-10-12 12:59:37 +0530824 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.rate_flags = pCsrRoamInfo->maxRateFlags;
825
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.wmmEnabled = pCsrRoamInfo->wmmEnabledSta;
827 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.status = (eSapStatus )context;
828 //TODO: Need to fill sapAuthType
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700829 //sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.SapAuthType = pCsrRoamInfo->pProfile->negotiatedAuthType;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 break;
831 }
832
833 case eSAP_STA_DISASSOC_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530834 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
835 FL("SAP event callback event = %s"),
836 "eSAP_STA_DISASSOC_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700837 sapApAppEvent.sapHddEventCode = eSAP_STA_DISASSOC_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700838
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 vos_mem_copy( &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700840 pCsrRoamInfo->peerMac, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staId = pCsrRoamInfo->staId;
842 if (pCsrRoamInfo->reasonCode == eCSR_ROAM_RESULT_FORCED)
843 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_USR_INITATED_DISASSOC;
844 else
845 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_MAC_INITATED_DISASSOC;
846
847 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
848 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.status = (eSapStatus )context;
849 break;
850
851 case eSAP_STA_SET_KEY_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530852 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
853 FL("SAP event callback event = %s"),
854 "eSAP_STA_SET_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 sapApAppEvent.sapHddEventCode = eSAP_STA_SET_KEY_EVENT;
856 sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.status = (eSapStatus )context;
857 vos_mem_copy(&sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.peerMacAddr,
858 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
859 break;
860
861 case eSAP_STA_DEL_KEY_EVENT :
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530862 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
863 FL("SAP event callback event = %s"),
864 "eSAP_STA_DEL_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 sapApAppEvent.sapHddEventCode = eSAP_STA_DEL_KEY_EVENT;
866 sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.status = (eSapStatus )context;
867 //TODO: Should we need to send the key information
868 //sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.keyId = ;
869 break;
870
871 case eSAP_STA_MIC_FAILURE_EVENT :
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530872 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
873 FL("SAP event callback event = %s"),
874 "eSAP_STA_MIC_FAILURE_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 sapApAppEvent.sapHddEventCode = eSAP_STA_MIC_FAILURE_EVENT;
876 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.srcMacAddr,
877 pCsrRoamInfo->u.pMICFailureInfo->srcMacAddr,
878 sizeof(tSirMacAddr));
879 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.staMac,
880 pCsrRoamInfo->u.pMICFailureInfo->taMacAddr,
881 sizeof(tSirMacAddr));
882 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.dstMacAddr,
883 pCsrRoamInfo->u.pMICFailureInfo->dstMacAddr,
884 sizeof(tSirMacAddr));
885 sapApAppEvent.sapevt.sapStationMICFailureEvent.multicast = pCsrRoamInfo->u.pMICFailureInfo->multicast;
886 sapApAppEvent.sapevt.sapStationMICFailureEvent.IV1 = pCsrRoamInfo->u.pMICFailureInfo->IV1;
887 sapApAppEvent.sapevt.sapStationMICFailureEvent.keyId = pCsrRoamInfo->u.pMICFailureInfo->keyId;
888 vos_mem_copy( sapApAppEvent.sapevt.sapStationMICFailureEvent.TSC,
889 pCsrRoamInfo->u.pMICFailureInfo->TSC,
890 SIR_CIPHER_SEQ_CTR_SIZE);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700891 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700892
893 case eSAP_ASSOC_STA_CALLBACK_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530894 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
895 FL("SAP event callback event = %s"),
896 "eSAP_ASSOC_STA_CALLBACK_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700898
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 case eSAP_WPS_PBC_PROBE_REQ_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530900 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
901 FL("SAP event callback event = %s"),
902 "eSAP_WPS_PBC_PROBE_REQ_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 sapApAppEvent.sapHddEventCode = eSAP_WPS_PBC_PROBE_REQ_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700904
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 vos_mem_copy( &sapApAppEvent.sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq,
906 pCsrRoamInfo->u.pWPSPBCProbeReq,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700907 sizeof(tSirWPSPBCProbeReq));
Jeff Johnson295189b2012-06-20 16:38:30 -0700908 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 case eSAP_REMAIN_CHAN_READY:
910 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530911 FL("SAP event callback event = %s"),
912 "eSAP_REMAIN_CHAN_READY");
Jeff Johnson295189b2012-06-20 16:38:30 -0700913 sapApAppEvent.sapHddEventCode = eSAP_REMAIN_CHAN_READY;
914 break;
915 case eSAP_SEND_ACTION_CNF:
916 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530917 FL("SAP event callback event = %s"),
918 "eSAP_SEND_ACTION_CNF");
Jeff Johnson295189b2012-06-20 16:38:30 -0700919 sapApAppEvent.sapHddEventCode = eSAP_SEND_ACTION_CNF;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700920 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
Jeff Johnson295189b2012-06-20 16:38:30 -0700921 break;
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800922
923 case eSAP_DISCONNECT_ALL_P2P_CLIENT:
924 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530925 FL("SAP event callback event = %s"),
926 "eSAP_DISCONNECT_ALL_P2P_CLIENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800927 sapApAppEvent.sapHddEventCode = eSAP_DISCONNECT_ALL_P2P_CLIENT;
928 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
929 break;
930
931 case eSAP_MAC_TRIG_STOP_BSS_EVENT :
932 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530933 FL("SAP event callback event = %s"),
934 "eSAP_MAC_TRIG_STOP_BSS_EVENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800935 sapApAppEvent.sapHddEventCode = eSAP_MAC_TRIG_STOP_BSS_EVENT;
936 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
937 break;
938
Jeff Johnson295189b2012-06-20 16:38:30 -0700939
940 case eSAP_UNKNOWN_STA_JOIN:
941 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530942 FL("SAP event callback event = %s"),
943 "eSAP_UNKNOWN_STA_JOIN");
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 sapApAppEvent.sapHddEventCode = eSAP_UNKNOWN_STA_JOIN;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700945 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapUnknownSTAJoin.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 (v_PVOID_t)context, sizeof(v_MACADDR_t));
947 break;
948
949 case eSAP_MAX_ASSOC_EXCEEDED:
950 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530951 FL("SAP event callback event = %s"),
952 "eSAP_MAX_ASSOC_EXCEEDED");
Jeff Johnson295189b2012-06-20 16:38:30 -0700953 sapApAppEvent.sapHddEventCode = eSAP_MAX_ASSOC_EXCEEDED;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700954 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapMaxAssocExceeded.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700955 (v_PVOID_t)pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t));
956 break;
957
958 default:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530959 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
960 FL("SAP Unknown callback event = %d"),
961 sapHddevent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 break;
963 }
964 vosStatus = (*sapContext->pfnSapEventCallback)
965 (
966 &sapApAppEvent,
967 sapContext->pUsrContext//userdataforcallback - hdd opaque handle
968 );
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700969
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 return vosStatus;
971
972} /* sapSignalApAppStartBssEvent */
973
974/*==========================================================================
975 FUNCTION sapFsm
976
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700977 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 SAP State machine entry function
979
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700980 DEPENDENCIES
981 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700982
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700983 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700984
985 IN
986 sapContext : Sap Context value
987 sapEvent : State machine event
988 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700989
Jeff Johnson295189b2012-06-20 16:38:30 -0700990 RETURN VALUE
991 The VOS_STATUS code associated with performing the operation
992
993 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700994
995 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700996============================================================================*/
997VOS_STATUS
998sapFsm
999(
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001000 ptSapContext sapContext, /* sapContext value */
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 ptWLAN_SAPEvent sapEvent /* State machine event */
1002)
1003{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001004 /* Retrieve the phy link state machine structure
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 * from the sapContext value
1006 */
1007 eSapFsmStates_t stateVar = sapContext->sapsMachine; /*state var that keeps track of state machine*/
1008 tCsrRoamInfo *roamInfo = (tCsrRoamInfo *)(sapEvent->params);
1009 v_U32_t msg = sapEvent->event; /* State machine input event message */
1010 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
1011
1012 switch (stateVar)
1013 {
1014 case eSAP_DISCONNECTED:
1015 if ((msg == eSAP_HDD_START_INFRA_BSS))
1016 {
1017 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1018 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, new from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001019 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Jeff Johnson295189b2012-06-20 16:38:30 -07001020
1021 /* There can be one SAP Session for softap */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001022 if (sapContext->isSapSessionOpen == eSAP_TRUE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 {
1024 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001025 "%s:SME Session is already opened\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 return VOS_STATUS_E_EXISTS;
1027 }
1028
1029 sapContext->sessionId = 0xff;
1030
1031 /* Set SAP device role */
1032 sapContext->sapsMachine = eSAP_CH_SELECT;
1033
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301034#ifdef WLAN_FEATURE_AP_HT40_24G
1035 sapSetObssParm(sapContext);
1036#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 /* Perform sme_ScanRequest */
1038 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001039
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1041 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001042 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001043 }
1044 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 {
1046 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001047 __func__, "eSAP_DISCONNECTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 }
1049 break;
1050
1051 case eSAP_CH_SELECT:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001052 if (msg == eSAP_MAC_SCAN_COMPLETE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 {
1054 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1055 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001056 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 // Channel selected. Now can sapGotoStarting
1058 sapContext->sapsMachine = eSAP_STARTING;
1059 // Specify the channel
1060 sapContext->csrRoamProfile.ChannelInfo.numOfChannels = 1;
1061 sapContext->csrRoamProfile.ChannelInfo.ChannelList = &sapContext->csrRoamProfile.operationChannel;
1062 sapContext->csrRoamProfile.operationChannel = (tANI_U8)sapContext->channel;
1063 vosStatus = sapGotoStarting( sapContext, sapEvent, eCSR_BSS_TYPE_INFRA_AP);
1064 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1065 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001066 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 }
1068 else
1069 {
1070 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001071 __func__, "eSAP_CH_SELECT", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 }
1073 break;
1074
1075 case eSAP_STARTING:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001076 if (msg == eSAP_MAC_START_BSS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 {
1078 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1079 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state channel = %d %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001080 __func__,sapContext->channel, "eSAP_STARTING", "eSAP_STARTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001081
1082 sapContext->sapsMachine = eSAP_STARTED;
1083 /*Action code for transition */
1084 vosStatus = sapSignalHDDevent( sapContext, roamInfo, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
1085
1086 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1087 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001088 __func__, "eSAP_STARTING", "eSAP_STARTED");
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301089
1090#ifdef WLAN_FEATURE_AP_HT40_24G
1091 /* Initialize the HT2040 timer */
Kaushik, Sushant553a06c2014-11-26 15:29:40 +05301092 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301093 "In %s, Init HT20/40 timer", __func__);
1094
1095 vosStatus = vos_timer_init( &sapContext->sap_HT2040_timer,
1096 VOS_TIMER_TYPE_SW, sap_ht2040_timer_cb,
1097 (v_PVOID_t)sapContext );
1098
1099 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1100 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1101 "In %s, Failed to Init HT20/40 timer", __func__);
1102#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 }
Deepthi Gowri912c7182015-11-25 18:19:16 +05301104 else if ((msg == eSAP_HDD_STOP_INFRA_BSS) ||
1105 (msg == eSAP_MAC_START_FAILS))
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001107 /*Transition from eSAP_STARTING to eSAP_DISCONNECTING (both without substates)*/
Jeff Johnson295189b2012-06-20 16:38:30 -07001108 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001109 __func__, "eSAP_STARTING", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001110
1111 /*Advance outer statevar */
1112 sapContext->sapsMachine = eSAP_DISCONNECTED;
1113 vosStatus = sapSignalHDDevent( sapContext, NULL, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
1114 vosStatus = sapGotoDisconnected(sapContext);
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05301115
1116#ifdef WLAN_FEATURE_AP_HT40_24G
1117 /* Reset the OBSS Affected Channel Range */
1118 if ( (0 != sapContext->affected_start)
1119 && (0 != sapContext->affected_end)
1120 && (0 != sapContext->sap_sec_chan) )
1121 {
1122 sapContext->affected_start = 0;
1123 sapContext->affected_end = 0;
1124 sapContext->sap_sec_chan = 0;
1125 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1126 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1127 sapContext->affected_start, sapContext->affected_end);
1128
1129 }
1130#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* Close the SME session*/
1132
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001133 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 {
1135 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1136 if (NULL == hHal)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1139 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001140 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001142 else if (eHAL_STATUS_SUCCESS ==
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 sme_CloseSession(hHal,
mukul sharmabab477d2015-06-11 17:14:55 +05301144 sapContext->sessionId, VOS_TRUE, NULL, NULL))
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 {
1146 sapContext->isSapSessionOpen = eSAP_FALSE;
1147 }
1148 }
1149 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001150 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 {
1152 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1153 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001154 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 /* Intentionally left blank */
1156 }
1157 break;
1158
1159 case eSAP_STARTED:
1160 if (msg == eSAP_HDD_STOP_INFRA_BSS)
1161 {
1162 /* Transition from eSAP_STARTED to eSAP_DISCONNECTING (both without substates) */
1163 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001164 __func__, "eSAP_STARTED", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001165 sapContext->sapsMachine = eSAP_DISCONNECTING;
1166 vosStatus = sapGotoDisconnecting(sapContext);
1167 }
1168 else
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001171 __func__, "eSAP_STARTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 }
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301173#ifdef WLAN_FEATURE_AP_HT40_24G
1174 /* Reset the OBSS Affected Channel Range */
1175 if ( (0 != sapContext->affected_start)
1176 && (0 != sapContext->affected_end)
1177 && (0 != sapContext->sap_sec_chan) )
1178 {
1179 sapContext->affected_start = 0;
1180 sapContext->affected_end = 0;
1181 sapContext->sap_sec_chan = 0;
1182 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1183 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1184 sapContext->affected_start, sapContext->affected_end);
1185 }
1186
1187 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1188 {
1189 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1190 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1191 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1192 FL("Failed to Stop HT20/40 timer"));
1193 }
1194
1195 vosStatus = vos_timer_destroy(&sapContext->sap_HT2040_timer);
1196 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1197 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1198 FL("Failed to Destroy HT20/40 timer"));
1199#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 break;
1201
1202 case eSAP_DISCONNECTING:
1203 if (msg == eSAP_MAC_READY_FOR_CONNECTIONS)
1204 {
1205 /* Transition from eSAP_DISCONNECTING to eSAP_DISCONNECTED (both without substates) */
1206 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001207 __func__, "eSAP_DISCONNECTING", "eSAP_DISCONNECTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001208
1209 sapContext->sapsMachine = eSAP_DISCONNECTED;
1210 /* Close the SME session*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001211 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -07001212 {
1213 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1214
1215 if (NULL == hHal)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1218 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001219 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 }
1221 else
1222 {
1223 sapContext->isSapSessionOpen = eSAP_FALSE;
1224 if (!HAL_STATUS_SUCCESS(
1225 sme_CloseSession(hHal,
mukul sharmabab477d2015-06-11 17:14:55 +05301226 sapContext->sessionId, VOS_TRUE,
Jeff Johnson295189b2012-06-20 16:38:30 -07001227 sapRoamSessionCloseCallback, sapContext)))
1228 {
1229 vosStatus = sapSignalHDDevent(sapContext, NULL,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001230 eSAP_STOP_BSS_EVENT,
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 (v_PVOID_t) eSAP_STATUS_SUCCESS);
1232 }
1233 }
1234 }
1235 }
Peng Xu2446a892014-09-05 17:21:18 +05301236 if (msg == eSAP_CHANNEL_SELECTION_FAILED)
1237 {
1238 /* Set SAP device role */
1239 sapContext->sapsMachine = eSAP_CH_SELECT;
1240
1241 /* Perform sme_ScanRequest */
1242 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
1243 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001244 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001246 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001248 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 }
1250 break;
1251 }
1252 return vosStatus;
1253}// sapFsm
1254
1255
1256eSapStatus
1257sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, tCsrRoamProfile *profile)
1258{
1259 //Create Roam profile for SoftAP to connect
1260 profile->BSSType = eCSR_BSS_TYPE_INFRA_AP;
1261 profile->SSIDs.numOfSSIDs = 1;
1262 profile->csrPersona = pconfig_params->persona;
1263
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001264 vos_mem_zero(profile->SSIDs.SSIDList[0].SSID.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 sizeof(profile->SSIDs.SSIDList[0].SSID.ssId));
1266
1267 //Flag to not broadcast the SSID information
1268 profile->SSIDs.SSIDList[0].ssidHidden = pconfig_params->SSIDinfo.ssidHidden;
1269
1270 profile->SSIDs.SSIDList[0].SSID.length = pconfig_params->SSIDinfo.ssid.length;
1271 vos_mem_copy(&profile->SSIDs.SSIDList[0].SSID.ssId, pconfig_params->SSIDinfo.ssid.ssId,
1272 sizeof(pconfig_params->SSIDinfo.ssid.ssId));
1273
1274 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1275
1276 if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1277 {
1278 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1279 }
1280 else if (pconfig_params->authType == eSAP_SHARED_KEY)
1281 {
1282 profile->negotiatedAuthType = eCSR_AUTH_TYPE_SHARED_KEY;
1283 }
1284 else
1285 {
1286 profile->negotiatedAuthType = eCSR_AUTH_TYPE_AUTOSWITCH;
1287 }
1288
1289 profile->AuthType.numEntries = 1;
1290 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1291
1292 //Always set the Encryption Type
1293 profile->EncryptionType.numEntries = 1;
1294 profile->EncryptionType.encryptionType[0] = pconfig_params->RSNEncryptType;
1295
1296 profile->mcEncryptionType.numEntries = 1;
1297 profile->mcEncryptionType.encryptionType[0] = pconfig_params->mcRSNEncryptType;
1298
1299 if (pconfig_params->privacy & eSAP_SHARED_KEY)
1300 {
1301 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_SHARED_KEY;
1302 }
1303
1304 profile->privacy = pconfig_params->privacy;
1305 profile->fwdWPSPBCProbeReq = pconfig_params->fwdWPSPBCProbeReq;
1306
1307 if (pconfig_params->authType == eSAP_SHARED_KEY)
1308 {
1309 profile->csr80211AuthType = eSIR_SHARED_KEY;
1310 }
1311 else if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1312 {
1313 profile->csr80211AuthType = eSIR_OPEN_SYSTEM;
1314 }
1315 else
1316 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001317 profile->csr80211AuthType = eSIR_AUTO_SWITCH;
Jeff Johnson295189b2012-06-20 16:38:30 -07001318 }
1319
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001320 //Initialize we are not going to use it
Jeff Johnson295189b2012-06-20 16:38:30 -07001321 profile->pWPAReqIE = NULL;
1322 profile->nWPAReqIELength = 0;
1323
1324 //set the RSN/WPA IE
1325 profile->pRSNReqIE = NULL;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001326 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001327 if (pconfig_params->RSNWPAReqIELength)
1328 {
1329 profile->pRSNReqIE = vos_mem_malloc(pconfig_params->RSNWPAReqIELength);
1330 if( NULL == profile->pRSNReqIE )
1331 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001332 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, " %s Fail to alloc memory", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001333 return eSAP_STATUS_FAILURE;
1334 }
1335 vos_mem_copy(profile->pRSNReqIE, pconfig_params->pRSNWPAReqIE, pconfig_params->RSNWPAReqIELength);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001336 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 }
1338
1339 // Turn off CB mode
1340 profile->CBMode = eCSR_CB_OFF;
1341
1342 //set the phyMode to accept anything
1343 //Best means everything because it covers all the things we support
1344 profile->phyMode = pconfig_params->SapHw_mode; /*eCSR_DOT11_MODE_BEST*/
1345
1346 //Configure beaconInterval
1347 profile->beaconInterval = (tANI_U16)pconfig_params->beacon_int;
1348
1349 // set DTIM period
1350 profile->dtimPeriod = pconfig_params->dtim_period;
1351
1352 //set Uapsd enable bit
1353 profile->ApUapsdEnable = pconfig_params->UapsdEnable;
1354
1355 //Enable protection parameters
1356 profile->protEnabled = pconfig_params->protEnabled;
1357 profile->obssProtEnabled = pconfig_params->obssProtEnabled;
1358 profile->cfg_protection = pconfig_params->ht_capab;
1359
1360 //country code
1361 if (pconfig_params->countryCode[0])
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001362 vos_mem_copy(profile->countryCode, pconfig_params->countryCode, WNI_CFG_COUNTRY_CODE_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07001363 profile->ieee80211d = pconfig_params->ieee80211d;
Jeff Johnson295189b2012-06-20 16:38:30 -07001364 //wps config info
1365 profile->wps_state = pconfig_params->wps_state;
1366
Chet Lanctot8cecea22014-02-11 19:09:36 -08001367#ifdef WLAN_FEATURE_11W
1368 // MFP capable/required
1369 profile->MFPCapable = pconfig_params->mfpCapable ? 1 : 0;
1370 profile->MFPRequired = pconfig_params->mfpRequired ? 1 : 0;
1371#endif
1372
Jeff Johnson295189b2012-06-20 16:38:30 -07001373 return eSAP_STATUS_SUCCESS; /* Success. */
1374}
1375
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001376/**
1377 * FUNCTION: sapConvertSapPhyModeToCsrPhyMode
1378 * Called internally by SAP
1379 */
1380eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode )
1381{
1382 switch (sapPhyMode)
1383 {
1384 case (eSAP_DOT11_MODE_abg):
1385 return eCSR_DOT11_MODE_abg;
1386 case (eSAP_DOT11_MODE_11b):
1387 return eCSR_DOT11_MODE_11b;
1388 case (eSAP_DOT11_MODE_11g):
1389 return eCSR_DOT11_MODE_11g;
1390 case (eSAP_DOT11_MODE_11n):
1391 return eCSR_DOT11_MODE_11n;
1392 case (eSAP_DOT11_MODE_11g_ONLY):
1393 return eCSR_DOT11_MODE_11g_ONLY;
1394 case (eSAP_DOT11_MODE_11n_ONLY):
1395 return eCSR_DOT11_MODE_11n_ONLY;
1396 case (eSAP_DOT11_MODE_11b_ONLY):
1397 return eCSR_DOT11_MODE_11b_ONLY;
1398#ifdef WLAN_FEATURE_11AC
1399 case (eSAP_DOT11_MODE_11ac_ONLY):
1400 return eCSR_DOT11_MODE_11ac_ONLY;
1401 case (eSAP_DOT11_MODE_11ac):
1402 return eCSR_DOT11_MODE_11ac;
1403#endif
Deepthi Gowri849c1e42014-11-05 15:57:22 +05301404 case (eSAP_DOT11_MODE_11a):
1405 return eCSR_DOT11_MODE_11a;
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001406 default:
1407 return eCSR_DOT11_MODE_AUTO;
1408 }
1409}
Jeff Johnson295189b2012-06-20 16:38:30 -07001410
1411void sapFreeRoamProfile(tCsrRoamProfile *profile)
1412{
1413 if(profile->pRSNReqIE)
1414 {
1415 vos_mem_free(profile->pRSNReqIE);
1416 profile->pRSNReqIE = NULL;
1417 }
1418}
1419
1420
1421void
1422sapSortMacList(v_MACADDR_t *macList, v_U8_t size)
1423{
1424 v_U8_t outer, inner;
1425 v_MACADDR_t temp;
1426 v_SINT_t nRes = -1;
1427
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301428 if ((NULL == macList) || (size >= MAX_ACL_MAC_ADDRESS))
1429 {
1430 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1431 "In %s, either buffer is NULL or size = %d is more."
1432 ,__func__, size);
1433 return;
1434 }
1435
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 for(outer = 0; outer < size; outer++)
1437 {
1438 for(inner = 0; inner < size - 1; inner++)
1439 {
1440 nRes = vos_mem_compare2((macList + inner)->bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1441 if (nRes > 0)
1442 {
1443 vos_mem_copy(temp.bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1444 vos_mem_copy((macList + inner + 1)->bytes, (macList + inner)->bytes, sizeof(v_MACADDR_t));
1445 vos_mem_copy((macList + inner)->bytes, temp.bytes, sizeof(v_MACADDR_t));
1446 }
1447 }
1448 }
1449}
1450
1451eSapBool
1452sapSearchMacList(v_MACADDR_t *macList, v_U8_t num_mac, v_U8_t *peerMac, v_U8_t *index)
1453{
1454 v_SINT_t nRes = -1;
1455 v_S7_t nStart = 0, nEnd, nMiddle;
1456 nEnd = num_mac - 1;
1457
1458 while (nStart <= nEnd)
1459 {
1460 nMiddle = (nStart + nEnd) / 2;
1461 nRes = vos_mem_compare2(&macList[nMiddle], peerMac, sizeof(v_MACADDR_t));
1462
1463 if (0 == nRes)
1464 {
1465 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1466 "search SUCC");
1467 // "index equals NULL" means the caller does not need the
1468 // index value of the peerMac being searched
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001469 if (index != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001470 {
1471 *index = (v_U8_t) nMiddle;
1472 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1473 "index %d", *index);
1474 }
1475 return eSAP_TRUE;
1476 }
1477 if (nRes < 0)
1478 nStart = nMiddle + 1;
1479 else
1480 nEnd = nMiddle - 1;
1481 }
1482
1483 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1484 "search not succ");
1485 return eSAP_FALSE;
1486}
1487
1488void
1489sapAddMacToACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t *peerMac)
1490{
1491 v_SINT_t nRes = -1;
1492 int i;
1493 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"add acl entered");
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301494
Mahesh A Saptasagarbeb0ba02014-08-01 12:23:59 +05301495 if ((NULL == macList) || (*size >= MAX_ACL_MAC_ADDRESS))
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301496 {
1497 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1498 "In %s, either buffer is NULL or size %d is incorrect."
1499 , __func__, *size);
1500 return;
1501 }
1502
Jeff Johnson295189b2012-06-20 16:38:30 -07001503 for (i=((*size)-1); i>=0; i--)
1504 {
1505 nRes = vos_mem_compare2(&macList[i], peerMac, sizeof(v_MACADDR_t));
1506 if (nRes > 0)
1507 {
1508 /* Move alphabetically greater mac addresses one index down to allow for insertion
1509 of new mac in sorted order */
1510 vos_mem_copy((macList+i+1)->bytes,(macList+i)->bytes, sizeof(v_MACADDR_t));
1511 }
1512 else
1513 {
1514 break;
1515 }
1516 }
1517 //This should also take care of if the element is the first to be added in the list
1518 vos_mem_copy((macList+i+1)->bytes, peerMac, sizeof(v_MACADDR_t));
1519 // increment the list size
1520 (*size)++;
1521}
1522
1523void
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001524sapRemoveMacFromACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t index)
Jeff Johnson295189b2012-06-20 16:38:30 -07001525{
1526 int i;
1527 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"remove acl entered");
1528 /* return if the list passed is empty. Ideally this should never happen since this funcn is always
1529 called after sapSearchMacList to get the index of the mac addr to be removed and this will
1530 only get called if the search is successful. Still no harm in having the check */
Padma, Santhosh Kumar72c28472014-05-15 21:18:11 +05301531 if ((macList==NULL) || (*size == 0) || (*size > MAX_ACL_MAC_ADDRESS))
1532 {
1533 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1534 "In %s, either buffer is NULL or size %d is incorrect."
1535 , __func__, *size);
1536 return;
1537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 for (i=index; i<((*size)-1); i++)
1539 {
1540 /* Move mac addresses starting from "index" passed one index up to delete the void
1541 created by deletion of a mac address in ACL */
1542 vos_mem_copy((macList+i)->bytes,(macList+i+1)->bytes, sizeof(v_MACADDR_t));
1543 }
1544 // The last space should be made empty since all mac addesses moved one step up
1545 vos_mem_zero((macList+(*size)-1)->bytes, sizeof(v_MACADDR_t));
1546 //reduce the list size by 1
1547 (*size)--;
1548}
1549
1550void sapPrintACL(v_MACADDR_t *macList, v_U8_t size)
1551{
1552 int i;
Arif Hussain24bafea2013-11-15 15:10:03 -08001553 v_BYTE_t *macArray;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001554 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"print acl entered");
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301555
1556 if ((NULL == macList) || (size == 0) || (size >= MAX_ACL_MAC_ADDRESS))
1557 {
1558 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1559 "In %s, either buffer is NULL or size %d is incorrect."
1560 , __func__, size);
1561 return;
1562 }
1563
Jeff Johnson295189b2012-06-20 16:38:30 -07001564 for (i=0; i<size; i++)
1565 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001566 macArray = (macList+i)->bytes;
Jeff Johnson295189b2012-06-20 16:38:30 -07001567 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussain24bafea2013-11-15 15:10:03 -08001568 "** ACL entry %i - "MAC_ADDRESS_STR, i,
1569 MAC_ADDR_ARRAY(macArray));
Jeff Johnson295189b2012-06-20 16:38:30 -07001570 }
1571 return;
1572}
1573
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301574/*==========================================================================
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301575 FUNCTION sapGetStaId
1576
1577 DESCRIPTION
1578 Get the STA ID from Mac address.
1579
1580 DEPENDENCIES
1581 NA.
1582
1583 PARAMETERS
1584
1585 IN
1586 sapContext : Sap Context value
1587 staId : STA ID
1588 pCsrRoamInfo : Pointer to CSR info
1589
1590 RETURN VALUE
1591
1592 SIDE EFFECTS
1593============================================================================*/
1594
1595VOS_STATUS sapGetStaId(ptSapContext sapContext, v_U8_t *staId,
1596 tCsrRoamInfo *pCsrRoamInfo)
1597{
1598 v_U8_t i;
1599
1600 for (i = 0; i < WLAN_MAX_STA_COUNT; i++)
1601 {
1602 if (vos_mem_compare(&sapContext->aStaInfo[i].macAddrSTA,
1603 pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t))
1604 && sapContext->aStaInfo[i].isUsed)
1605 {
1606 *staId = i;
1607 return VOS_STATUS_SUCCESS;
1608 }
1609 }
1610 return VOS_STATUS_E_FAILURE;
1611}
1612
1613/*==========================================================================
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301614 FUNCTION sapAddHT40IntolerantSta
1615
1616 DESCRIPTION
1617 Add HT40 Intolerant STA & Move SAP from HT40 to HT20
1618
1619 DEPENDENCIES
1620 NA.
1621
1622 PARAMETERS
1623
1624 IN
1625 sapContext : Sap Context value
1626 pCsrRoamInfo : Pointer to CSR info
1627
1628 RETURN VALUE
1629
1630 SIDE EFFECTS
1631============================================================================*/
1632
1633#ifdef WLAN_FEATURE_AP_HT40_24G
1634void sapAddHT40IntolerantSta(ptSapContext sapContext,
1635 tCsrRoamInfo *pCsrRoamInfo)
1636{
1637
1638 tHalHandle hHal;
1639 v_U8_t cbMode;
1640 tANI_U8 staId;
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301641 eHalStatus halStatus;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301642 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301643
1644 /* tHalHandle */
1645 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1646
1647 if (NULL == hHal)
1648 {
1649 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1650 FL("In invalid hHal"));
1651 return;
1652 }
1653
1654 staId = pCsrRoamInfo->staId;
1655
1656 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1657 FL("Add HT40 MHz Intolerant STA :"
1658 MAC_ADDRESS_STR " STA ID: %d"),
1659 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1660 staId);
1661
1662 // Get Channel Bonding Mode
1663 cbMode = sme_GetChannelBondingMode24G(hHal);
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301664
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301665 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301666 FL("Current Channel Bonding Mode: %d "
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301667 "HT40IntolerantSet: %d"),
1668 cbMode, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1669
1670 if(sapContext->aStaInfo[staId].isHT40IntolerantSet)
1671 {
1672 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1673 FL("HT40Intolerant is Already Set: %d"),
1674 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1675 return;
1676 }
1677
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301678 spin_lock_bh(&sapContext->staInfo_lock);
1679
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301680 sapContext->aStaInfo[staId].isHT40IntolerantSet = 1;
1681 sapContext->numHT40IntoSta++;
1682
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301683 spin_unlock_bh(&sapContext->staInfo_lock);
1684
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301685 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1686 FL("Total No of HT40 Intolerant STA: %d"
1687 " STA ID: %d HT40IntolerantSet: %d"),
1688 sapContext->numHT40IntoSta,
1689 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301690
1691 /* Stop HT20/40 Timer */
1692 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1693 {
1694 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1695 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1696 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1697 FL("Failed to Stop HT20/40 timer"));
1698 }
1699
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301700 if(cbMode)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1703 FL("Move SAP from HT40 to HT20"));
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301704
1705 halStatus = sme_SetHT2040Mode(hHal, sapContext->sessionId,
1706 PHY_SINGLE_CHANNEL_CENTERED);
1707
1708 if (halStatus == eHAL_STATUS_FAILURE)
1709 {
1710 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1711 FL("Failed to change HT20/40 mode"));
1712 return;
1713 }
1714
1715 /* Disable Channel Bonding for 2.4GHz */
1716 sme_UpdateChannelBondingMode24G(hHal,
1717 PHY_SINGLE_CHANNEL_CENTERED);
1718
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301719 }
1720 else
1721 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301722 FL("SAP is Already in HT20"));
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301723}
1724
1725/*==========================================================================
1726 FUNCTION sapRemoveHT40IntolerantSta
1727
1728 DESCRIPTION
1729 Remove HT40 Intolerant STA & Move SAP from HT40 to HT20
1730
1731 DEPENDENCIES
1732 NA.
1733
1734 PARAMETERS
1735
1736 IN
1737 sapContext : Sap Context value
1738 pCsrRoamInfo : Pointer to CSR info
1739
1740 RETURN VALUE
1741
1742 SIDE EFFECTS
1743============================================================================*/
1744
1745void sapRemoveHT40IntolerantSta(ptSapContext sapContext,
1746 tCsrRoamInfo *pCsrRoamInfo)
1747{
1748 tANI_U8 staId;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301749 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
1750 unsigned int delay;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301751
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301752 vosStatus = sapGetStaId(sapContext, &staId, pCsrRoamInfo);
1753
1754 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1755 {
1756 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1757 FL("ERROR: SAP Failed to find sta id!!"));
1758 return;
1759 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301760
1761 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1762 FL("Remove HT40 MHz Intolerant STA :"
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301763 MAC_ADDRESS_STR " STA ID: %d"
1764 " HT40IntolerantSet:%d"),
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301765 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1766 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1767
1768 if(!sapContext->aStaInfo[staId].isHT40IntolerantSet)
1769 {
1770 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1771 FL("HT40Intolerant is not Set: %d"),
1772 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1773 return;
1774 }
1775
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301776 spin_lock_bh(&sapContext->staInfo_lock);
1777 sapContext->aStaInfo[staId].isHT40IntolerantSet = 0;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301778
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301779 if (sapContext->numHT40IntoSta > 0)
1780 sapContext->numHT40IntoSta--;
1781
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301782 spin_unlock_bh(&sapContext->staInfo_lock);
1783
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301784 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1785 FL("Total No of HT40 Intolerant STA: %d"
1786 " STA ID: %d HT40IntolerantSet: %d"),
1787 sapContext->numHT40IntoSta,
1788 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1789
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +05301790 if ((!sapCheckHT40SecondaryIsNotAllowed(sapContext))
1791 && (!sapContext->numHT40IntoSta))
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301792 {
1793 /* Stop Previous Running HT20/40 Timer & Start timer
1794 with (OBSS TransitionDelayFactor * obss interval)
1795 delay after time out move AP from HT20 -> HT40
1796 mode
1797 */
1798 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1799 {
1800 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1801 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1802 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1803 FL("Failed to Stop HT20/40 timer"));
1804 }
1805
1806 delay =
1807 (sapContext->ObssScanInterval * sapContext->ObssTransitionDelayFactor);
1808
1809 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1810 FL("Start HT20/40 itransition"
1811 " timer (%d sec)"), delay);
1812
1813 vosStatus = vos_timer_start( &sapContext->sap_HT2040_timer,
1814 (delay * 1000));
1815
1816 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1817 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1818 FL("Failed to Start HT20/40 timer"));
1819 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301820 return;
1821}
1822#endif
1823
Jeff Johnson295189b2012-06-20 16:38:30 -07001824VOS_STATUS
1825sapIsPeerMacAllowed(ptSapContext sapContext, v_U8_t *peerMac)
1826{
1827 if (eSAP_ALLOW_ALL == sapContext->eSapMacAddrAclMode)
1828 return VOS_STATUS_SUCCESS;
1829
1830 if (sapSearchMacList(sapContext->acceptMacList, sapContext->nAcceptMac, peerMac, NULL))
1831 return VOS_STATUS_SUCCESS;
1832
1833 if (sapSearchMacList(sapContext->denyMacList, sapContext->nDenyMac, peerMac, NULL))
1834 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001835 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1836 "In %s, Peer "MAC_ADDRESS_STR" in deny list",
1837 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001838 return VOS_STATUS_E_FAILURE;
1839 }
1840
1841 // A new station CAN associate, unless in deny list. Less stringent mode
1842 if (eSAP_ACCEPT_UNLESS_DENIED == sapContext->eSapMacAddrAclMode)
1843 return VOS_STATUS_SUCCESS;
1844
1845 // A new station CANNOT associate, unless in accept list. More stringent mode
1846 if (eSAP_DENY_UNLESS_ACCEPTED == sapContext->eSapMacAddrAclMode)
1847 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001848 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1849 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_DENY_UNLESS_ACCEPTED",
1850 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 return VOS_STATUS_E_FAILURE;
1852 }
1853
1854 /* The new STA is neither in accept list nor in deny list. In this case, deny the association
1855 * but send a wifi event notification indicating the mac address being denied
1856 */
1857 if (eSAP_SUPPORT_ACCEPT_AND_DENY == sapContext->eSapMacAddrAclMode)
1858 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001859 sapSignalHDDevent(sapContext, NULL, eSAP_UNKNOWN_STA_JOIN, (v_PVOID_t)peerMac);
Arif Hussain24bafea2013-11-15 15:10:03 -08001860 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1861 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_SUPPORT_ACCEPT_AND_DENY",
1862 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001863 return VOS_STATUS_E_FAILURE;
1864 }
1865 return VOS_STATUS_SUCCESS;
1866}
1867
1868#ifdef SOFTAP_CHANNEL_RANGE
1869static VOS_STATUS sapGetChannelList(ptSapContext sapContext,
1870 v_U8_t **channelList, v_U8_t *numberOfChannels)
1871{
1872 v_U32_t startChannelNum;
1873 v_U32_t endChannelNum;
1874 v_U32_t operatingBand;
1875 v_U8_t loopCount;
1876 v_U8_t *list;
1877 v_U8_t channelCount;
1878 v_U8_t bandStartChannel;
1879 v_U8_t bandEndChannel ;
1880 v_U32_t enableLTECoex;
1881 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
Abhishek Singhb51853c2014-03-13 18:26:41 +05301882#ifdef FEATURE_WLAN_CH_AVOID
1883 v_U8_t i;
1884#endif
1885
Jeff Johnson295189b2012-06-20 16:38:30 -07001886
1887 if (NULL == hHal)
1888 {
1889 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1890 "Invalid HAL pointer from pvosGCtx on sapGetChannelList");
1891 *numberOfChannels = 0;
1892 *channelList = NULL;
1893 return VOS_STATUS_E_FAULT;
1894 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001895
Peng Xu2446a892014-09-05 17:21:18 +05301896 if ( eCSR_BAND_ALL == sapContext->scanBandPreference)
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 {
Peng Xu2446a892014-09-05 17:21:18 +05301898
1899 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &startChannelNum);
1900 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum);
1901 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
1902
1903 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1904 "%s:sapGetChannelList: startChannel %d,EndChannel %d,Operatingband:%d",
1905 __func__,startChannelNum,endChannelNum,operatingBand);
1906
1907 switch(operatingBand)
1908 {
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05301909 case eSAP_RF_SUBBAND_2_4_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05301910 bandStartChannel = RF_CHAN_1;
1911 bandEndChannel = RF_CHAN_14;
1912 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001913
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05301914 case eSAP_RF_SUBBAND_5_LOW_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05301915 bandStartChannel = RF_CHAN_36;
1916 bandEndChannel = RF_CHAN_64;
1917 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001918
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05301919 case eSAP_RF_SUBBAND_5_MID_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05301920 bandStartChannel = RF_CHAN_100;
1921 bandEndChannel = RF_CHAN_140;
1922 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001923
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05301924 case eSAP_RF_SUBBAND_5_HIGH_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05301925 bandStartChannel = RF_CHAN_149;
1926 bandEndChannel = RF_CHAN_165;
1927 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001928
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05301929 case eSAP_RF_SUBBAND_5_ALL_GHZ:
1930 bandStartChannel = RF_CHAN_36;
1931 bandEndChannel = RF_CHAN_165;
1932 break;
1933
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 default:
Peng Xu2446a892014-09-05 17:21:18 +05301935 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1936 "sapGetChannelList:OperatingBand not valid ");
1937 /* assume 2.4 GHz */
1938 bandStartChannel = RF_CHAN_1;
1939 bandEndChannel = RF_CHAN_14;
1940 break;
1941 }
1942 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1943 "%s: expanded startChannel %d,EndChannel %d,Operatingband:%d",
1944 __func__,startChannelNum,endChannelNum,operatingBand);
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 }
Peng Xu2446a892014-09-05 17:21:18 +05301946 else
1947 {
1948 if ( sapContext->allBandScanned == eSAP_FALSE )
1949 {
1950 //first band scan
1951 sapContext->currentPreferredBand = sapContext->scanBandPreference;
1952 }
1953 else
1954 {
1955 //scan next band
1956 if ( eCSR_BAND_24 == sapContext->scanBandPreference )
1957 sapContext->currentPreferredBand = eCSR_BAND_5G;
1958 else
1959 sapContext->currentPreferredBand = eCSR_BAND_24;
1960 }
1961 switch(sapContext->currentPreferredBand)
1962 {
1963 case eCSR_BAND_24:
1964 bandStartChannel = RF_CHAN_1;
1965 bandEndChannel = RF_CHAN_14;
1966 startChannelNum = 1;
1967 endChannelNum = 14;
1968 break;
1969
1970 case eCSR_BAND_5G:
1971 bandStartChannel = RF_CHAN_36;
1972 bandEndChannel = RF_CHAN_165;
1973 startChannelNum = 36;
1974 endChannelNum = 165;
1975 break;
1976
1977 default:
1978 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1979 "sapGetChannelList:bandPreference not valid ");
1980 /* assume 2.4 GHz */
1981 bandStartChannel = RF_CHAN_1;
1982 bandEndChannel = RF_CHAN_14;
1983 startChannelNum = 1;
1984 endChannelNum = 14;
1985 break;
1986 }
1987 }
1988
1989 ccmCfgGetInt(hHal, WNI_CFG_ENABLE_LTE_COEX, &enableLTECoex);
Jeff Johnson295189b2012-06-20 16:38:30 -07001990 /*Check if LTE coex is enabled and 2.4GHz is selected*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001991 if (enableLTECoex && (bandStartChannel == RF_CHAN_1)
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 && (bandEndChannel == RF_CHAN_14))
1993 {
1994 /*Set 2.4GHz upper limit to channel 9 for LTE COEX*/
1995 bandEndChannel = RF_CHAN_9;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 /* Allocate the max number of channel supported */
1998 list = (v_U8_t *)vos_mem_malloc(NUM_5GHZ_CHANNELS);
1999 if (NULL == list)
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002002 "%s: Unable to allocate channel list", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 *numberOfChannels = 0;
2004 *channelList = NULL;
2005 return VOS_STATUS_E_RESOURCES;
2006 }
2007
2008 /*Search for the Active channels in the given range */
2009 channelCount = 0;
2010 for( loopCount = bandStartChannel; loopCount <= bandEndChannel; loopCount++ )
2011 {
2012 if((startChannelNum <= rfChannels[loopCount].channelNum)&&
2013 (endChannelNum >= rfChannels[loopCount].channelNum ))
2014 {
2015 if( regChannels[loopCount].enabled )
2016 {
Abhishek Singhb51853c2014-03-13 18:26:41 +05302017#ifdef FEATURE_WLAN_CH_AVOID
2018 for( i = 0; i < NUM_20MHZ_RF_CHANNELS; i++ )
2019 {
2020 if( (safeChannels[i].channelNumber ==
2021 rfChannels[loopCount].channelNum) )
2022 {
2023 /* Check if channel is safe */
2024 if(VOS_TRUE == safeChannels[i].isSafe)
2025 {
2026#endif
2027 list[channelCount] =
2028 rfChannels[loopCount].channelNum;
2029 channelCount++;
2030#ifdef FEATURE_WLAN_CH_AVOID
2031 }
2032 break;
2033 }
2034 }
2035#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 }
2037 }
2038 }
2039 if (0 == channelCount)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002040 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2042 "sapGetChannelList:No active channels present in the given range for the current region");
2043 /*LTE COEX: channel range outside the restricted 2.4GHz band limits*/
2044 if (enableLTECoex && (startChannelNum > bandEndChannel))
2045 {
2046 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
2047 "sapGetChannelList:SAP cannot be started as LTE COEX restricted 2.4GHz limits");
2048 }
2049 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002050
Jeff Johnson295189b2012-06-20 16:38:30 -07002051 /* return the channel list and number of channels to scan*/
2052 *numberOfChannels = channelCount;
2053 if(channelCount != 0)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002054 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002055 *channelList = list;
2056 }
2057 else
2058 {
2059 *channelList = NULL;
2060 vos_mem_free(list);
2061 }
Peng Xu2446a892014-09-05 17:21:18 +05302062
2063 for (loopCount = 0; loopCount <channelCount; loopCount ++ )
2064 {
2065 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG,
2066 "%s: channel number: %d",
2067 __func__,list[loopCount]);
2068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 return VOS_STATUS_SUCCESS;
2070}
2071#endif
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05302072
2073#ifdef WLAN_FEATURE_AP_HT40_24G
2074static VOS_STATUS sapGetChannelListForObss(tHalHandle halHandle,
2075 ptSapContext psapCtx, v_U8_t **channelList,
2076 v_U8_t *numberOfChannels)
2077{
2078 v_U32_t startChannelNum;
2079 v_U32_t endChannelNum;
2080 v_U8_t loopCount;
2081 v_U8_t channelCount;
2082 v_U8_t *list;
2083
2084 if (eHAL_STATUS_SUCCESS != sapGet24GOBSSAffectedChannel(halHandle, psapCtx))
2085 {
2086 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2087 "%s:Not able to Get Affected Channel Range for Channel : %d",
2088 __func__, psapCtx->channel);
2089 return VOS_STATUS_E_FAILURE;
2090 }
2091
2092 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2093 "%s: 40 MHz affected channel range: [%d,%d] MHz",
2094 __func__, psapCtx->affected_start, psapCtx->affected_end);
2095
2096 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2097 "%s: SAP Primary & Secondary Channel : [%d,%d] MHz",
2098 __func__, psapCtx->channel, psapCtx->sap_sec_chan);
2099
2100 /* Allocate the max number of channel supported */
2101 list = (v_U8_t *)vos_mem_malloc(RF_CHAN_14 + 1);
2102 if (NULL == list)
2103 {
2104 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2105 "%s: Unable to allocate channel list", __func__);
2106 *numberOfChannels = 0;
2107 *channelList = NULL;
2108 return VOS_STATUS_E_RESOURCES;
2109 }
2110
2111 /*Search for the Active channels in the given range */
2112 channelCount = 0;
2113 startChannelNum = RF_CHAN_1;
2114 endChannelNum = RF_CHAN_14;
2115 for( loopCount = startChannelNum; loopCount <= endChannelNum; loopCount++ )
2116 {
2117 if ((rfChannels[loopCount].channelNum >= psapCtx->affected_start)
2118 && (rfChannels[loopCount].channelNum <= psapCtx->affected_end))
2119 {
2120 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2121 "%s: Channel Number: %d State : %d", __func__,
2122 rfChannels[loopCount].channelNum,
2123 vos_nv_getChannelEnabledState(rfChannels[loopCount].channelNum));
2124 list[channelCount] = rfChannels[loopCount].channelNum;
2125 channelCount++;
2126 }
2127 }
2128 /* return the channel list and number of channels to scan*/
2129 *numberOfChannels = channelCount;
2130 if(channelCount != 0)
2131 {
2132 *channelList = list;
2133 }
2134 else
2135 {
2136 *channelList = NULL;
2137 vos_mem_free(list);
2138 }
2139 return VOS_STATUS_SUCCESS;
2140}
2141#endif