blob: 98907ed8e6bb44f94831c2f90d2496feef5f1b19 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Abhishek Singh02605092017-10-25 14:06:12 +05302 * Copyright (c) 2012-2013, 2016-2017 The Linux Foundation. All rights reserved.
Kiet Lam0fb93dd2014-02-19 00:32:59 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet 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;
Masti, Narayanraddi6b61cf52016-04-19 19:34:10 +0530263 uint32_t operating_band = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700264
265 hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME, sapContext->pvosGCtx);
266 if (NULL == hHal)
267 {
268 /* we have a serious problem */
269 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700270 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700271 return VOS_STATUS_E_FAULT;
272 }
273
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530274 sapPhyMode =
275 sapConvertSapPhyModeToCsrPhyMode(sapContext->csrRoamProfile.phyMode);
276
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 /*If STA-AP concurrency is enabled take the concurrent connected channel first. In other cases wpa_supplicant should take care */
278 if (vos_get_concurrency_mode() == VOS_STA_SAP)
279 {
280 channel = sme_GetConcurrentOperationChannel(hHal);
281
282 if (channel)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700283 { /*if a valid channel is returned then use concurrent channel.
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 Else take whatever comes from configuartion*/
285 sapContext->channel = channel;
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530286#ifdef WLAN_FEATURE_AP_HT40_24G
287 if (sapContext->channel > SIR_11B_CHANNEL_END)
288#endif
Abhishek Singh02b823e2017-10-30 17:53:20 +0530289 sme_SelectCBMode(hHal, sapPhyMode,
290 sapContext->channel, eHT_MAX_CHANNEL_WIDTH);
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
292 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700293
294 if (sapContext->channel == AUTO_CHANNEL_SELECT)
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 {
296 vos_mem_zero(&scanRequest, sizeof(scanRequest));
297
298 /* Set scanType to Passive scan */
299 scanRequest.scanType = eSIR_PASSIVE_SCAN;
300
301 /* Set min and max channel time to zero */
302 scanRequest.minChnTime = 0;
303 scanRequest.maxChnTime = 0;
304
305 /* Set BSSType to default type */
306 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700307
308#ifndef SOFTAP_CHANNEL_RANGE
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 /*Scan all the channels */
310 scanRequest.ChannelInfo.numOfChannels = 0;
311
312 scanRequest.ChannelInfo.ChannelList = NULL;
313
314 scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN;//eCSR_SCAN_REQUEST_11D_SCAN;
315
316#else
317
318 sapGetChannelList(sapContext, &channelList, &numOfChannels);
319
320 /*Scan the channels in the list*/
321 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700322
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 scanRequest.ChannelInfo.ChannelList = channelList;
324
325 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
326
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530327 sapContext->numofChannel = numOfChannels;
328
Jeff Johnson295189b2012-06-20 16:38:30 -0700329 sapContext->channelList = channelList;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700330
Jeff Johnson295189b2012-06-20 16:38:30 -0700331#endif
332 /* Set requestType to Full scan */
333
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530334 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
335 FL("Auto Channel Selection Scan"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700336
Jeff Johnson43971f52012-07-17 12:26:56 -0700337 halStatus = sme_ScanRequest(hHal,
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 0,//Not used in csrScanRequest
339 &scanRequest,
340 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
341 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
342 sapContext);//void * pContext scanRequestID filled up
Jeff Johnson43971f52012-07-17 12:26:56 -0700343 if (eHAL_STATUS_SUCCESS != halStatus)
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530345 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
346 FL("Auto Channel Selection Scan fail %d!!!"), halStatus);
347 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
348 FL("SoftAP Configuring for default channel, Ch= %d"),
349 sapContext->channel);
Masti, Narayanraddi6b61cf52016-04-19 19:34:10 +0530350 /*
351 * In case of error, select channel based on band
352 * configured in .ini
353 */
354 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND,
355 &operating_band);
356 if (operating_band == eSAP_RF_SUBBAND_5_LOW_GHZ ||
357 operating_band == eSAP_RF_SUBBAND_5_MID_GHZ ||
358 operating_band == eSAP_RF_SUBBAND_5_HIGH_GHZ)
359 {
360 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
361 FL("Default channel selection from band %d"),
362 operating_band);
363
364 (operating_band == eSAP_RF_SUBBAND_5_LOW_GHZ) ?
365 (sapContext->channel = SAP_DEFAULT_LOW_5GHZ_CHANNEL) :
366 (operating_band == eSAP_RF_SUBBAND_5_MID_GHZ) ?
367 (sapContext->channel = SAP_DEFAULT_MID_5GHZ_CHANNEL) :
368 (operating_band == eSAP_RF_SUBBAND_5_HIGH_GHZ) ?
369 (sapContext->channel =
370 SAP_DEFAULT_HIGH_5GHZ_CHANNEL) : 0;
371
372 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
373 FL("channel selected to start bss %d"),
374 sapContext->channel);
375 }
376 else
377 {
378 sapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
379 }
Hanumantha Reddy Pothulad4d6f7c2016-03-30 16:28:45 +0530380
Jeff Johnson295189b2012-06-20 16:38:30 -0700381#ifdef SOFTAP_CHANNEL_RANGE
382 if(sapContext->channelList != NULL)
383 {
Hanumantha Reddy Pothulad4d6f7c2016-03-30 16:28:45 +0530384 sapContext->channel = sapContext->channelList[0];
385 vos_mem_free(sapContext->channelList);
386 sapContext->channelList = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
388#endif
389 /* Fill in the event structure */
390 sapEventInit(sapEvent);
391 /* Handle event */
392 vosStatus = sapFsm(sapContext, sapEvent);
393 }
394 else
395 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530396 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
397 FL("Auto Channel Selection Scan Success"
398 " scanRequestID=%d, Ch= %d"),
399 scanRequestID, sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 }
401
402 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700403 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530405 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
406 FL("For configured channel, Ch= %d"), sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700407
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530408#ifdef WLAN_FEATURE_AP_HT40_24G
409 if (vos_get_concurrency_mode() != VOS_STA_SAP)
410 {
411 if ((sapContext->channel <= SIR_11B_CHANNEL_END)
412 && (sapContext->channel > RF_CHAN_1))
413 {
414 // OBSS Scan for P2P GO/SAP where Auto Channel Selection is Disable
415 vosStatus = sapGetChannelListForObss(hHal, sapContext,
416 &channelList, &numOfChannels);
417 if (VOS_STATUS_SUCCESS == vosStatus && channelList != NULL)
418 {
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +0530419
420 if (sapCheckHT40SecondaryIsNotAllowed(sapContext))
421 {
422 if(channelList != NULL)
423 {
424 vos_mem_free(channelList);
425 channelList = NULL;
426 }
427 goto disable24GChannelBonding;
428 }
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530429 vos_mem_zero(&scanRequest, sizeof(scanRequest));
430
431 /* Set scanType to Passive scan */
432 scanRequest.scanType = eSIR_PASSIVE_SCAN;
433
434 /* Set min and max channel time to zero */
435 scanRequest.minChnTime = CSR_ACTIVE_MIN_CHANNEL_TIME;
436 scanRequest.maxChnTime = CSR_ACTIVE_MAX_CHANNEL_TIME;
437
438 /* Set BSSType to default type */
439 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
440
441 /*Scan the channels in the list*/
442 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
443 scanRequest.ChannelInfo.ChannelList = channelList;
444 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
445 sapContext->channelList = channelList;
446
447 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
448 FL("OBSS Scan for SAP/P2P GO: Ch= %d"),
449 sapContext->channel);
450
451 halStatus = sme_ScanRequest(hHal,
452 0,//Not used in csrScanRequest
453 &scanRequest,
454 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
455 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
456 sapContext);//void * pContext scanRequestID filled up
457
458 if (eHAL_STATUS_SUCCESS != halStatus)
459 {
460 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
461 FL("OBSS ScanRequest Fail %d!!!"),
462 halStatus);
463 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
464 FL("SoftAP Configuring for default channel, Ch= %d"),
465 sapContext->channel);
466
467 if(sapContext->channelList != NULL)
468 {
469 vos_mem_free(sapContext->channelList);
470 sapContext->channelList = NULL;
471 }
472 goto disable24GChannelBonding;
473 }
474 else
475 {
476 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
477 FL("OBSS ScanRequest Success, scanRequestID=%d"
478 " Ch= %d"), scanRequestID, sapContext->channel);
479 goto startgo;
480 }
481 }
482 else
483 {
484 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
485 FL("Failed to Prepare the OBSS Scan channel list"));
486 goto disable24GChannelBonding;
487 }
488disable24GChannelBonding:
489 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
490 FL("Disable Channel Bonding"));
491 /* Disable Channel Bonding for 2.4GHz */
492 sme_UpdateChannelBondingMode24G(hHal,
493 PHY_SINGLE_CHANNEL_CENTERED);
494 }
495 else
496 {
497 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
498 FL("No concurrency & Channel: %d"),
499 sapContext->channel);
500 goto selectChannelBonding;
501 }
502 }
503 else
504 {
505 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
506 FL("With concurrency & Channel: %d"),
507 sapContext->channel);
508 goto selectChannelBonding;
509 }
510#endif
511
512#ifdef WLAN_FEATURE_AP_HT40_24G
513selectChannelBonding:
514 if (sapContext->channel > SIR_11B_CHANNEL_END)
515#endif
Abhishek Singh02b823e2017-10-30 17:53:20 +0530516 sme_SelectCBMode(hHal, sapPhyMode,
517 sapContext->channel, eHT_MAX_CHANNEL_WIDTH);
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530518
519 /* Fill in the event structure */
520 // Eventhough scan was not done, means a user set channel was chosen
521 sapEventInit(sapEvent);
522 /* Handle event */
523 vosStatus = sapFsm(sapContext, sapEvent);
524 }
525#ifdef WLAN_FEATURE_AP_HT40_24G
526startgo:
527#endif
528 /* If scan failed, get default channel and advance state
529 * machine as success with default channel. Have to wait
530 * for the call back to be called to get the channel cannot
531 * advance state machine here as said above */
532
533 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
534 FL("Before exiting sapGotoChannelSel channel=%d"),
535 sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700536
537 return VOS_STATUS_SUCCESS;
538}// sapGotoChannelSel
539
540/*==========================================================================
541 FUNCTION sapGotoStarting
542
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700543 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700544 Function for initiating start bss request for SME
545
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700546 DEPENDENCIES
547 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700548
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700549 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700550
551 IN
552 sapContext : Sap Context value
553 sapEvent : State machine event
554 bssType : Type of bss to start, INRA AP
555 status : Return the SAP status here
556
557 RETURN VALUE
558 The VOS_STATUS code associated with performing the operation
559
560 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700561
562 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700563============================================================================*/
564VOS_STATUS
565sapGotoStarting
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700566(
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 ptSapContext sapContext,
568 ptWLAN_SAPEvent sapEvent,
569 eCsrRoamBssType bssType
570)
571{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700572 /* tHalHandle */
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
574 eHalStatus halStatus;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700575
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700577 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 -0700578 sapContext->key_type = 0x05;
579 sapContext->key_length = 32;
580 vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700581
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 if (NULL == hHal)
584 {
585 /* we have a serious problem */
586 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700587 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 return VOS_STATUS_E_FAULT;
589 }
590
591 //TODO: What shall we do if failure????
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700592 halStatus = pmcRequestFullPower( hHal,
593 WLANSAP_pmcFullPwrReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 sapContext,
595 eSME_REASON_OTHER);
596
597 /* Open SME Session for Softap */
598 halStatus = sme_OpenSession(hHal,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700599 &WLANSAP_RoamCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 sapContext,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700601 sapContext->self_mac_addr,
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 &sapContext->sessionId);
603
604 if(eHAL_STATUS_SUCCESS != halStatus )
605 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700606 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 -0700607 return VOS_STATUS_E_FAILURE;
608 }
609
610 return VOS_STATUS_SUCCESS;
611}// sapGotoStarting
612
613/*==========================================================================
614 FUNCTION sapGotoDisconnecting
615
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700616 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 Processing of SAP FSM Disconnecting state
618
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700619 DEPENDENCIES
620 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700621
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700622 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700623
624 IN
625 sapContext : Sap Context value
626 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700627
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 RETURN VALUE
629 The VOS_STATUS code associated with performing the operation
630
631 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700632
633 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700634============================================================================*/
635VOS_STATUS
636sapGotoDisconnecting
637(
638 ptSapContext sapContext
639)
640{
641 eHalStatus halStatus;
642 tHalHandle hHal;
643
644 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
645 if (NULL == hHal)
646 {
647 /* we have a serious problem */
648 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700649 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 return VOS_STATUS_E_FAULT;
651 }
652
653 sapFreeRoamProfile(&sapContext->csrRoamProfile);
654 halStatus = sme_RoamStopBss(hHal, sapContext->sessionId);
655 if(eHAL_STATUS_SUCCESS != halStatus )
656 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700657 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 -0700658 return VOS_STATUS_E_FAILURE;
659 }
660
661 return VOS_STATUS_SUCCESS;
662}
663
664static eHalStatus sapRoamSessionCloseCallback(void *pContext)
665{
666 ptSapContext sapContext = (ptSapContext)pContext;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700667 return sapSignalHDDevent(sapContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 eSAP_STOP_BSS_EVENT, (v_PVOID_t) eSAP_STATUS_SUCCESS);
669}
670
671/*==========================================================================
672 FUNCTION sapGotoDisconnected
673
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700674 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 Function for setting the SAP FSM to Disconnection state
676
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700677 DEPENDENCIES
678 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700679
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700680 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700681
682 IN
683 sapContext : Sap Context value
684 sapEvent : State machine event
685 status : Return the SAP status here
686
687 RETURN VALUE
688 The VOS_STATUS code associated with performing the operation
689
690 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700691
692 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700693============================================================================*/
694VOS_STATUS
695sapGotoDisconnected
696(
697 ptSapContext sapContext
698)
699{
700 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
701 tWLAN_SAPEvent sapEvent;
702 // Processing has to be coded
703 // Clean up stations from TL etc as AP BSS is shut down then set event
704 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;// hardcoded
705 sapEvent.params = 0;
706 sapEvent.u1 = 0;
707 sapEvent.u2 = 0;
708 /* Handle event */
709 vosStatus = sapFsm(sapContext, &sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700710
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 return vosStatus;
712}
713
714/*==========================================================================
715 FUNCTION sapSignalHDDevent
716
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700717 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 Function for HDD to send the event notification using callback
719
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700720 DEPENDENCIES
721 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700722
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700723 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700724
725 IN
726 sapContext : Sap Context value
727 pCsrRoamInfo : Pointer to CSR roam information
728 sapHddevent : SAP HDD event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700729 context : to pass the element for future support
730
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 RETURN VALUE
732 The VOS_STATUS code associated with performing the operation
733
734 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700735
736 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700737============================================================================*/
738VOS_STATUS
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700739sapSignalHDDevent
740(
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 ptSapContext sapContext, /* sapContext value */
742 tCsrRoamInfo *pCsrRoamInfo,
743 eSapHddEvent sapHddevent,
744 void *context
745)
746{
747 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
748 tSap_Event sapApAppEvent; /* This now encodes ALL event types */
749 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
750
751 /* Format the Start BSS Complete event to return... */
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530752 if (NULL == sapContext->pfnSapEventCallback)
753 {
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530754 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
755 FL("HDD Event callaback invalid"));
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530756 return VOS_STATUS_E_INVAL;
757 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700758
759 switch (sapHddevent)
760 {
761 case eSAP_STA_ASSOC_IND:
Madan Mohan Koyyalamudi8bdd3112012-09-24 13:55:14 -0700762 // TODO - Indicate the assoc request indication to OS
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_IND;
764
765 vos_mem_copy( &sapApAppEvent.sapevt.sapAssocIndication.staMac, pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
766 sapApAppEvent.sapevt.sapAssocIndication.staId = pCsrRoamInfo->staId;
767 sapApAppEvent.sapevt.sapAssocIndication.status = 0;
768 // Required for indicating the frames to upper layer
769 sapApAppEvent.sapevt.sapAssocIndication.beaconLength = pCsrRoamInfo->beaconLength;
770 sapApAppEvent.sapevt.sapAssocIndication.beaconPtr = pCsrRoamInfo->beaconPtr;
771 sapApAppEvent.sapevt.sapAssocIndication.assocReqLength = pCsrRoamInfo->assocReqLength;
772 sapApAppEvent.sapevt.sapAssocIndication.assocReqPtr = pCsrRoamInfo->assocReqPtr;
773 sapApAppEvent.sapevt.sapAssocIndication.fWmmEnabled = pCsrRoamInfo->wmmEnabledSta;
774 if ( pCsrRoamInfo->u.pConnectedProfile != NULL )
775 {
776 sapApAppEvent.sapevt.sapAssocIndication.negotiatedAuthType = pCsrRoamInfo->u.pConnectedProfile->AuthType;
777 sapApAppEvent.sapevt.sapAssocIndication.negotiatedUCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->EncryptionType;
778 sapApAppEvent.sapevt.sapAssocIndication.negotiatedMCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->mcEncryptionType;
779 sapApAppEvent.sapevt.sapAssocIndication.fAuthRequired = pCsrRoamInfo->fAuthRequired;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 break;
782 case eSAP_START_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530783 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
784 FL("SAP event callback event = %s"),
785 "eSAP_START_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 sapApAppEvent.sapHddEventCode = eSAP_START_BSS_EVENT;
787 sapApAppEvent.sapevt.sapStartBssCompleteEvent.status = (eSapStatus )context;
788 if(pCsrRoamInfo != NULL ){
789 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = pCsrRoamInfo->staId;
790 }
791 else
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700792 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700793 sapApAppEvent.sapevt.sapStartBssCompleteEvent.operatingChannel = (v_U8_t)sapContext->channel;
794 break;
795
796 case eSAP_STOP_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530797 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
798 FL("SAP event callback event = %s"),
799 "eSAP_STOP_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 sapApAppEvent.sapHddEventCode = eSAP_STOP_BSS_EVENT;
801 sapApAppEvent.sapevt.sapStopBssCompleteEvent.status = (eSapStatus )context;
802 break;
803
804 case eSAP_STA_ASSOC_EVENT:
805 {
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530806 tSap_StationAssocReassocCompleteEvent *event =
807 &sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent;
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530808 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
809 FL("SAP event callback event = %s"),
810 "eSAP_STA_ASSOC_EVENT");
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530811 vos_mem_zero(event, sizeof(event));
Jeff Johnson295189b2012-06-20 16:38:30 -0700812 if (pCsrRoamInfo->fReassocReq)
813 sapApAppEvent.sapHddEventCode = eSAP_STA_REASSOC_EVENT;
814 else
815 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_EVENT;
816
817 //TODO: Need to fill the SET KEY information and pass to HDD
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530818 vos_mem_copy( &event->staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700819 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530820 event->staId = pCsrRoamInfo->staId ;
821 event->statusCode = pCsrRoamInfo->statusCode;
822 event->iesLen = pCsrRoamInfo->rsnIELen;
823 vos_mem_copy(event->ies, pCsrRoamInfo->prsnIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700824 pCsrRoamInfo->rsnIELen);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700825
826 if(pCsrRoamInfo->addIELen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 {
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530828 v_U8_t len = event->iesLen;
829 event->iesLen += pCsrRoamInfo->addIELen;
830 vos_mem_copy(&event->ies[len], pCsrRoamInfo->paddIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 pCsrRoamInfo->addIELen);
832 }
833
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530834 event->rate_flags = pCsrRoamInfo->maxRateFlags;
Deepthi Gowriae6a1662015-10-12 12:59:37 +0530835
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530836 event->wmmEnabled = pCsrRoamInfo->wmmEnabledSta;
837 event->status = (eSapStatus )context;
838 event->ch_width = pCsrRoamInfo->ch_width;
839 event->chan_info = pCsrRoamInfo->chan_info;
840 event->HTCaps = pCsrRoamInfo->ht_caps;
841 event->VHTCaps = pCsrRoamInfo->vht_caps;
842
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 //TODO: Need to fill sapAuthType
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530844 //event->SapAuthType = pCsrRoamInfo->pProfile->negotiatedAuthType;
Jeff Johnson295189b2012-06-20 16:38:30 -0700845 break;
846 }
847
848 case eSAP_STA_DISASSOC_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530849 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
850 FL("SAP event callback event = %s"),
851 "eSAP_STA_DISASSOC_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 sapApAppEvent.sapHddEventCode = eSAP_STA_DISASSOC_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700853
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 vos_mem_copy( &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700855 pCsrRoamInfo->peerMac, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staId = pCsrRoamInfo->staId;
857 if (pCsrRoamInfo->reasonCode == eCSR_ROAM_RESULT_FORCED)
858 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_USR_INITATED_DISASSOC;
859 else
860 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_MAC_INITATED_DISASSOC;
861
862 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
863 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.status = (eSapStatus )context;
864 break;
865
866 case eSAP_STA_SET_KEY_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530867 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
868 FL("SAP event callback event = %s"),
869 "eSAP_STA_SET_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 sapApAppEvent.sapHddEventCode = eSAP_STA_SET_KEY_EVENT;
871 sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.status = (eSapStatus )context;
872 vos_mem_copy(&sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.peerMacAddr,
873 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
874 break;
875
876 case eSAP_STA_DEL_KEY_EVENT :
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530877 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
878 FL("SAP event callback event = %s"),
879 "eSAP_STA_DEL_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 sapApAppEvent.sapHddEventCode = eSAP_STA_DEL_KEY_EVENT;
881 sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.status = (eSapStatus )context;
882 //TODO: Should we need to send the key information
883 //sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.keyId = ;
884 break;
885
886 case eSAP_STA_MIC_FAILURE_EVENT :
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530887 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
888 FL("SAP event callback event = %s"),
889 "eSAP_STA_MIC_FAILURE_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700890 sapApAppEvent.sapHddEventCode = eSAP_STA_MIC_FAILURE_EVENT;
891 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.srcMacAddr,
892 pCsrRoamInfo->u.pMICFailureInfo->srcMacAddr,
893 sizeof(tSirMacAddr));
894 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.staMac,
895 pCsrRoamInfo->u.pMICFailureInfo->taMacAddr,
896 sizeof(tSirMacAddr));
897 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.dstMacAddr,
898 pCsrRoamInfo->u.pMICFailureInfo->dstMacAddr,
899 sizeof(tSirMacAddr));
900 sapApAppEvent.sapevt.sapStationMICFailureEvent.multicast = pCsrRoamInfo->u.pMICFailureInfo->multicast;
901 sapApAppEvent.sapevt.sapStationMICFailureEvent.IV1 = pCsrRoamInfo->u.pMICFailureInfo->IV1;
902 sapApAppEvent.sapevt.sapStationMICFailureEvent.keyId = pCsrRoamInfo->u.pMICFailureInfo->keyId;
903 vos_mem_copy( sapApAppEvent.sapevt.sapStationMICFailureEvent.TSC,
904 pCsrRoamInfo->u.pMICFailureInfo->TSC,
905 SIR_CIPHER_SEQ_CTR_SIZE);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700906 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700907
908 case eSAP_ASSOC_STA_CALLBACK_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530909 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
910 FL("SAP event callback event = %s"),
911 "eSAP_ASSOC_STA_CALLBACK_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700913
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 case eSAP_WPS_PBC_PROBE_REQ_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530915 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
916 FL("SAP event callback event = %s"),
917 "eSAP_WPS_PBC_PROBE_REQ_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 sapApAppEvent.sapHddEventCode = eSAP_WPS_PBC_PROBE_REQ_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700919
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 vos_mem_copy( &sapApAppEvent.sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq,
921 pCsrRoamInfo->u.pWPSPBCProbeReq,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700922 sizeof(tSirWPSPBCProbeReq));
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700924 case eSAP_REMAIN_CHAN_READY:
925 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530926 FL("SAP event callback event = %s"),
927 "eSAP_REMAIN_CHAN_READY");
Jeff Johnson295189b2012-06-20 16:38:30 -0700928 sapApAppEvent.sapHddEventCode = eSAP_REMAIN_CHAN_READY;
929 break;
930 case eSAP_SEND_ACTION_CNF:
931 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530932 FL("SAP event callback event = %s"),
933 "eSAP_SEND_ACTION_CNF");
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 sapApAppEvent.sapHddEventCode = eSAP_SEND_ACTION_CNF;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700935 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 break;
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800937
938 case eSAP_DISCONNECT_ALL_P2P_CLIENT:
939 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530940 FL("SAP event callback event = %s"),
941 "eSAP_DISCONNECT_ALL_P2P_CLIENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800942 sapApAppEvent.sapHddEventCode = eSAP_DISCONNECT_ALL_P2P_CLIENT;
943 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
944 break;
945
946 case eSAP_MAC_TRIG_STOP_BSS_EVENT :
947 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530948 FL("SAP event callback event = %s"),
949 "eSAP_MAC_TRIG_STOP_BSS_EVENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800950 sapApAppEvent.sapHddEventCode = eSAP_MAC_TRIG_STOP_BSS_EVENT;
951 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
952 break;
953
Jeff Johnson295189b2012-06-20 16:38:30 -0700954
955 case eSAP_UNKNOWN_STA_JOIN:
956 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530957 FL("SAP event callback event = %s"),
958 "eSAP_UNKNOWN_STA_JOIN");
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 sapApAppEvent.sapHddEventCode = eSAP_UNKNOWN_STA_JOIN;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700960 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapUnknownSTAJoin.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 (v_PVOID_t)context, sizeof(v_MACADDR_t));
962 break;
963
964 case eSAP_MAX_ASSOC_EXCEEDED:
965 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530966 FL("SAP event callback event = %s"),
967 "eSAP_MAX_ASSOC_EXCEEDED");
Jeff Johnson295189b2012-06-20 16:38:30 -0700968 sapApAppEvent.sapHddEventCode = eSAP_MAX_ASSOC_EXCEEDED;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700969 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapMaxAssocExceeded.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 (v_PVOID_t)pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t));
971 break;
Abhishek Singhe8ebb922017-11-01 13:30:26 +0530972 case eSAP_CHANNEL_CHANGED_EVENT:
973 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
974 "In %s, SAP event callback event = %s",
975 __func__, "eSAP_CHANNEL_CHANGE_EVENT");
976 sapApAppEvent.sapHddEventCode = eSAP_CHANNEL_CHANGED_EVENT;
977 sapApAppEvent.sapevt.sap_chan_selected.new_chan =
978 sapContext->channel;
979 break;
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530980 case eSAP_STA_LOSTLINK_DETECTED:
981 {
982 tSap_StationDisassocCompleteEvent* disassoc_comp;
Jeff Johnson295189b2012-06-20 16:38:30 -0700983
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530984 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
985 "In %s SAP event callback event = %s",
986 __func__, "eSAP_STA_LOSTLINK_DETECTED");
987
988 sapApAppEvent.sapHddEventCode = eSAP_STA_LOSTLINK_DETECTED;
989 disassoc_comp =
990 &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent;
991 disassoc_comp->reason = pCsrRoamInfo->reasonCode;
992 disassoc_comp->staId = pCsrRoamInfo->staId;
993 vos_mem_copy(disassoc_comp->staMac.bytes,
994 pCsrRoamInfo->peerMac, VOS_MAC_ADDR_SIZE);
995 break;
996 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700997 default:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530998 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
999 FL("SAP Unknown callback event = %d"),
1000 sapHddevent);
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 break;
1002 }
1003 vosStatus = (*sapContext->pfnSapEventCallback)
1004 (
1005 &sapApAppEvent,
1006 sapContext->pUsrContext//userdataforcallback - hdd opaque handle
1007 );
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001008
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 return vosStatus;
1010
1011} /* sapSignalApAppStartBssEvent */
1012
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301013/**
1014 * wlansap_channel_change_request() -Initiate the channel change req to new
1015 * channel
1016 * @sapContext - sap context on which channel change is required
1017 *
1018 * Return VOS_STATUS
1019 */
1020static VOS_STATUS wlansap_channel_change_request(ptSapContext sapContext)
1021{
1022 tHalHandle hal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1023 VOS_STATUS vos_status = VOS_STATUS_E_FAILURE;
1024
1025 if (!hal) {
1026 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1027 "In %s, Hall is NULL", __func__);
1028 return VOS_STATUS_E_INVAL;
1029 }
1030 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_MED,
1031 FL("sapdfs: Send channel change on sapctx[%pK]"),
1032 sapContext);
1033 sapContext->channel = sapContext->ecsa_info.new_channel;
1034 if (sapContext->csrRoamProfile.ChannelInfo.numOfChannels == 0 ||
1035 sapContext->csrRoamProfile.ChannelInfo.ChannelList == NULL) {
1036 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1037 FL("Invalid channel list"));
1038 return VOS_STATUS_E_FAULT;
1039 }
1040 sapContext->csrRoamProfile.ChannelInfo.ChannelList[0] = sapContext->channel;
1041 vos_status = sme_roam_channel_change_req(hal, sapContext->bssid,
1042 sapContext->ecsa_info.new_channel,
Abhishek Singh02b823e2017-10-30 17:53:20 +05301043 &sapContext->csrRoamProfile,
1044 sapContext->sessionId);
Abhishek Singhe8ebb922017-11-01 13:30:26 +05301045 if (VOS_IS_STATUS_SUCCESS(vos_status))
1046 sapSignalHDDevent(sapContext, NULL, eSAP_CHANNEL_CHANGED_EVENT, NULL);
1047
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301048 return vos_status;
1049}
1050
1051
Jeff Johnson295189b2012-06-20 16:38:30 -07001052/*==========================================================================
1053 FUNCTION sapFsm
1054
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001055 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 SAP State machine entry function
1057
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001058 DEPENDENCIES
1059 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -07001060
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001061 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -07001062
1063 IN
1064 sapContext : Sap Context value
1065 sapEvent : State machine event
1066 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001067
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 RETURN VALUE
1069 The VOS_STATUS code associated with performing the operation
1070
1071 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001072
1073 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -07001074============================================================================*/
1075VOS_STATUS
1076sapFsm
1077(
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001078 ptSapContext sapContext, /* sapContext value */
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 ptWLAN_SAPEvent sapEvent /* State machine event */
1080)
1081{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001082 /* Retrieve the phy link state machine structure
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 * from the sapContext value
1084 */
1085 eSapFsmStates_t stateVar = sapContext->sapsMachine; /*state var that keeps track of state machine*/
1086 tCsrRoamInfo *roamInfo = (tCsrRoamInfo *)(sapEvent->params);
1087 v_U32_t msg = sapEvent->event; /* State machine input event message */
1088 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
1089
1090 switch (stateVar)
1091 {
1092 case eSAP_DISCONNECTED:
1093 if ((msg == eSAP_HDD_START_INFRA_BSS))
1094 {
1095 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1096 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 -07001097 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Jeff Johnson295189b2012-06-20 16:38:30 -07001098
1099 /* There can be one SAP Session for softap */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001100 if (sapContext->isSapSessionOpen == eSAP_TRUE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 {
1102 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001103 "%s:SME Session is already opened\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 return VOS_STATUS_E_EXISTS;
1105 }
1106
1107 sapContext->sessionId = 0xff;
1108
1109 /* Set SAP device role */
1110 sapContext->sapsMachine = eSAP_CH_SELECT;
1111
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301112#ifdef WLAN_FEATURE_AP_HT40_24G
1113 sapSetObssParm(sapContext);
1114#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 /* Perform sme_ScanRequest */
1116 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001117
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1119 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 -07001120 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001121 }
1122 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001123 {
1124 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 -07001125 __func__, "eSAP_DISCONNECTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 }
1127 break;
1128
1129 case eSAP_CH_SELECT:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001130 if (msg == eSAP_MAC_SCAN_COMPLETE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 {
1132 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1133 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 -07001134 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001135 // Channel selected. Now can sapGotoStarting
1136 sapContext->sapsMachine = eSAP_STARTING;
1137 // Specify the channel
1138 sapContext->csrRoamProfile.ChannelInfo.numOfChannels = 1;
1139 sapContext->csrRoamProfile.ChannelInfo.ChannelList = &sapContext->csrRoamProfile.operationChannel;
1140 sapContext->csrRoamProfile.operationChannel = (tANI_U8)sapContext->channel;
1141 vosStatus = sapGotoStarting( sapContext, sapEvent, eCSR_BSS_TYPE_INFRA_AP);
1142 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1143 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 -07001144 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 }
1146 else
1147 {
1148 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 -07001149 __func__, "eSAP_CH_SELECT", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 }
1151 break;
1152
1153 case eSAP_STARTING:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001154 if (msg == eSAP_MAC_START_BSS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 {
1156 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1157 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 -07001158 __func__,sapContext->channel, "eSAP_STARTING", "eSAP_STARTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001159
1160 sapContext->sapsMachine = eSAP_STARTED;
1161 /*Action code for transition */
1162 vosStatus = sapSignalHDDevent( sapContext, roamInfo, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
1163
1164 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1165 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 -07001166 __func__, "eSAP_STARTING", "eSAP_STARTED");
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301167
1168#ifdef WLAN_FEATURE_AP_HT40_24G
1169 /* Initialize the HT2040 timer */
Kaushik, Sushant553a06c2014-11-26 15:29:40 +05301170 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301171 "In %s, Init HT20/40 timer", __func__);
1172
1173 vosStatus = vos_timer_init( &sapContext->sap_HT2040_timer,
1174 VOS_TIMER_TYPE_SW, sap_ht2040_timer_cb,
1175 (v_PVOID_t)sapContext );
1176
1177 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1178 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1179 "In %s, Failed to Init HT20/40 timer", __func__);
1180#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 }
Deepthi Gowri912c7182015-11-25 18:19:16 +05301182 else if ((msg == eSAP_HDD_STOP_INFRA_BSS) ||
1183 (msg == eSAP_MAC_START_FAILS))
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001185 /*Transition from eSAP_STARTING to eSAP_DISCONNECTING (both without substates)*/
Jeff Johnson295189b2012-06-20 16:38:30 -07001186 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 -07001187 __func__, "eSAP_STARTING", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001188
1189 /*Advance outer statevar */
1190 sapContext->sapsMachine = eSAP_DISCONNECTED;
1191 vosStatus = sapSignalHDDevent( sapContext, NULL, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
1192 vosStatus = sapGotoDisconnected(sapContext);
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05301193
1194#ifdef WLAN_FEATURE_AP_HT40_24G
1195 /* Reset the OBSS Affected Channel Range */
1196 if ( (0 != sapContext->affected_start)
1197 && (0 != sapContext->affected_end)
1198 && (0 != sapContext->sap_sec_chan) )
1199 {
1200 sapContext->affected_start = 0;
1201 sapContext->affected_end = 0;
1202 sapContext->sap_sec_chan = 0;
1203 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1204 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1205 sapContext->affected_start, sapContext->affected_end);
1206
1207 }
1208#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* Close the SME session*/
1210
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 if (NULL == hHal)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1217 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001218 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001220 else if (eHAL_STATUS_SUCCESS ==
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 sme_CloseSession(hHal,
Agrawal Ashish5a3522c2016-03-02 15:08:28 +05301222 sapContext->sessionId, FALSE,
1223 VOS_TRUE, NULL, NULL))
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 {
1225 sapContext->isSapSessionOpen = eSAP_FALSE;
1226 }
1227 }
1228 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001229 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001230 {
1231 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1232 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001233 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* Intentionally left blank */
1235 }
1236 break;
1237
1238 case eSAP_STARTED:
1239 if (msg == eSAP_HDD_STOP_INFRA_BSS)
1240 {
1241 /* Transition from eSAP_STARTED to eSAP_DISCONNECTING (both without substates) */
1242 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 -07001243 __func__, "eSAP_STARTED", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 sapContext->sapsMachine = eSAP_DISCONNECTING;
1245 vosStatus = sapGotoDisconnecting(sapContext);
1246 }
Abhishek Singh02605092017-10-25 14:06:12 +05301247 else if (msg == eSAP_CHANNEL_SWITCH_ANNOUNCEMENT_START ) {
1248 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1249 if (!hHal) {
1250 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1251 "In %s, NULL hHal in state %s, msg %d",
1252 __func__, "eSAP_STARTING", msg);
1253 }
1254 vosStatus = sme_roam_csa_ie_request(hHal, sapContext->bssid,
1255 sapContext->ecsa_info.new_channel,
Abhishek Singh02b823e2017-10-30 17:53:20 +05301256 sapContext->csrRoamProfile.phyMode,
1257 sapContext->sessionId);
Abhishek Singh02605092017-10-25 14:06:12 +05301258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 else
1260 {
1261 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 -07001262 __func__, "eSAP_STARTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 }
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301264#ifdef WLAN_FEATURE_AP_HT40_24G
1265 /* Reset the OBSS Affected Channel Range */
1266 if ( (0 != sapContext->affected_start)
1267 && (0 != sapContext->affected_end)
1268 && (0 != sapContext->sap_sec_chan) )
1269 {
1270 sapContext->affected_start = 0;
1271 sapContext->affected_end = 0;
1272 sapContext->sap_sec_chan = 0;
1273 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1274 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1275 sapContext->affected_start, sapContext->affected_end);
1276 }
1277
1278 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1279 {
1280 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1281 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1282 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1283 FL("Failed to Stop HT20/40 timer"));
1284 }
1285
1286 vosStatus = vos_timer_destroy(&sapContext->sap_HT2040_timer);
1287 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1288 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1289 FL("Failed to Destroy HT20/40 timer"));
1290#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 break;
1292
1293 case eSAP_DISCONNECTING:
1294 if (msg == eSAP_MAC_READY_FOR_CONNECTIONS)
1295 {
1296 /* Transition from eSAP_DISCONNECTING to eSAP_DISCONNECTED (both without substates) */
1297 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 -07001298 __func__, "eSAP_DISCONNECTING", "eSAP_DISCONNECTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001299
1300 sapContext->sapsMachine = eSAP_DISCONNECTED;
1301 /* Close the SME session*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001302 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -07001303 {
1304 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1305
1306 if (NULL == hHal)
1307 {
1308 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1309 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001310 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001311 }
1312 else
1313 {
1314 sapContext->isSapSessionOpen = eSAP_FALSE;
Agrawal Ashish5a3522c2016-03-02 15:08:28 +05301315 sme_CloseSession(hHal,
1316 sapContext->sessionId, TRUE, VOS_TRUE,
1317 NULL, sapContext);
1318
1319 vosStatus = sapSignalHDDevent(sapContext, NULL,
1320 eSAP_STOP_BSS_EVENT,
1321 (v_PVOID_t) eSAP_STATUS_SUCCESS);
Jeff Johnson295189b2012-06-20 16:38:30 -07001322 }
1323 }
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301324 } else if (msg == eSAP_CHANNEL_SELECTION_FAILED)
Peng Xu2446a892014-09-05 17:21:18 +05301325 {
1326 /* Set SAP device role */
1327 sapContext->sapsMachine = eSAP_CH_SELECT;
1328
1329 /* Perform sme_ScanRequest */
1330 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301331 } else if (msg == eWNI_ECSA_TX_COMPLETED)
1332 {
1333 vosStatus = wlansap_channel_change_request(sapContext);
1334 } else if (msg == eWNI_ECSA_CHANNEL_CHANGE_RSP)
1335 {
1336 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1337 FL("in state %s, event msg %d result %d"),
1338 "eSAP_DISCONNECTING ", msg, sapEvent->u2);
1339 if (sapEvent->u2 == eCSR_ROAM_RESULT_FAILURE)
1340 vosStatus = sapGotoDisconnecting(sapContext);
Peng Xu2446a892014-09-05 17:21:18 +05301341 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001342 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001344 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07001345 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001346 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001347 }
1348 break;
1349 }
1350 return vosStatus;
1351}// sapFsm
1352
1353
1354eSapStatus
1355sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, tCsrRoamProfile *profile)
1356{
1357 //Create Roam profile for SoftAP to connect
1358 profile->BSSType = eCSR_BSS_TYPE_INFRA_AP;
1359 profile->SSIDs.numOfSSIDs = 1;
1360 profile->csrPersona = pconfig_params->persona;
1361
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001362 vos_mem_zero(profile->SSIDs.SSIDList[0].SSID.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -07001363 sizeof(profile->SSIDs.SSIDList[0].SSID.ssId));
1364
1365 //Flag to not broadcast the SSID information
1366 profile->SSIDs.SSIDList[0].ssidHidden = pconfig_params->SSIDinfo.ssidHidden;
1367
1368 profile->SSIDs.SSIDList[0].SSID.length = pconfig_params->SSIDinfo.ssid.length;
1369 vos_mem_copy(&profile->SSIDs.SSIDList[0].SSID.ssId, pconfig_params->SSIDinfo.ssid.ssId,
1370 sizeof(pconfig_params->SSIDinfo.ssid.ssId));
1371
1372 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1373
1374 if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1375 {
1376 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1377 }
1378 else if (pconfig_params->authType == eSAP_SHARED_KEY)
1379 {
1380 profile->negotiatedAuthType = eCSR_AUTH_TYPE_SHARED_KEY;
1381 }
1382 else
1383 {
1384 profile->negotiatedAuthType = eCSR_AUTH_TYPE_AUTOSWITCH;
1385 }
1386
1387 profile->AuthType.numEntries = 1;
1388 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1389
1390 //Always set the Encryption Type
1391 profile->EncryptionType.numEntries = 1;
1392 profile->EncryptionType.encryptionType[0] = pconfig_params->RSNEncryptType;
1393
1394 profile->mcEncryptionType.numEntries = 1;
1395 profile->mcEncryptionType.encryptionType[0] = pconfig_params->mcRSNEncryptType;
1396
1397 if (pconfig_params->privacy & eSAP_SHARED_KEY)
1398 {
1399 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_SHARED_KEY;
1400 }
1401
1402 profile->privacy = pconfig_params->privacy;
1403 profile->fwdWPSPBCProbeReq = pconfig_params->fwdWPSPBCProbeReq;
1404
1405 if (pconfig_params->authType == eSAP_SHARED_KEY)
1406 {
1407 profile->csr80211AuthType = eSIR_SHARED_KEY;
1408 }
1409 else if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1410 {
1411 profile->csr80211AuthType = eSIR_OPEN_SYSTEM;
1412 }
1413 else
1414 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001415 profile->csr80211AuthType = eSIR_AUTO_SWITCH;
Jeff Johnson295189b2012-06-20 16:38:30 -07001416 }
1417
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001418 //Initialize we are not going to use it
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 profile->pWPAReqIE = NULL;
1420 profile->nWPAReqIELength = 0;
1421
1422 //set the RSN/WPA IE
1423 profile->pRSNReqIE = NULL;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001424 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001425 if (pconfig_params->RSNWPAReqIELength)
1426 {
1427 profile->pRSNReqIE = vos_mem_malloc(pconfig_params->RSNWPAReqIELength);
1428 if( NULL == profile->pRSNReqIE )
1429 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001430 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, " %s Fail to alloc memory", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001431 return eSAP_STATUS_FAILURE;
1432 }
Kapil Gupta137ef892016-12-13 19:38:00 +05301433 vos_mem_copy(profile->pRSNReqIE, pconfig_params->RSNWPAReqIE,
1434 pconfig_params->RSNWPAReqIELength);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001435 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 }
1437
1438 // Turn off CB mode
1439 profile->CBMode = eCSR_CB_OFF;
1440
1441 //set the phyMode to accept anything
1442 //Best means everything because it covers all the things we support
1443 profile->phyMode = pconfig_params->SapHw_mode; /*eCSR_DOT11_MODE_BEST*/
1444
1445 //Configure beaconInterval
1446 profile->beaconInterval = (tANI_U16)pconfig_params->beacon_int;
1447
1448 // set DTIM period
1449 profile->dtimPeriod = pconfig_params->dtim_period;
1450
1451 //set Uapsd enable bit
1452 profile->ApUapsdEnable = pconfig_params->UapsdEnable;
1453
1454 //Enable protection parameters
1455 profile->protEnabled = pconfig_params->protEnabled;
1456 profile->obssProtEnabled = pconfig_params->obssProtEnabled;
1457 profile->cfg_protection = pconfig_params->ht_capab;
1458
1459 //country code
1460 if (pconfig_params->countryCode[0])
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001461 vos_mem_copy(profile->countryCode, pconfig_params->countryCode, WNI_CFG_COUNTRY_CODE_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07001462 profile->ieee80211d = pconfig_params->ieee80211d;
Jeff Johnson295189b2012-06-20 16:38:30 -07001463 //wps config info
1464 profile->wps_state = pconfig_params->wps_state;
1465
Chet Lanctot8cecea22014-02-11 19:09:36 -08001466#ifdef WLAN_FEATURE_11W
1467 // MFP capable/required
1468 profile->MFPCapable = pconfig_params->mfpCapable ? 1 : 0;
1469 profile->MFPRequired = pconfig_params->mfpRequired ? 1 : 0;
1470#endif
1471
Jeff Johnson295189b2012-06-20 16:38:30 -07001472 return eSAP_STATUS_SUCCESS; /* Success. */
1473}
1474
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001475/**
1476 * FUNCTION: sapConvertSapPhyModeToCsrPhyMode
1477 * Called internally by SAP
1478 */
1479eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode )
1480{
1481 switch (sapPhyMode)
1482 {
1483 case (eSAP_DOT11_MODE_abg):
1484 return eCSR_DOT11_MODE_abg;
1485 case (eSAP_DOT11_MODE_11b):
1486 return eCSR_DOT11_MODE_11b;
1487 case (eSAP_DOT11_MODE_11g):
1488 return eCSR_DOT11_MODE_11g;
1489 case (eSAP_DOT11_MODE_11n):
1490 return eCSR_DOT11_MODE_11n;
1491 case (eSAP_DOT11_MODE_11g_ONLY):
1492 return eCSR_DOT11_MODE_11g_ONLY;
1493 case (eSAP_DOT11_MODE_11n_ONLY):
1494 return eCSR_DOT11_MODE_11n_ONLY;
1495 case (eSAP_DOT11_MODE_11b_ONLY):
1496 return eCSR_DOT11_MODE_11b_ONLY;
1497#ifdef WLAN_FEATURE_11AC
1498 case (eSAP_DOT11_MODE_11ac_ONLY):
1499 return eCSR_DOT11_MODE_11ac_ONLY;
1500 case (eSAP_DOT11_MODE_11ac):
1501 return eCSR_DOT11_MODE_11ac;
1502#endif
Deepthi Gowri849c1e42014-11-05 15:57:22 +05301503 case (eSAP_DOT11_MODE_11a):
1504 return eCSR_DOT11_MODE_11a;
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001505 default:
1506 return eCSR_DOT11_MODE_AUTO;
1507 }
1508}
Jeff Johnson295189b2012-06-20 16:38:30 -07001509
1510void sapFreeRoamProfile(tCsrRoamProfile *profile)
1511{
1512 if(profile->pRSNReqIE)
1513 {
1514 vos_mem_free(profile->pRSNReqIE);
1515 profile->pRSNReqIE = NULL;
1516 }
1517}
1518
1519
1520void
1521sapSortMacList(v_MACADDR_t *macList, v_U8_t size)
1522{
1523 v_U8_t outer, inner;
1524 v_MACADDR_t temp;
1525 v_SINT_t nRes = -1;
1526
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301527 if ((NULL == macList) || (size >= MAX_ACL_MAC_ADDRESS))
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1530 "In %s, either buffer is NULL or size = %d is more."
1531 ,__func__, size);
1532 return;
1533 }
1534
Jeff Johnson295189b2012-06-20 16:38:30 -07001535 for(outer = 0; outer < size; outer++)
1536 {
1537 for(inner = 0; inner < size - 1; inner++)
1538 {
1539 nRes = vos_mem_compare2((macList + inner)->bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1540 if (nRes > 0)
1541 {
1542 vos_mem_copy(temp.bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1543 vos_mem_copy((macList + inner + 1)->bytes, (macList + inner)->bytes, sizeof(v_MACADDR_t));
1544 vos_mem_copy((macList + inner)->bytes, temp.bytes, sizeof(v_MACADDR_t));
1545 }
1546 }
1547 }
1548}
1549
1550eSapBool
1551sapSearchMacList(v_MACADDR_t *macList, v_U8_t num_mac, v_U8_t *peerMac, v_U8_t *index)
1552{
1553 v_SINT_t nRes = -1;
1554 v_S7_t nStart = 0, nEnd, nMiddle;
1555 nEnd = num_mac - 1;
1556
1557 while (nStart <= nEnd)
1558 {
1559 nMiddle = (nStart + nEnd) / 2;
1560 nRes = vos_mem_compare2(&macList[nMiddle], peerMac, sizeof(v_MACADDR_t));
1561
1562 if (0 == nRes)
1563 {
1564 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1565 "search SUCC");
1566 // "index equals NULL" means the caller does not need the
1567 // index value of the peerMac being searched
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001568 if (index != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 {
1570 *index = (v_U8_t) nMiddle;
1571 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1572 "index %d", *index);
1573 }
1574 return eSAP_TRUE;
1575 }
1576 if (nRes < 0)
1577 nStart = nMiddle + 1;
1578 else
1579 nEnd = nMiddle - 1;
1580 }
1581
1582 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1583 "search not succ");
1584 return eSAP_FALSE;
1585}
1586
1587void
1588sapAddMacToACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t *peerMac)
1589{
1590 v_SINT_t nRes = -1;
1591 int i;
1592 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"add acl entered");
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301593
Mahesh A Saptasagarbeb0ba02014-08-01 12:23:59 +05301594 if ((NULL == macList) || (*size >= MAX_ACL_MAC_ADDRESS))
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301595 {
1596 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1597 "In %s, either buffer is NULL or size %d is incorrect."
1598 , __func__, *size);
1599 return;
1600 }
1601
Jeff Johnson295189b2012-06-20 16:38:30 -07001602 for (i=((*size)-1); i>=0; i--)
1603 {
1604 nRes = vos_mem_compare2(&macList[i], peerMac, sizeof(v_MACADDR_t));
1605 if (nRes > 0)
1606 {
1607 /* Move alphabetically greater mac addresses one index down to allow for insertion
1608 of new mac in sorted order */
1609 vos_mem_copy((macList+i+1)->bytes,(macList+i)->bytes, sizeof(v_MACADDR_t));
1610 }
1611 else
1612 {
1613 break;
1614 }
1615 }
1616 //This should also take care of if the element is the first to be added in the list
1617 vos_mem_copy((macList+i+1)->bytes, peerMac, sizeof(v_MACADDR_t));
1618 // increment the list size
1619 (*size)++;
1620}
1621
1622void
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001623sapRemoveMacFromACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t index)
Jeff Johnson295189b2012-06-20 16:38:30 -07001624{
1625 int i;
1626 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"remove acl entered");
1627 /* return if the list passed is empty. Ideally this should never happen since this funcn is always
1628 called after sapSearchMacList to get the index of the mac addr to be removed and this will
1629 only get called if the search is successful. Still no harm in having the check */
Padma, Santhosh Kumar72c28472014-05-15 21:18:11 +05301630 if ((macList==NULL) || (*size == 0) || (*size > MAX_ACL_MAC_ADDRESS))
1631 {
1632 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1633 "In %s, either buffer is NULL or size %d is incorrect."
1634 , __func__, *size);
1635 return;
1636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001637 for (i=index; i<((*size)-1); i++)
1638 {
1639 /* Move mac addresses starting from "index" passed one index up to delete the void
1640 created by deletion of a mac address in ACL */
1641 vos_mem_copy((macList+i)->bytes,(macList+i+1)->bytes, sizeof(v_MACADDR_t));
1642 }
1643 // The last space should be made empty since all mac addesses moved one step up
1644 vos_mem_zero((macList+(*size)-1)->bytes, sizeof(v_MACADDR_t));
1645 //reduce the list size by 1
1646 (*size)--;
1647}
1648
1649void sapPrintACL(v_MACADDR_t *macList, v_U8_t size)
1650{
1651 int i;
Arif Hussain24bafea2013-11-15 15:10:03 -08001652 v_BYTE_t *macArray;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001653 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"print acl entered");
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301654
1655 if ((NULL == macList) || (size == 0) || (size >= MAX_ACL_MAC_ADDRESS))
1656 {
1657 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1658 "In %s, either buffer is NULL or size %d is incorrect."
1659 , __func__, size);
1660 return;
1661 }
1662
Jeff Johnson295189b2012-06-20 16:38:30 -07001663 for (i=0; i<size; i++)
1664 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001665 macArray = (macList+i)->bytes;
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussain24bafea2013-11-15 15:10:03 -08001667 "** ACL entry %i - "MAC_ADDRESS_STR, i,
1668 MAC_ADDR_ARRAY(macArray));
Jeff Johnson295189b2012-06-20 16:38:30 -07001669 }
1670 return;
1671}
1672
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301673/*==========================================================================
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301674 FUNCTION sapGetStaId
1675
1676 DESCRIPTION
1677 Get the STA ID from Mac address.
1678
1679 DEPENDENCIES
1680 NA.
1681
1682 PARAMETERS
1683
1684 IN
1685 sapContext : Sap Context value
1686 staId : STA ID
1687 pCsrRoamInfo : Pointer to CSR info
1688
1689 RETURN VALUE
1690
1691 SIDE EFFECTS
1692============================================================================*/
1693
1694VOS_STATUS sapGetStaId(ptSapContext sapContext, v_U8_t *staId,
1695 tCsrRoamInfo *pCsrRoamInfo)
1696{
1697 v_U8_t i;
1698
1699 for (i = 0; i < WLAN_MAX_STA_COUNT; i++)
1700 {
1701 if (vos_mem_compare(&sapContext->aStaInfo[i].macAddrSTA,
1702 pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t))
1703 && sapContext->aStaInfo[i].isUsed)
1704 {
1705 *staId = i;
1706 return VOS_STATUS_SUCCESS;
1707 }
1708 }
1709 return VOS_STATUS_E_FAILURE;
1710}
1711
1712/*==========================================================================
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301713 FUNCTION sapAddHT40IntolerantSta
1714
1715 DESCRIPTION
1716 Add HT40 Intolerant STA & Move SAP from HT40 to HT20
1717
1718 DEPENDENCIES
1719 NA.
1720
1721 PARAMETERS
1722
1723 IN
1724 sapContext : Sap Context value
1725 pCsrRoamInfo : Pointer to CSR info
1726
1727 RETURN VALUE
1728
1729 SIDE EFFECTS
1730============================================================================*/
1731
1732#ifdef WLAN_FEATURE_AP_HT40_24G
1733void sapAddHT40IntolerantSta(ptSapContext sapContext,
1734 tCsrRoamInfo *pCsrRoamInfo)
1735{
1736
1737 tHalHandle hHal;
1738 v_U8_t cbMode;
1739 tANI_U8 staId;
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301740 eHalStatus halStatus;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301741 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301742
1743 /* tHalHandle */
1744 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1745
1746 if (NULL == hHal)
1747 {
1748 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1749 FL("In invalid hHal"));
1750 return;
1751 }
1752
1753 staId = pCsrRoamInfo->staId;
1754
1755 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1756 FL("Add HT40 MHz Intolerant STA :"
1757 MAC_ADDRESS_STR " STA ID: %d"),
1758 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1759 staId);
1760
1761 // Get Channel Bonding Mode
1762 cbMode = sme_GetChannelBondingMode24G(hHal);
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301763
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301764 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301765 FL("Current Channel Bonding Mode: %d "
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301766 "HT40IntolerantSet: %d"),
1767 cbMode, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1768
1769 if(sapContext->aStaInfo[staId].isHT40IntolerantSet)
1770 {
1771 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1772 FL("HT40Intolerant is Already Set: %d"),
1773 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1774 return;
1775 }
1776
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301777 spin_lock_bh(&sapContext->staInfo_lock);
1778
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301779 sapContext->aStaInfo[staId].isHT40IntolerantSet = 1;
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);
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301789
1790 /* Stop HT20/40 Timer */
1791 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1792 {
1793 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1794 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1795 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1796 FL("Failed to Stop HT20/40 timer"));
1797 }
1798
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301799 if(cbMode)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1802 FL("Move SAP from HT40 to HT20"));
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301803
1804 halStatus = sme_SetHT2040Mode(hHal, sapContext->sessionId,
1805 PHY_SINGLE_CHANNEL_CENTERED);
1806
1807 if (halStatus == eHAL_STATUS_FAILURE)
1808 {
1809 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1810 FL("Failed to change HT20/40 mode"));
1811 return;
1812 }
1813
1814 /* Disable Channel Bonding for 2.4GHz */
1815 sme_UpdateChannelBondingMode24G(hHal,
1816 PHY_SINGLE_CHANNEL_CENTERED);
1817
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301818 }
1819 else
1820 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301821 FL("SAP is Already in HT20"));
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301822}
1823
1824/*==========================================================================
1825 FUNCTION sapRemoveHT40IntolerantSta
1826
1827 DESCRIPTION
1828 Remove HT40 Intolerant STA & Move SAP from HT40 to HT20
1829
1830 DEPENDENCIES
1831 NA.
1832
1833 PARAMETERS
1834
1835 IN
1836 sapContext : Sap Context value
1837 pCsrRoamInfo : Pointer to CSR info
1838
1839 RETURN VALUE
1840
1841 SIDE EFFECTS
1842============================================================================*/
1843
1844void sapRemoveHT40IntolerantSta(ptSapContext sapContext,
1845 tCsrRoamInfo *pCsrRoamInfo)
1846{
1847 tANI_U8 staId;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301848 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
1849 unsigned int delay;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301850
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301851 vosStatus = sapGetStaId(sapContext, &staId, pCsrRoamInfo);
1852
1853 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1854 {
1855 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1856 FL("ERROR: SAP Failed to find sta id!!"));
1857 return;
1858 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301859
1860 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1861 FL("Remove HT40 MHz Intolerant STA :"
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301862 MAC_ADDRESS_STR " STA ID: %d"
1863 " HT40IntolerantSet:%d"),
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301864 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1865 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1866
1867 if(!sapContext->aStaInfo[staId].isHT40IntolerantSet)
1868 {
1869 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1870 FL("HT40Intolerant is not Set: %d"),
1871 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1872 return;
1873 }
1874
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301875 spin_lock_bh(&sapContext->staInfo_lock);
1876 sapContext->aStaInfo[staId].isHT40IntolerantSet = 0;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301877
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301878 if (sapContext->numHT40IntoSta > 0)
1879 sapContext->numHT40IntoSta--;
1880
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301881 spin_unlock_bh(&sapContext->staInfo_lock);
1882
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301883 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1884 FL("Total No of HT40 Intolerant STA: %d"
1885 " STA ID: %d HT40IntolerantSet: %d"),
1886 sapContext->numHT40IntoSta,
1887 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1888
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +05301889 if ((!sapCheckHT40SecondaryIsNotAllowed(sapContext))
1890 && (!sapContext->numHT40IntoSta))
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301891 {
1892 /* Stop Previous Running HT20/40 Timer & Start timer
1893 with (OBSS TransitionDelayFactor * obss interval)
1894 delay after time out move AP from HT20 -> HT40
1895 mode
1896 */
1897 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1898 {
1899 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1900 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1901 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1902 FL("Failed to Stop HT20/40 timer"));
1903 }
1904
1905 delay =
1906 (sapContext->ObssScanInterval * sapContext->ObssTransitionDelayFactor);
1907
1908 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1909 FL("Start HT20/40 itransition"
1910 " timer (%d sec)"), delay);
1911
1912 vosStatus = vos_timer_start( &sapContext->sap_HT2040_timer,
1913 (delay * 1000));
1914
1915 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1916 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1917 FL("Failed to Start HT20/40 timer"));
1918 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301919 return;
1920}
1921#endif
1922
Jeff Johnson295189b2012-06-20 16:38:30 -07001923VOS_STATUS
1924sapIsPeerMacAllowed(ptSapContext sapContext, v_U8_t *peerMac)
1925{
1926 if (eSAP_ALLOW_ALL == sapContext->eSapMacAddrAclMode)
1927 return VOS_STATUS_SUCCESS;
1928
1929 if (sapSearchMacList(sapContext->acceptMacList, sapContext->nAcceptMac, peerMac, NULL))
1930 return VOS_STATUS_SUCCESS;
1931
1932 if (sapSearchMacList(sapContext->denyMacList, sapContext->nDenyMac, peerMac, NULL))
1933 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001934 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1935 "In %s, Peer "MAC_ADDRESS_STR" in deny list",
1936 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001937 return VOS_STATUS_E_FAILURE;
1938 }
1939
1940 // A new station CAN associate, unless in deny list. Less stringent mode
1941 if (eSAP_ACCEPT_UNLESS_DENIED == sapContext->eSapMacAddrAclMode)
1942 return VOS_STATUS_SUCCESS;
1943
1944 // A new station CANNOT associate, unless in accept list. More stringent mode
1945 if (eSAP_DENY_UNLESS_ACCEPTED == sapContext->eSapMacAddrAclMode)
1946 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001947 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1948 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_DENY_UNLESS_ACCEPTED",
1949 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 return VOS_STATUS_E_FAILURE;
1951 }
1952
1953 /* The new STA is neither in accept list nor in deny list. In this case, deny the association
1954 * but send a wifi event notification indicating the mac address being denied
1955 */
1956 if (eSAP_SUPPORT_ACCEPT_AND_DENY == sapContext->eSapMacAddrAclMode)
1957 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001958 sapSignalHDDevent(sapContext, NULL, eSAP_UNKNOWN_STA_JOIN, (v_PVOID_t)peerMac);
Arif Hussain24bafea2013-11-15 15:10:03 -08001959 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1960 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_SUPPORT_ACCEPT_AND_DENY",
1961 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001962 return VOS_STATUS_E_FAILURE;
1963 }
1964 return VOS_STATUS_SUCCESS;
1965}
1966
1967#ifdef SOFTAP_CHANNEL_RANGE
1968static VOS_STATUS sapGetChannelList(ptSapContext sapContext,
1969 v_U8_t **channelList, v_U8_t *numberOfChannels)
1970{
1971 v_U32_t startChannelNum;
1972 v_U32_t endChannelNum;
1973 v_U32_t operatingBand;
1974 v_U8_t loopCount;
1975 v_U8_t *list;
1976 v_U8_t channelCount;
1977 v_U8_t bandStartChannel;
1978 v_U8_t bandEndChannel ;
1979 v_U32_t enableLTECoex;
1980 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
Abhishek Singhb51853c2014-03-13 18:26:41 +05301981#ifdef FEATURE_WLAN_CH_AVOID
1982 v_U8_t i;
1983#endif
1984
Jeff Johnson295189b2012-06-20 16:38:30 -07001985
1986 if (NULL == hHal)
1987 {
1988 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1989 "Invalid HAL pointer from pvosGCtx on sapGetChannelList");
1990 *numberOfChannels = 0;
1991 *channelList = NULL;
1992 return VOS_STATUS_E_FAULT;
1993 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001994
Peng Xu2446a892014-09-05 17:21:18 +05301995 if ( eCSR_BAND_ALL == sapContext->scanBandPreference)
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 {
Peng Xu2446a892014-09-05 17:21:18 +05301997
1998 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &startChannelNum);
1999 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum);
2000 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
2001
2002 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2003 "%s:sapGetChannelList: startChannel %d,EndChannel %d,Operatingband:%d",
2004 __func__,startChannelNum,endChannelNum,operatingBand);
2005
2006 switch(operatingBand)
2007 {
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302008 case eSAP_RF_SUBBAND_2_4_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302009 bandStartChannel = RF_CHAN_1;
2010 bandEndChannel = RF_CHAN_14;
2011 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002012
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302013 case eSAP_RF_SUBBAND_5_LOW_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302014 bandStartChannel = RF_CHAN_36;
2015 bandEndChannel = RF_CHAN_64;
2016 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002017
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302018 case eSAP_RF_SUBBAND_5_MID_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302019 bandStartChannel = RF_CHAN_100;
2020 bandEndChannel = RF_CHAN_140;
2021 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002022
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302023 case eSAP_RF_SUBBAND_5_HIGH_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302024 bandStartChannel = RF_CHAN_149;
2025 bandEndChannel = RF_CHAN_165;
2026 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002027
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302028 case eSAP_RF_SUBBAND_5_ALL_GHZ:
2029 bandStartChannel = RF_CHAN_36;
2030 bandEndChannel = RF_CHAN_165;
2031 break;
2032
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 default:
Peng Xu2446a892014-09-05 17:21:18 +05302034 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2035 "sapGetChannelList:OperatingBand not valid ");
2036 /* assume 2.4 GHz */
2037 bandStartChannel = RF_CHAN_1;
2038 bandEndChannel = RF_CHAN_14;
2039 break;
2040 }
2041 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2042 "%s: expanded startChannel %d,EndChannel %d,Operatingband:%d",
2043 __func__,startChannelNum,endChannelNum,operatingBand);
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 }
Peng Xu2446a892014-09-05 17:21:18 +05302045 else
2046 {
2047 if ( sapContext->allBandScanned == eSAP_FALSE )
2048 {
2049 //first band scan
2050 sapContext->currentPreferredBand = sapContext->scanBandPreference;
2051 }
2052 else
2053 {
2054 //scan next band
2055 if ( eCSR_BAND_24 == sapContext->scanBandPreference )
2056 sapContext->currentPreferredBand = eCSR_BAND_5G;
2057 else
2058 sapContext->currentPreferredBand = eCSR_BAND_24;
2059 }
2060 switch(sapContext->currentPreferredBand)
2061 {
2062 case eCSR_BAND_24:
2063 bandStartChannel = RF_CHAN_1;
2064 bandEndChannel = RF_CHAN_14;
2065 startChannelNum = 1;
2066 endChannelNum = 14;
2067 break;
2068
2069 case eCSR_BAND_5G:
2070 bandStartChannel = RF_CHAN_36;
2071 bandEndChannel = RF_CHAN_165;
2072 startChannelNum = 36;
2073 endChannelNum = 165;
2074 break;
2075
2076 default:
2077 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2078 "sapGetChannelList:bandPreference not valid ");
2079 /* assume 2.4 GHz */
2080 bandStartChannel = RF_CHAN_1;
2081 bandEndChannel = RF_CHAN_14;
2082 startChannelNum = 1;
2083 endChannelNum = 14;
2084 break;
2085 }
2086 }
2087
2088 ccmCfgGetInt(hHal, WNI_CFG_ENABLE_LTE_COEX, &enableLTECoex);
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 /*Check if LTE coex is enabled and 2.4GHz is selected*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002090 if (enableLTECoex && (bandStartChannel == RF_CHAN_1)
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 && (bandEndChannel == RF_CHAN_14))
2092 {
2093 /*Set 2.4GHz upper limit to channel 9 for LTE COEX*/
2094 bandEndChannel = RF_CHAN_9;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 /* Allocate the max number of channel supported */
2097 list = (v_U8_t *)vos_mem_malloc(NUM_5GHZ_CHANNELS);
2098 if (NULL == list)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002101 "%s: Unable to allocate channel list", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 *numberOfChannels = 0;
2103 *channelList = NULL;
2104 return VOS_STATUS_E_RESOURCES;
2105 }
2106
2107 /*Search for the Active channels in the given range */
2108 channelCount = 0;
2109 for( loopCount = bandStartChannel; loopCount <= bandEndChannel; loopCount++ )
2110 {
2111 if((startChannelNum <= rfChannels[loopCount].channelNum)&&
2112 (endChannelNum >= rfChannels[loopCount].channelNum ))
2113 {
2114 if( regChannels[loopCount].enabled )
2115 {
Abhishek Singhb51853c2014-03-13 18:26:41 +05302116#ifdef FEATURE_WLAN_CH_AVOID
2117 for( i = 0; i < NUM_20MHZ_RF_CHANNELS; i++ )
2118 {
2119 if( (safeChannels[i].channelNumber ==
2120 rfChannels[loopCount].channelNum) )
2121 {
2122 /* Check if channel is safe */
2123 if(VOS_TRUE == safeChannels[i].isSafe)
2124 {
2125#endif
2126 list[channelCount] =
2127 rfChannels[loopCount].channelNum;
2128 channelCount++;
2129#ifdef FEATURE_WLAN_CH_AVOID
2130 }
2131 break;
2132 }
2133 }
2134#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 }
2136 }
2137 }
2138 if (0 == channelCount)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002139 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2141 "sapGetChannelList:No active channels present in the given range for the current region");
2142 /*LTE COEX: channel range outside the restricted 2.4GHz band limits*/
2143 if (enableLTECoex && (startChannelNum > bandEndChannel))
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
2146 "sapGetChannelList:SAP cannot be started as LTE COEX restricted 2.4GHz limits");
2147 }
2148 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002149
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 /* return the channel list and number of channels to scan*/
2151 *numberOfChannels = channelCount;
2152 if(channelCount != 0)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002153 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 *channelList = list;
2155 }
2156 else
2157 {
2158 *channelList = NULL;
2159 vos_mem_free(list);
2160 }
Peng Xu2446a892014-09-05 17:21:18 +05302161
2162 for (loopCount = 0; loopCount <channelCount; loopCount ++ )
2163 {
2164 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG,
2165 "%s: channel number: %d",
2166 __func__,list[loopCount]);
2167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 return VOS_STATUS_SUCCESS;
2169}
2170#endif
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05302171
2172#ifdef WLAN_FEATURE_AP_HT40_24G
2173static VOS_STATUS sapGetChannelListForObss(tHalHandle halHandle,
2174 ptSapContext psapCtx, v_U8_t **channelList,
2175 v_U8_t *numberOfChannels)
2176{
2177 v_U32_t startChannelNum;
2178 v_U32_t endChannelNum;
2179 v_U8_t loopCount;
2180 v_U8_t channelCount;
2181 v_U8_t *list;
2182
2183 if (eHAL_STATUS_SUCCESS != sapGet24GOBSSAffectedChannel(halHandle, psapCtx))
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2186 "%s:Not able to Get Affected Channel Range for Channel : %d",
2187 __func__, psapCtx->channel);
2188 return VOS_STATUS_E_FAILURE;
2189 }
2190
2191 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2192 "%s: 40 MHz affected channel range: [%d,%d] MHz",
2193 __func__, psapCtx->affected_start, psapCtx->affected_end);
2194
2195 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2196 "%s: SAP Primary & Secondary Channel : [%d,%d] MHz",
2197 __func__, psapCtx->channel, psapCtx->sap_sec_chan);
2198
2199 /* Allocate the max number of channel supported */
2200 list = (v_U8_t *)vos_mem_malloc(RF_CHAN_14 + 1);
2201 if (NULL == list)
2202 {
2203 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2204 "%s: Unable to allocate channel list", __func__);
2205 *numberOfChannels = 0;
2206 *channelList = NULL;
2207 return VOS_STATUS_E_RESOURCES;
2208 }
2209
2210 /*Search for the Active channels in the given range */
2211 channelCount = 0;
2212 startChannelNum = RF_CHAN_1;
2213 endChannelNum = RF_CHAN_14;
2214 for( loopCount = startChannelNum; loopCount <= endChannelNum; loopCount++ )
2215 {
2216 if ((rfChannels[loopCount].channelNum >= psapCtx->affected_start)
2217 && (rfChannels[loopCount].channelNum <= psapCtx->affected_end))
2218 {
2219 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2220 "%s: Channel Number: %d State : %d", __func__,
2221 rfChannels[loopCount].channelNum,
2222 vos_nv_getChannelEnabledState(rfChannels[loopCount].channelNum));
2223 list[channelCount] = rfChannels[loopCount].channelNum;
2224 channelCount++;
2225 }
2226 }
2227 /* return the channel list and number of channels to scan*/
2228 *numberOfChannels = channelCount;
2229 if(channelCount != 0)
2230 {
2231 *channelList = list;
2232 }
2233 else
2234 {
2235 *channelList = NULL;
2236 vos_mem_free(list);
2237 }
2238 return VOS_STATUS_SUCCESS;
2239}
2240#endif