blob: c7adecd51512ce13cfdfcf6a2296a1f937de1bbc [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Yeshwanth Sriram Guntukad3a9fc52018-01-10 15:09:49 +05302 * Copyright (c) 2012-2013, 2016-2018 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;
Yeshwanth Sriram Guntukad3a9fc52018-01-10 15:09:49 +0530264 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265
266 hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME, sapContext->pvosGCtx);
267 if (NULL == hHal)
268 {
269 /* we have a serious problem */
270 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700271 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 return VOS_STATUS_E_FAULT;
273 }
274
Yeshwanth Sriram Guntukad3a9fc52018-01-10 15:09:49 +0530275 pMac = PMAC_STRUCT( hHal );
276
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530277 sapPhyMode =
278 sapConvertSapPhyModeToCsrPhyMode(sapContext->csrRoamProfile.phyMode);
279
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 /*If STA-AP concurrency is enabled take the concurrent connected channel first. In other cases wpa_supplicant should take care */
281 if (vos_get_concurrency_mode() == VOS_STA_SAP)
282 {
283 channel = sme_GetConcurrentOperationChannel(hHal);
284
Yeshwanth Sriram Guntukad3a9fc52018-01-10 15:09:49 +0530285 if (pMac->sta_sap_scc_on_dfs_chan && pMac->force_scc_with_ecsa &&
286 vos_nv_getChannelEnabledState(channel) == NV_CHANNEL_DISABLE) {
287 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
288 FL("Channel:%d disabled, SAP not allowed to operate"),
289 sapContext->channel);
290 return VOS_STATUS_E_INVAL;
291 }
292
Jeff Johnson295189b2012-06-20 16:38:30 -0700293 if (channel)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700294 { /*if a valid channel is returned then use concurrent channel.
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 Else take whatever comes from configuartion*/
296 sapContext->channel = channel;
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530297#ifdef WLAN_FEATURE_AP_HT40_24G
298 if (sapContext->channel > SIR_11B_CHANNEL_END)
299#endif
Abhishek Singh02b823e2017-10-30 17:53:20 +0530300 sme_SelectCBMode(hHal, sapPhyMode,
301 sapContext->channel, eHT_MAX_CHANNEL_WIDTH);
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
303 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700304
305 if (sapContext->channel == AUTO_CHANNEL_SELECT)
Jeff Johnson295189b2012-06-20 16:38:30 -0700306 {
307 vos_mem_zero(&scanRequest, sizeof(scanRequest));
308
309 /* Set scanType to Passive scan */
310 scanRequest.scanType = eSIR_PASSIVE_SCAN;
311
312 /* Set min and max channel time to zero */
313 scanRequest.minChnTime = 0;
314 scanRequest.maxChnTime = 0;
315
316 /* Set BSSType to default type */
317 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700318
319#ifndef SOFTAP_CHANNEL_RANGE
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 /*Scan all the channels */
321 scanRequest.ChannelInfo.numOfChannels = 0;
322
323 scanRequest.ChannelInfo.ChannelList = NULL;
324
325 scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN;//eCSR_SCAN_REQUEST_11D_SCAN;
326
327#else
328
329 sapGetChannelList(sapContext, &channelList, &numOfChannels);
330
331 /*Scan the channels in the list*/
332 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700333
Jeff Johnson295189b2012-06-20 16:38:30 -0700334 scanRequest.ChannelInfo.ChannelList = channelList;
335
336 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
337
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530338 sapContext->numofChannel = numOfChannels;
339
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 sapContext->channelList = channelList;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700341
Jeff Johnson295189b2012-06-20 16:38:30 -0700342#endif
343 /* Set requestType to Full scan */
344
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530345 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
346 FL("Auto Channel Selection Scan"));
Jeff Johnson295189b2012-06-20 16:38:30 -0700347
Jeff Johnson43971f52012-07-17 12:26:56 -0700348 halStatus = sme_ScanRequest(hHal,
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 0,//Not used in csrScanRequest
350 &scanRequest,
351 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
352 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
353 sapContext);//void * pContext scanRequestID filled up
Jeff Johnson43971f52012-07-17 12:26:56 -0700354 if (eHAL_STATUS_SUCCESS != halStatus)
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530356 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
357 FL("Auto Channel Selection Scan fail %d!!!"), halStatus);
358 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
359 FL("SoftAP Configuring for default channel, Ch= %d"),
360 sapContext->channel);
Masti, Narayanraddi6b61cf52016-04-19 19:34:10 +0530361 /*
362 * In case of error, select channel based on band
363 * configured in .ini
364 */
365 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND,
366 &operating_band);
367 if (operating_band == eSAP_RF_SUBBAND_5_LOW_GHZ ||
368 operating_band == eSAP_RF_SUBBAND_5_MID_GHZ ||
369 operating_band == eSAP_RF_SUBBAND_5_HIGH_GHZ)
370 {
371 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
372 FL("Default channel selection from band %d"),
373 operating_band);
374
375 (operating_band == eSAP_RF_SUBBAND_5_LOW_GHZ) ?
376 (sapContext->channel = SAP_DEFAULT_LOW_5GHZ_CHANNEL) :
377 (operating_band == eSAP_RF_SUBBAND_5_MID_GHZ) ?
378 (sapContext->channel = SAP_DEFAULT_MID_5GHZ_CHANNEL) :
379 (operating_band == eSAP_RF_SUBBAND_5_HIGH_GHZ) ?
380 (sapContext->channel =
381 SAP_DEFAULT_HIGH_5GHZ_CHANNEL) : 0;
382
383 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
384 FL("channel selected to start bss %d"),
385 sapContext->channel);
386 }
387 else
388 {
389 sapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
390 }
Hanumantha Reddy Pothulad4d6f7c2016-03-30 16:28:45 +0530391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392#ifdef SOFTAP_CHANNEL_RANGE
393 if(sapContext->channelList != NULL)
394 {
Hanumantha Reddy Pothulad4d6f7c2016-03-30 16:28:45 +0530395 sapContext->channel = sapContext->channelList[0];
396 vos_mem_free(sapContext->channelList);
397 sapContext->channelList = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 }
399#endif
400 /* Fill in the event structure */
401 sapEventInit(sapEvent);
402 /* Handle event */
403 vosStatus = sapFsm(sapContext, sapEvent);
404 }
405 else
406 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530407 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
408 FL("Auto Channel Selection Scan Success"
409 " scanRequestID=%d, Ch= %d"),
410 scanRequestID, sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 }
412
413 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700414 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 {
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530416 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
417 FL("For configured channel, Ch= %d"), sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700418
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530419#ifdef WLAN_FEATURE_AP_HT40_24G
420 if (vos_get_concurrency_mode() != VOS_STA_SAP)
421 {
422 if ((sapContext->channel <= SIR_11B_CHANNEL_END)
423 && (sapContext->channel > RF_CHAN_1))
424 {
425 // OBSS Scan for P2P GO/SAP where Auto Channel Selection is Disable
426 vosStatus = sapGetChannelListForObss(hHal, sapContext,
427 &channelList, &numOfChannels);
428 if (VOS_STATUS_SUCCESS == vosStatus && channelList != NULL)
429 {
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +0530430
431 if (sapCheckHT40SecondaryIsNotAllowed(sapContext))
432 {
433 if(channelList != NULL)
434 {
435 vos_mem_free(channelList);
436 channelList = NULL;
437 }
438 goto disable24GChannelBonding;
439 }
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530440 vos_mem_zero(&scanRequest, sizeof(scanRequest));
441
442 /* Set scanType to Passive scan */
443 scanRequest.scanType = eSIR_PASSIVE_SCAN;
444
445 /* Set min and max channel time to zero */
446 scanRequest.minChnTime = CSR_ACTIVE_MIN_CHANNEL_TIME;
447 scanRequest.maxChnTime = CSR_ACTIVE_MAX_CHANNEL_TIME;
448
449 /* Set BSSType to default type */
450 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
451
452 /*Scan the channels in the list*/
453 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
454 scanRequest.ChannelInfo.ChannelList = channelList;
455 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
456 sapContext->channelList = channelList;
457
458 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
459 FL("OBSS Scan for SAP/P2P GO: Ch= %d"),
460 sapContext->channel);
461
462 halStatus = sme_ScanRequest(hHal,
463 0,//Not used in csrScanRequest
464 &scanRequest,
465 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
466 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
467 sapContext);//void * pContext scanRequestID filled up
468
469 if (eHAL_STATUS_SUCCESS != halStatus)
470 {
471 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
472 FL("OBSS ScanRequest Fail %d!!!"),
473 halStatus);
474 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
475 FL("SoftAP Configuring for default channel, Ch= %d"),
476 sapContext->channel);
477
478 if(sapContext->channelList != NULL)
479 {
480 vos_mem_free(sapContext->channelList);
481 sapContext->channelList = NULL;
482 }
483 goto disable24GChannelBonding;
484 }
485 else
486 {
487 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
488 FL("OBSS ScanRequest Success, scanRequestID=%d"
489 " Ch= %d"), scanRequestID, sapContext->channel);
490 goto startgo;
491 }
492 }
493 else
494 {
495 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
496 FL("Failed to Prepare the OBSS Scan channel list"));
497 goto disable24GChannelBonding;
498 }
499disable24GChannelBonding:
500 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
501 FL("Disable Channel Bonding"));
502 /* Disable Channel Bonding for 2.4GHz */
503 sme_UpdateChannelBondingMode24G(hHal,
504 PHY_SINGLE_CHANNEL_CENTERED);
505 }
506 else
507 {
508 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
509 FL("No concurrency & Channel: %d"),
510 sapContext->channel);
511 goto selectChannelBonding;
512 }
513 }
514 else
515 {
516 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
517 FL("With concurrency & Channel: %d"),
518 sapContext->channel);
519 goto selectChannelBonding;
520 }
521#endif
522
523#ifdef WLAN_FEATURE_AP_HT40_24G
524selectChannelBonding:
525 if (sapContext->channel > SIR_11B_CHANNEL_END)
526#endif
Abhishek Singh02b823e2017-10-30 17:53:20 +0530527 sme_SelectCBMode(hHal, sapPhyMode,
528 sapContext->channel, eHT_MAX_CHANNEL_WIDTH);
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +0530529
530 /* Fill in the event structure */
531 // Eventhough scan was not done, means a user set channel was chosen
532 sapEventInit(sapEvent);
533 /* Handle event */
534 vosStatus = sapFsm(sapContext, sapEvent);
535 }
536#ifdef WLAN_FEATURE_AP_HT40_24G
537startgo:
538#endif
539 /* If scan failed, get default channel and advance state
540 * machine as success with default channel. Have to wait
541 * for the call back to be called to get the channel cannot
542 * advance state machine here as said above */
543
544 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
545 FL("Before exiting sapGotoChannelSel channel=%d"),
546 sapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700547
548 return VOS_STATUS_SUCCESS;
549}// sapGotoChannelSel
550
551/*==========================================================================
552 FUNCTION sapGotoStarting
553
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700554 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 Function for initiating start bss request for SME
556
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700557 DEPENDENCIES
558 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700559
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700560 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700561
562 IN
563 sapContext : Sap Context value
564 sapEvent : State machine event
565 bssType : Type of bss to start, INRA AP
566 status : Return the SAP status here
567
568 RETURN VALUE
569 The VOS_STATUS code associated with performing the operation
570
571 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700572
573 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700574============================================================================*/
575VOS_STATUS
576sapGotoStarting
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700577(
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 ptSapContext sapContext,
579 ptWLAN_SAPEvent sapEvent,
580 eCsrRoamBssType bssType
581)
582{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700583 /* tHalHandle */
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
585 eHalStatus halStatus;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700586
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700588 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 -0700589 sapContext->key_type = 0x05;
590 sapContext->key_length = 32;
591 vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700592
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700593 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 if (NULL == hHal)
595 {
596 /* we have a serious problem */
597 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700598 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 return VOS_STATUS_E_FAULT;
600 }
601
602 //TODO: What shall we do if failure????
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700603 halStatus = pmcRequestFullPower( hHal,
604 WLANSAP_pmcFullPwrReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 sapContext,
606 eSME_REASON_OTHER);
607
608 /* Open SME Session for Softap */
609 halStatus = sme_OpenSession(hHal,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700610 &WLANSAP_RoamCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 sapContext,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700612 sapContext->self_mac_addr,
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 &sapContext->sessionId);
614
615 if(eHAL_STATUS_SUCCESS != halStatus )
616 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 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 -0700618 return VOS_STATUS_E_FAILURE;
619 }
620
621 return VOS_STATUS_SUCCESS;
622}// sapGotoStarting
623
624/*==========================================================================
625 FUNCTION sapGotoDisconnecting
626
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700627 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 Processing of SAP FSM Disconnecting state
629
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700630 DEPENDENCIES
631 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700632
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700633 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700634
635 IN
636 sapContext : Sap Context value
637 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700638
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 RETURN VALUE
640 The VOS_STATUS code associated with performing the operation
641
642 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700643
644 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700645============================================================================*/
646VOS_STATUS
647sapGotoDisconnecting
648(
649 ptSapContext sapContext
650)
651{
652 eHalStatus halStatus;
653 tHalHandle hHal;
654
655 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
656 if (NULL == hHal)
657 {
658 /* we have a serious problem */
659 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700660 "In %s, invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 return VOS_STATUS_E_FAULT;
662 }
663
664 sapFreeRoamProfile(&sapContext->csrRoamProfile);
665 halStatus = sme_RoamStopBss(hHal, sapContext->sessionId);
666 if(eHAL_STATUS_SUCCESS != halStatus )
667 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700668 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 -0700669 return VOS_STATUS_E_FAILURE;
670 }
671
672 return VOS_STATUS_SUCCESS;
673}
674
675static eHalStatus sapRoamSessionCloseCallback(void *pContext)
676{
677 ptSapContext sapContext = (ptSapContext)pContext;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700678 return sapSignalHDDevent(sapContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 eSAP_STOP_BSS_EVENT, (v_PVOID_t) eSAP_STATUS_SUCCESS);
680}
681
682/*==========================================================================
683 FUNCTION sapGotoDisconnected
684
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700685 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 Function for setting the SAP FSM to Disconnection state
687
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700688 DEPENDENCIES
689 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700690
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700691 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700692
693 IN
694 sapContext : Sap Context value
695 sapEvent : State machine event
696 status : Return the SAP status here
697
698 RETURN VALUE
699 The VOS_STATUS code associated with performing the operation
700
701 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700702
703 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700704============================================================================*/
705VOS_STATUS
706sapGotoDisconnected
707(
708 ptSapContext sapContext
709)
710{
711 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
712 tWLAN_SAPEvent sapEvent;
713 // Processing has to be coded
714 // Clean up stations from TL etc as AP BSS is shut down then set event
715 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;// hardcoded
716 sapEvent.params = 0;
717 sapEvent.u1 = 0;
718 sapEvent.u2 = 0;
719 /* Handle event */
720 vosStatus = sapFsm(sapContext, &sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700721
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 return vosStatus;
723}
724
725/*==========================================================================
726 FUNCTION sapSignalHDDevent
727
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700728 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 Function for HDD to send the event notification using callback
730
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700731 DEPENDENCIES
732 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700733
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700734 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700735
736 IN
737 sapContext : Sap Context value
738 pCsrRoamInfo : Pointer to CSR roam information
739 sapHddevent : SAP HDD event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700740 context : to pass the element for future support
741
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 RETURN VALUE
743 The VOS_STATUS code associated with performing the operation
744
745 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700746
747 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700748============================================================================*/
749VOS_STATUS
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700750sapSignalHDDevent
751(
Jeff Johnson295189b2012-06-20 16:38:30 -0700752 ptSapContext sapContext, /* sapContext value */
753 tCsrRoamInfo *pCsrRoamInfo,
754 eSapHddEvent sapHddevent,
755 void *context
756)
757{
758 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
759 tSap_Event sapApAppEvent; /* This now encodes ALL event types */
760 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
761
762 /* Format the Start BSS Complete event to return... */
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530763 if (NULL == sapContext->pfnSapEventCallback)
764 {
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530765 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
766 FL("HDD Event callaback invalid"));
Siddharth Bhal8d921e72014-05-03 12:52:43 +0530767 return VOS_STATUS_E_INVAL;
768 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700769
770 switch (sapHddevent)
771 {
772 case eSAP_STA_ASSOC_IND:
Madan Mohan Koyyalamudi8bdd3112012-09-24 13:55:14 -0700773 // TODO - Indicate the assoc request indication to OS
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_IND;
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530775 if (!pCsrRoamInfo) {
776 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
777 FL("Got NULL Roam Info in event %d"), eSAP_STA_ASSOC_IND);
778 return VOS_STATUS_E_INVAL;
779 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700780 vos_mem_copy( &sapApAppEvent.sapevt.sapAssocIndication.staMac, pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
781 sapApAppEvent.sapevt.sapAssocIndication.staId = pCsrRoamInfo->staId;
782 sapApAppEvent.sapevt.sapAssocIndication.status = 0;
783 // Required for indicating the frames to upper layer
784 sapApAppEvent.sapevt.sapAssocIndication.beaconLength = pCsrRoamInfo->beaconLength;
785 sapApAppEvent.sapevt.sapAssocIndication.beaconPtr = pCsrRoamInfo->beaconPtr;
786 sapApAppEvent.sapevt.sapAssocIndication.assocReqLength = pCsrRoamInfo->assocReqLength;
787 sapApAppEvent.sapevt.sapAssocIndication.assocReqPtr = pCsrRoamInfo->assocReqPtr;
788 sapApAppEvent.sapevt.sapAssocIndication.fWmmEnabled = pCsrRoamInfo->wmmEnabledSta;
789 if ( pCsrRoamInfo->u.pConnectedProfile != NULL )
790 {
791 sapApAppEvent.sapevt.sapAssocIndication.negotiatedAuthType = pCsrRoamInfo->u.pConnectedProfile->AuthType;
792 sapApAppEvent.sapevt.sapAssocIndication.negotiatedUCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->EncryptionType;
793 sapApAppEvent.sapevt.sapAssocIndication.negotiatedMCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->mcEncryptionType;
794 sapApAppEvent.sapevt.sapAssocIndication.fAuthRequired = pCsrRoamInfo->fAuthRequired;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700795 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700796 break;
797 case eSAP_START_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530798 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
799 FL("SAP event callback event = %s"),
800 "eSAP_START_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 sapApAppEvent.sapHddEventCode = eSAP_START_BSS_EVENT;
802 sapApAppEvent.sapevt.sapStartBssCompleteEvent.status = (eSapStatus )context;
803 if(pCsrRoamInfo != NULL ){
804 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = pCsrRoamInfo->staId;
805 }
806 else
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700807 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 sapApAppEvent.sapevt.sapStartBssCompleteEvent.operatingChannel = (v_U8_t)sapContext->channel;
809 break;
810
811 case eSAP_STOP_BSS_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530812 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
813 FL("SAP event callback event = %s"),
814 "eSAP_STOP_BSS_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 sapApAppEvent.sapHddEventCode = eSAP_STOP_BSS_EVENT;
816 sapApAppEvent.sapevt.sapStopBssCompleteEvent.status = (eSapStatus )context;
817 break;
818
819 case eSAP_STA_ASSOC_EVENT:
820 {
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530821 tSap_StationAssocReassocCompleteEvent *event =
822 &sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent;
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530823 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
824 FL("SAP event callback event = %s"),
825 "eSAP_STA_ASSOC_EVENT");
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530826 vos_mem_zero(event, sizeof(event));
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530827 if (!pCsrRoamInfo) {
828 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
829 FL("Got NULL Roam Info in event %d"),
830 eSAP_STA_ASSOC_EVENT);
831 return VOS_STATUS_E_INVAL;
832 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 if (pCsrRoamInfo->fReassocReq)
834 sapApAppEvent.sapHddEventCode = eSAP_STA_REASSOC_EVENT;
835 else
836 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_EVENT;
837
838 //TODO: Need to fill the SET KEY information and pass to HDD
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530839 vos_mem_copy( &event->staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700840 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530841 event->staId = pCsrRoamInfo->staId ;
842 event->statusCode = pCsrRoamInfo->statusCode;
843 event->iesLen = pCsrRoamInfo->rsnIELen;
844 vos_mem_copy(event->ies, pCsrRoamInfo->prsnIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700845 pCsrRoamInfo->rsnIELen);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700846
847 if(pCsrRoamInfo->addIELen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 {
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530849 v_U8_t len = event->iesLen;
850 event->iesLen += pCsrRoamInfo->addIELen;
851 vos_mem_copy(&event->ies[len], pCsrRoamInfo->paddIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 pCsrRoamInfo->addIELen);
853 }
854
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530855 event->rate_flags = pCsrRoamInfo->maxRateFlags;
Deepthi Gowriae6a1662015-10-12 12:59:37 +0530856
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530857 event->wmmEnabled = pCsrRoamInfo->wmmEnabledSta;
858 event->status = (eSapStatus )context;
859 event->ch_width = pCsrRoamInfo->ch_width;
860 event->chan_info = pCsrRoamInfo->chan_info;
861 event->HTCaps = pCsrRoamInfo->ht_caps;
862 event->VHTCaps = pCsrRoamInfo->vht_caps;
863
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 //TODO: Need to fill sapAuthType
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +0530865 //event->SapAuthType = pCsrRoamInfo->pProfile->negotiatedAuthType;
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 break;
867 }
868
869 case eSAP_STA_DISASSOC_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530870 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
871 FL("SAP event callback event = %s"),
872 "eSAP_STA_DISASSOC_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700873 sapApAppEvent.sapHddEventCode = eSAP_STA_DISASSOC_EVENT;
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530874 if (!pCsrRoamInfo) {
875 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
876 FL("Got NULL Roam Info in event %d"),
877 eSAP_STA_DISASSOC_EVENT);
878 return VOS_STATUS_E_INVAL;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 vos_mem_copy( &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700881 pCsrRoamInfo->peerMac, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staId = pCsrRoamInfo->staId;
883 if (pCsrRoamInfo->reasonCode == eCSR_ROAM_RESULT_FORCED)
884 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_USR_INITATED_DISASSOC;
885 else
886 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_MAC_INITATED_DISASSOC;
887
888 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
889 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.status = (eSapStatus )context;
890 break;
891
892 case eSAP_STA_SET_KEY_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530893 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
894 FL("SAP event callback event = %s"),
895 "eSAP_STA_SET_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 sapApAppEvent.sapHddEventCode = eSAP_STA_SET_KEY_EVENT;
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530897 if (!pCsrRoamInfo) {
898 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
899 FL("Got NULL Roam Info in event %d"),
900 eSAP_STA_SET_KEY_EVENT);
901 return VOS_STATUS_E_INVAL;
902 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.status = (eSapStatus )context;
904 vos_mem_copy(&sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.peerMacAddr,
905 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
906 break;
907
908 case eSAP_STA_DEL_KEY_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_STA_DEL_KEY_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 sapApAppEvent.sapHddEventCode = eSAP_STA_DEL_KEY_EVENT;
913 sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.status = (eSapStatus )context;
914 //TODO: Should we need to send the key information
915 //sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.keyId = ;
916 break;
917
918 case eSAP_STA_MIC_FAILURE_EVENT :
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530919 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
920 FL("SAP event callback event = %s"),
921 "eSAP_STA_MIC_FAILURE_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 sapApAppEvent.sapHddEventCode = eSAP_STA_MIC_FAILURE_EVENT;
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530923 if (!pCsrRoamInfo) {
924 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
925 FL("Got NULL Roam Info in event %d"),
926 eSAP_STA_MIC_FAILURE_EVENT);
927 return VOS_STATUS_E_INVAL;
928 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700929 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.srcMacAddr,
930 pCsrRoamInfo->u.pMICFailureInfo->srcMacAddr,
931 sizeof(tSirMacAddr));
932 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.staMac,
933 pCsrRoamInfo->u.pMICFailureInfo->taMacAddr,
934 sizeof(tSirMacAddr));
935 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.dstMacAddr,
936 pCsrRoamInfo->u.pMICFailureInfo->dstMacAddr,
937 sizeof(tSirMacAddr));
938 sapApAppEvent.sapevt.sapStationMICFailureEvent.multicast = pCsrRoamInfo->u.pMICFailureInfo->multicast;
939 sapApAppEvent.sapevt.sapStationMICFailureEvent.IV1 = pCsrRoamInfo->u.pMICFailureInfo->IV1;
940 sapApAppEvent.sapevt.sapStationMICFailureEvent.keyId = pCsrRoamInfo->u.pMICFailureInfo->keyId;
941 vos_mem_copy( sapApAppEvent.sapevt.sapStationMICFailureEvent.TSC,
942 pCsrRoamInfo->u.pMICFailureInfo->TSC,
943 SIR_CIPHER_SEQ_CTR_SIZE);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700944 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700945
946 case eSAP_ASSOC_STA_CALLBACK_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530947 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
948 FL("SAP event callback event = %s"),
949 "eSAP_ASSOC_STA_CALLBACK_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700951
Jeff Johnson295189b2012-06-20 16:38:30 -0700952 case eSAP_WPS_PBC_PROBE_REQ_EVENT:
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530953 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
954 FL("SAP event callback event = %s"),
955 "eSAP_WPS_PBC_PROBE_REQ_EVENT");
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 sapApAppEvent.sapHddEventCode = eSAP_WPS_PBC_PROBE_REQ_EVENT;
gaurank kathpalia12db0e32018-04-18 12:38:40 +0530957 if (!pCsrRoamInfo) {
958 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
959 FL("Got NULL Roam Info in event %d"),
960 eSAP_WPS_PBC_PROBE_REQ_EVENT);
961 return VOS_STATUS_E_INVAL;
962 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700963 vos_mem_copy( &sapApAppEvent.sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq,
964 pCsrRoamInfo->u.pWPSPBCProbeReq,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700965 sizeof(tSirWPSPBCProbeReq));
Jeff Johnson295189b2012-06-20 16:38:30 -0700966 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 case eSAP_REMAIN_CHAN_READY:
968 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530969 FL("SAP event callback event = %s"),
970 "eSAP_REMAIN_CHAN_READY");
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 sapApAppEvent.sapHddEventCode = eSAP_REMAIN_CHAN_READY;
972 break;
973 case eSAP_SEND_ACTION_CNF:
974 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530975 FL("SAP event callback event = %s"),
976 "eSAP_SEND_ACTION_CNF");
Jeff Johnson295189b2012-06-20 16:38:30 -0700977 sapApAppEvent.sapHddEventCode = eSAP_SEND_ACTION_CNF;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700978 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
Jeff Johnson295189b2012-06-20 16:38:30 -0700979 break;
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800980
981 case eSAP_DISCONNECT_ALL_P2P_CLIENT:
982 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530983 FL("SAP event callback event = %s"),
984 "eSAP_DISCONNECT_ALL_P2P_CLIENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800985 sapApAppEvent.sapHddEventCode = eSAP_DISCONNECT_ALL_P2P_CLIENT;
986 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
987 break;
988
989 case eSAP_MAC_TRIG_STOP_BSS_EVENT :
990 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +0530991 FL("SAP event callback event = %s"),
992 "eSAP_MAC_TRIG_STOP_BSS_EVENT");
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800993 sapApAppEvent.sapHddEventCode = eSAP_MAC_TRIG_STOP_BSS_EVENT;
994 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
995 break;
996
Jeff Johnson295189b2012-06-20 16:38:30 -0700997
998 case eSAP_UNKNOWN_STA_JOIN:
999 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +05301000 FL("SAP event callback event = %s"),
1001 "eSAP_UNKNOWN_STA_JOIN");
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 sapApAppEvent.sapHddEventCode = eSAP_UNKNOWN_STA_JOIN;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001003 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapUnknownSTAJoin.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 (v_PVOID_t)context, sizeof(v_MACADDR_t));
1005 break;
1006
1007 case eSAP_MAX_ASSOC_EXCEEDED:
1008 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Agarwal Ashishae800dd2015-06-24 12:44:48 +05301009 FL("SAP event callback event = %s"),
1010 "eSAP_MAX_ASSOC_EXCEEDED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 sapApAppEvent.sapHddEventCode = eSAP_MAX_ASSOC_EXCEEDED;
gaurank kathpalia12db0e32018-04-18 12:38:40 +05301012 if (!pCsrRoamInfo) {
1013 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1014 FL("Got NULL Roam Info in event %d"),
1015 eSAP_MAX_ASSOC_EXCEEDED);
1016 return VOS_STATUS_E_INVAL;
1017 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001018 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapMaxAssocExceeded.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -07001019 (v_PVOID_t)pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t));
1020 break;
Abhishek Singhe8ebb922017-11-01 13:30:26 +05301021 case eSAP_CHANNEL_CHANGED_EVENT:
1022 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1023 "In %s, SAP event callback event = %s",
1024 __func__, "eSAP_CHANNEL_CHANGE_EVENT");
1025 sapApAppEvent.sapHddEventCode = eSAP_CHANNEL_CHANGED_EVENT;
1026 sapApAppEvent.sapevt.sap_chan_selected.new_chan =
1027 sapContext->channel;
1028 break;
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +05301029 case eSAP_STA_LOSTLINK_DETECTED:
1030 {
1031 tSap_StationDisassocCompleteEvent* disassoc_comp;
Jeff Johnson295189b2012-06-20 16:38:30 -07001032
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +05301033 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1034 "In %s SAP event callback event = %s",
1035 __func__, "eSAP_STA_LOSTLINK_DETECTED");
1036
1037 sapApAppEvent.sapHddEventCode = eSAP_STA_LOSTLINK_DETECTED;
gaurank kathpalia12db0e32018-04-18 12:38:40 +05301038 if (!pCsrRoamInfo) {
1039 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1040 FL("Got NULL Roam Info in event %d"),
1041 eSAP_STA_LOSTLINK_DETECTED);
1042 return VOS_STATUS_E_INVAL;
1043 }
Hanumanth Reddy Pothula57323632017-12-06 17:55:09 +05301044 disassoc_comp =
1045 &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent;
1046 disassoc_comp->reason = pCsrRoamInfo->reasonCode;
1047 disassoc_comp->staId = pCsrRoamInfo->staId;
1048 vos_mem_copy(disassoc_comp->staMac.bytes,
1049 pCsrRoamInfo->peerMac, VOS_MAC_ADDR_SIZE);
1050 break;
1051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 default:
Agarwal Ashishae800dd2015-06-24 12:44:48 +05301053 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1054 FL("SAP Unknown callback event = %d"),
1055 sapHddevent);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 break;
1057 }
1058 vosStatus = (*sapContext->pfnSapEventCallback)
1059 (
1060 &sapApAppEvent,
1061 sapContext->pUsrContext//userdataforcallback - hdd opaque handle
1062 );
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001063
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 return vosStatus;
1065
1066} /* sapSignalApAppStartBssEvent */
1067
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301068/**
1069 * wlansap_channel_change_request() -Initiate the channel change req to new
1070 * channel
1071 * @sapContext - sap context on which channel change is required
1072 *
1073 * Return VOS_STATUS
1074 */
1075static VOS_STATUS wlansap_channel_change_request(ptSapContext sapContext)
1076{
1077 tHalHandle hal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1078 VOS_STATUS vos_status = VOS_STATUS_E_FAILURE;
1079
1080 if (!hal) {
1081 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1082 "In %s, Hall is NULL", __func__);
1083 return VOS_STATUS_E_INVAL;
1084 }
1085 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_MED,
1086 FL("sapdfs: Send channel change on sapctx[%pK]"),
1087 sapContext);
1088 sapContext->channel = sapContext->ecsa_info.new_channel;
1089 if (sapContext->csrRoamProfile.ChannelInfo.numOfChannels == 0 ||
1090 sapContext->csrRoamProfile.ChannelInfo.ChannelList == NULL) {
1091 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1092 FL("Invalid channel list"));
1093 return VOS_STATUS_E_FAULT;
1094 }
1095 sapContext->csrRoamProfile.ChannelInfo.ChannelList[0] = sapContext->channel;
1096 vos_status = sme_roam_channel_change_req(hal, sapContext->bssid,
1097 sapContext->ecsa_info.new_channel,
Abhishek Singh02b823e2017-10-30 17:53:20 +05301098 &sapContext->csrRoamProfile,
1099 sapContext->sessionId);
Abhishek Singhe8ebb922017-11-01 13:30:26 +05301100 if (VOS_IS_STATUS_SUCCESS(vos_status))
1101 sapSignalHDDevent(sapContext, NULL, eSAP_CHANNEL_CHANGED_EVENT, NULL);
1102
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301103 return vos_status;
1104}
1105
1106
Jeff Johnson295189b2012-06-20 16:38:30 -07001107/*==========================================================================
1108 FUNCTION sapFsm
1109
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001110 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 SAP State machine entry function
1112
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001113 DEPENDENCIES
1114 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -07001115
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001116 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -07001117
1118 IN
1119 sapContext : Sap Context value
1120 sapEvent : State machine event
1121 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001122
Jeff Johnson295189b2012-06-20 16:38:30 -07001123 RETURN VALUE
1124 The VOS_STATUS code associated with performing the operation
1125
1126 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001127
1128 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -07001129============================================================================*/
1130VOS_STATUS
1131sapFsm
1132(
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001133 ptSapContext sapContext, /* sapContext value */
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 ptWLAN_SAPEvent sapEvent /* State machine event */
1135)
1136{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001137 /* Retrieve the phy link state machine structure
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 * from the sapContext value
1139 */
1140 eSapFsmStates_t stateVar = sapContext->sapsMachine; /*state var that keeps track of state machine*/
1141 tCsrRoamInfo *roamInfo = (tCsrRoamInfo *)(sapEvent->params);
1142 v_U32_t msg = sapEvent->event; /* State machine input event message */
1143 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
1144
1145 switch (stateVar)
1146 {
1147 case eSAP_DISCONNECTED:
1148 if ((msg == eSAP_HDD_START_INFRA_BSS))
1149 {
1150 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1151 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 -07001152 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Jeff Johnson295189b2012-06-20 16:38:30 -07001153
1154 /* There can be one SAP Session for softap */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001155 if (sapContext->isSapSessionOpen == eSAP_TRUE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 {
1157 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001158 "%s:SME Session is already opened\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 return VOS_STATUS_E_EXISTS;
1160 }
1161
1162 sapContext->sessionId = 0xff;
1163
1164 /* Set SAP device role */
1165 sapContext->sapsMachine = eSAP_CH_SELECT;
1166
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301167#ifdef WLAN_FEATURE_AP_HT40_24G
1168 sapSetObssParm(sapContext);
1169#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* Perform sme_ScanRequest */
1171 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001172
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
1174 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 -07001175 __func__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001176 }
1177 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001178 {
1179 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 -07001180 __func__, "eSAP_DISCONNECTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 }
1182 break;
1183
1184 case eSAP_CH_SELECT:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001185 if (msg == eSAP_MAC_SCAN_COMPLETE)
Jeff Johnson295189b2012-06-20 16:38:30 -07001186 {
1187 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1188 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 -07001189 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001190 // Channel selected. Now can sapGotoStarting
1191 sapContext->sapsMachine = eSAP_STARTING;
1192 // Specify the channel
1193 sapContext->csrRoamProfile.ChannelInfo.numOfChannels = 1;
1194 sapContext->csrRoamProfile.ChannelInfo.ChannelList = &sapContext->csrRoamProfile.operationChannel;
1195 sapContext->csrRoamProfile.operationChannel = (tANI_U8)sapContext->channel;
Abhishek Singhb8289442018-08-17 15:41:12 +05301196
1197 sapSignalHDDevent(sapContext, NULL,
1198 eSAP_CHANNEL_CHANGED_EVENT, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07001199 vosStatus = sapGotoStarting( sapContext, sapEvent, eCSR_BSS_TYPE_INFRA_AP);
1200 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
1201 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 -07001202 __func__, "eSAP_CH_SELECT", "eSAP_STARTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001203 }
1204 else
1205 {
1206 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 -07001207 __func__, "eSAP_CH_SELECT", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 }
1209 break;
1210
1211 case eSAP_STARTING:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001212 if (msg == eSAP_MAC_START_BSS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 {
1214 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1215 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 -07001216 __func__,sapContext->channel, "eSAP_STARTING", "eSAP_STARTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001217
1218 sapContext->sapsMachine = eSAP_STARTED;
1219 /*Action code for transition */
1220 vosStatus = sapSignalHDDevent( sapContext, roamInfo, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
1221
1222 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
1223 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 -07001224 __func__, "eSAP_STARTING", "eSAP_STARTED");
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301225
1226#ifdef WLAN_FEATURE_AP_HT40_24G
1227 /* Initialize the HT2040 timer */
Kaushik, Sushant553a06c2014-11-26 15:29:40 +05301228 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301229 "In %s, Init HT20/40 timer", __func__);
1230
1231 vosStatus = vos_timer_init( &sapContext->sap_HT2040_timer,
1232 VOS_TIMER_TYPE_SW, sap_ht2040_timer_cb,
1233 (v_PVOID_t)sapContext );
1234
1235 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1236 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1237 "In %s, Failed to Init HT20/40 timer", __func__);
1238#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 }
Deepthi Gowri912c7182015-11-25 18:19:16 +05301240 else if ((msg == eSAP_HDD_STOP_INFRA_BSS) ||
1241 (msg == eSAP_MAC_START_FAILS))
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001243 /*Transition from eSAP_STARTING to eSAP_DISCONNECTING (both without substates)*/
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 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 -07001245 __func__, "eSAP_STARTING", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001246
1247 /*Advance outer statevar */
1248 sapContext->sapsMachine = eSAP_DISCONNECTED;
1249 vosStatus = sapSignalHDDevent( sapContext, NULL, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
1250 vosStatus = sapGotoDisconnected(sapContext);
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05301251
1252#ifdef WLAN_FEATURE_AP_HT40_24G
1253 /* Reset the OBSS Affected Channel Range */
1254 if ( (0 != sapContext->affected_start)
1255 && (0 != sapContext->affected_end)
1256 && (0 != sapContext->sap_sec_chan) )
1257 {
1258 sapContext->affected_start = 0;
1259 sapContext->affected_end = 0;
1260 sapContext->sap_sec_chan = 0;
1261 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1262 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1263 sapContext->affected_start, sapContext->affected_end);
1264
1265 }
1266#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001267 /* Close the SME session*/
1268
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001269 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -07001270 {
1271 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1272 if (NULL == hHal)
1273 {
1274 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1275 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001276 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001277 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001278 else if (eHAL_STATUS_SUCCESS ==
Jeff Johnson295189b2012-06-20 16:38:30 -07001279 sme_CloseSession(hHal,
Agrawal Ashish5a3522c2016-03-02 15:08:28 +05301280 sapContext->sessionId, FALSE,
1281 VOS_TRUE, NULL, NULL))
Jeff Johnson295189b2012-06-20 16:38:30 -07001282 {
1283 sapContext->isSapSessionOpen = eSAP_FALSE;
1284 }
1285 }
1286 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001287 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001288 {
1289 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1290 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001291 __func__, "eSAP_STARTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001292 /* Intentionally left blank */
1293 }
1294 break;
1295
1296 case eSAP_STARTED:
1297 if (msg == eSAP_HDD_STOP_INFRA_BSS)
1298 {
1299 /* Transition from eSAP_STARTED to eSAP_DISCONNECTING (both without substates) */
1300 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 -07001301 __func__, "eSAP_STARTED", "eSAP_DISCONNECTING");
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 sapContext->sapsMachine = eSAP_DISCONNECTING;
1303 vosStatus = sapGotoDisconnecting(sapContext);
1304 }
Abhishek Singh02605092017-10-25 14:06:12 +05301305 else if (msg == eSAP_CHANNEL_SWITCH_ANNOUNCEMENT_START ) {
1306 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1307 if (!hHal) {
1308 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1309 "In %s, NULL hHal in state %s, msg %d",
1310 __func__, "eSAP_STARTING", msg);
gaurank kathpalia392e4452018-02-26 15:40:30 +05301311 return eHAL_STATUS_INVALID_PARAMETER;
Abhishek Singh02605092017-10-25 14:06:12 +05301312 }
1313 vosStatus = sme_roam_csa_ie_request(hHal, sapContext->bssid,
1314 sapContext->ecsa_info.new_channel,
Abhishek Singh02b823e2017-10-30 17:53:20 +05301315 sapContext->csrRoamProfile.phyMode,
1316 sapContext->sessionId);
Abhishek Singh02605092017-10-25 14:06:12 +05301317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001318 else
1319 {
1320 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 -07001321 __func__, "eSAP_STARTED", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001322 }
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301323#ifdef WLAN_FEATURE_AP_HT40_24G
1324 /* Reset the OBSS Affected Channel Range */
1325 if ( (0 != sapContext->affected_start)
1326 && (0 != sapContext->affected_end)
1327 && (0 != sapContext->sap_sec_chan) )
1328 {
1329 sapContext->affected_start = 0;
1330 sapContext->affected_end = 0;
1331 sapContext->sap_sec_chan = 0;
1332 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1333 FL("Reset the OBSS Affected Channel Range [%d %d]"),
1334 sapContext->affected_start, sapContext->affected_end);
1335 }
1336
1337 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1338 {
1339 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1340 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1341 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1342 FL("Failed to Stop HT20/40 timer"));
1343 }
1344
1345 vosStatus = vos_timer_destroy(&sapContext->sap_HT2040_timer);
1346 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1347 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1348 FL("Failed to Destroy HT20/40 timer"));
1349#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001350 break;
1351
1352 case eSAP_DISCONNECTING:
1353 if (msg == eSAP_MAC_READY_FOR_CONNECTIONS)
1354 {
1355 /* Transition from eSAP_DISCONNECTING to eSAP_DISCONNECTED (both without substates) */
1356 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 -07001357 __func__, "eSAP_DISCONNECTING", "eSAP_DISCONNECTED");
Jeff Johnson295189b2012-06-20 16:38:30 -07001358
1359 sapContext->sapsMachine = eSAP_DISCONNECTED;
1360 /* Close the SME session*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001361 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -07001362 {
1363 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1364
1365 if (NULL == hHal)
1366 {
1367 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1368 "In %s, NULL hHal in state %s, msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001369 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001370 }
1371 else
1372 {
1373 sapContext->isSapSessionOpen = eSAP_FALSE;
Agrawal Ashish5a3522c2016-03-02 15:08:28 +05301374 sme_CloseSession(hHal,
1375 sapContext->sessionId, TRUE, VOS_TRUE,
1376 NULL, sapContext);
1377
1378 vosStatus = sapSignalHDDevent(sapContext, NULL,
1379 eSAP_STOP_BSS_EVENT,
1380 (v_PVOID_t) eSAP_STATUS_SUCCESS);
Jeff Johnson295189b2012-06-20 16:38:30 -07001381 }
1382 }
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301383 } else if (msg == eSAP_CHANNEL_SELECTION_FAILED)
Peng Xu2446a892014-09-05 17:21:18 +05301384 {
1385 /* Set SAP device role */
1386 sapContext->sapsMachine = eSAP_CH_SELECT;
1387
1388 /* Perform sme_ScanRequest */
1389 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Abhishek Singh550aa8c2017-10-30 17:34:53 +05301390 } else if (msg == eWNI_ECSA_TX_COMPLETED)
1391 {
1392 vosStatus = wlansap_channel_change_request(sapContext);
1393 } else if (msg == eWNI_ECSA_CHANNEL_CHANGE_RSP)
1394 {
1395 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1396 FL("in state %s, event msg %d result %d"),
1397 "eSAP_DISCONNECTING ", msg, sapEvent->u2);
1398 if (sapEvent->u2 == eCSR_ROAM_RESULT_FAILURE)
1399 vosStatus = sapGotoDisconnecting(sapContext);
Peng Xu2446a892014-09-05 17:21:18 +05301400 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001401 else
Jeff Johnson295189b2012-06-20 16:38:30 -07001402 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001403 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -07001404 "In %s, in state %s, invalid event msg %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001405 __func__, "eSAP_DISCONNECTING", msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 }
1407 break;
1408 }
1409 return vosStatus;
1410}// sapFsm
1411
1412
1413eSapStatus
1414sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, tCsrRoamProfile *profile)
1415{
1416 //Create Roam profile for SoftAP to connect
1417 profile->BSSType = eCSR_BSS_TYPE_INFRA_AP;
1418 profile->SSIDs.numOfSSIDs = 1;
1419 profile->csrPersona = pconfig_params->persona;
1420
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001421 vos_mem_zero(profile->SSIDs.SSIDList[0].SSID.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -07001422 sizeof(profile->SSIDs.SSIDList[0].SSID.ssId));
1423
1424 //Flag to not broadcast the SSID information
1425 profile->SSIDs.SSIDList[0].ssidHidden = pconfig_params->SSIDinfo.ssidHidden;
1426
1427 profile->SSIDs.SSIDList[0].SSID.length = pconfig_params->SSIDinfo.ssid.length;
1428 vos_mem_copy(&profile->SSIDs.SSIDList[0].SSID.ssId, pconfig_params->SSIDinfo.ssid.ssId,
1429 sizeof(pconfig_params->SSIDinfo.ssid.ssId));
1430
1431 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1432
1433 if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1434 {
1435 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1436 }
1437 else if (pconfig_params->authType == eSAP_SHARED_KEY)
1438 {
1439 profile->negotiatedAuthType = eCSR_AUTH_TYPE_SHARED_KEY;
1440 }
1441 else
1442 {
1443 profile->negotiatedAuthType = eCSR_AUTH_TYPE_AUTOSWITCH;
1444 }
1445
1446 profile->AuthType.numEntries = 1;
1447 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM;
1448
1449 //Always set the Encryption Type
1450 profile->EncryptionType.numEntries = 1;
1451 profile->EncryptionType.encryptionType[0] = pconfig_params->RSNEncryptType;
1452
1453 profile->mcEncryptionType.numEntries = 1;
1454 profile->mcEncryptionType.encryptionType[0] = pconfig_params->mcRSNEncryptType;
1455
1456 if (pconfig_params->privacy & eSAP_SHARED_KEY)
1457 {
1458 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_SHARED_KEY;
1459 }
1460
1461 profile->privacy = pconfig_params->privacy;
1462 profile->fwdWPSPBCProbeReq = pconfig_params->fwdWPSPBCProbeReq;
1463
1464 if (pconfig_params->authType == eSAP_SHARED_KEY)
1465 {
1466 profile->csr80211AuthType = eSIR_SHARED_KEY;
1467 }
1468 else if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
1469 {
1470 profile->csr80211AuthType = eSIR_OPEN_SYSTEM;
1471 }
1472 else
1473 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001474 profile->csr80211AuthType = eSIR_AUTO_SWITCH;
Jeff Johnson295189b2012-06-20 16:38:30 -07001475 }
1476
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001477 //Initialize we are not going to use it
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 profile->pWPAReqIE = NULL;
1479 profile->nWPAReqIELength = 0;
1480
1481 //set the RSN/WPA IE
1482 profile->pRSNReqIE = NULL;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001483 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001484 if (pconfig_params->RSNWPAReqIELength)
1485 {
1486 profile->pRSNReqIE = vos_mem_malloc(pconfig_params->RSNWPAReqIELength);
1487 if( NULL == profile->pRSNReqIE )
1488 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001489 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, " %s Fail to alloc memory", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001490 return eSAP_STATUS_FAILURE;
1491 }
Kapil Gupta137ef892016-12-13 19:38:00 +05301492 vos_mem_copy(profile->pRSNReqIE, pconfig_params->RSNWPAReqIE,
1493 pconfig_params->RSNWPAReqIELength);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001494 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001495 }
1496
1497 // Turn off CB mode
1498 profile->CBMode = eCSR_CB_OFF;
1499
1500 //set the phyMode to accept anything
1501 //Best means everything because it covers all the things we support
1502 profile->phyMode = pconfig_params->SapHw_mode; /*eCSR_DOT11_MODE_BEST*/
1503
1504 //Configure beaconInterval
1505 profile->beaconInterval = (tANI_U16)pconfig_params->beacon_int;
1506
1507 // set DTIM period
1508 profile->dtimPeriod = pconfig_params->dtim_period;
1509
1510 //set Uapsd enable bit
1511 profile->ApUapsdEnable = pconfig_params->UapsdEnable;
1512
1513 //Enable protection parameters
1514 profile->protEnabled = pconfig_params->protEnabled;
1515 profile->obssProtEnabled = pconfig_params->obssProtEnabled;
1516 profile->cfg_protection = pconfig_params->ht_capab;
1517
1518 //country code
1519 if (pconfig_params->countryCode[0])
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001520 vos_mem_copy(profile->countryCode, pconfig_params->countryCode, WNI_CFG_COUNTRY_CODE_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07001521 profile->ieee80211d = pconfig_params->ieee80211d;
Jeff Johnson295189b2012-06-20 16:38:30 -07001522 //wps config info
1523 profile->wps_state = pconfig_params->wps_state;
1524
Chet Lanctot8cecea22014-02-11 19:09:36 -08001525#ifdef WLAN_FEATURE_11W
1526 // MFP capable/required
1527 profile->MFPCapable = pconfig_params->mfpCapable ? 1 : 0;
1528 profile->MFPRequired = pconfig_params->mfpRequired ? 1 : 0;
1529#endif
1530
Jeff Johnson295189b2012-06-20 16:38:30 -07001531 return eSAP_STATUS_SUCCESS; /* Success. */
1532}
1533
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001534/**
1535 * FUNCTION: sapConvertSapPhyModeToCsrPhyMode
1536 * Called internally by SAP
1537 */
1538eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode )
1539{
1540 switch (sapPhyMode)
1541 {
1542 case (eSAP_DOT11_MODE_abg):
1543 return eCSR_DOT11_MODE_abg;
1544 case (eSAP_DOT11_MODE_11b):
1545 return eCSR_DOT11_MODE_11b;
1546 case (eSAP_DOT11_MODE_11g):
1547 return eCSR_DOT11_MODE_11g;
1548 case (eSAP_DOT11_MODE_11n):
1549 return eCSR_DOT11_MODE_11n;
1550 case (eSAP_DOT11_MODE_11g_ONLY):
1551 return eCSR_DOT11_MODE_11g_ONLY;
1552 case (eSAP_DOT11_MODE_11n_ONLY):
1553 return eCSR_DOT11_MODE_11n_ONLY;
1554 case (eSAP_DOT11_MODE_11b_ONLY):
1555 return eCSR_DOT11_MODE_11b_ONLY;
1556#ifdef WLAN_FEATURE_11AC
1557 case (eSAP_DOT11_MODE_11ac_ONLY):
1558 return eCSR_DOT11_MODE_11ac_ONLY;
1559 case (eSAP_DOT11_MODE_11ac):
1560 return eCSR_DOT11_MODE_11ac;
1561#endif
Deepthi Gowri849c1e42014-11-05 15:57:22 +05301562 case (eSAP_DOT11_MODE_11a):
1563 return eCSR_DOT11_MODE_11a;
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -07001564 default:
1565 return eCSR_DOT11_MODE_AUTO;
1566 }
1567}
Jeff Johnson295189b2012-06-20 16:38:30 -07001568
1569void sapFreeRoamProfile(tCsrRoamProfile *profile)
1570{
1571 if(profile->pRSNReqIE)
1572 {
1573 vos_mem_free(profile->pRSNReqIE);
1574 profile->pRSNReqIE = NULL;
1575 }
1576}
1577
1578
1579void
1580sapSortMacList(v_MACADDR_t *macList, v_U8_t size)
1581{
1582 v_U8_t outer, inner;
1583 v_MACADDR_t temp;
1584 v_SINT_t nRes = -1;
1585
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301586 if ((NULL == macList) || (size >= MAX_ACL_MAC_ADDRESS))
1587 {
1588 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1589 "In %s, either buffer is NULL or size = %d is more."
1590 ,__func__, size);
1591 return;
1592 }
1593
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 for(outer = 0; outer < size; outer++)
1595 {
1596 for(inner = 0; inner < size - 1; inner++)
1597 {
1598 nRes = vos_mem_compare2((macList + inner)->bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1599 if (nRes > 0)
1600 {
1601 vos_mem_copy(temp.bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1602 vos_mem_copy((macList + inner + 1)->bytes, (macList + inner)->bytes, sizeof(v_MACADDR_t));
1603 vos_mem_copy((macList + inner)->bytes, temp.bytes, sizeof(v_MACADDR_t));
1604 }
1605 }
1606 }
1607}
1608
1609eSapBool
1610sapSearchMacList(v_MACADDR_t *macList, v_U8_t num_mac, v_U8_t *peerMac, v_U8_t *index)
1611{
1612 v_SINT_t nRes = -1;
1613 v_S7_t nStart = 0, nEnd, nMiddle;
1614 nEnd = num_mac - 1;
1615
1616 while (nStart <= nEnd)
1617 {
1618 nMiddle = (nStart + nEnd) / 2;
1619 nRes = vos_mem_compare2(&macList[nMiddle], peerMac, sizeof(v_MACADDR_t));
1620
1621 if (0 == nRes)
1622 {
1623 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1624 "search SUCC");
1625 // "index equals NULL" means the caller does not need the
1626 // index value of the peerMac being searched
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001627 if (index != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 {
1629 *index = (v_U8_t) nMiddle;
1630 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1631 "index %d", *index);
1632 }
1633 return eSAP_TRUE;
1634 }
1635 if (nRes < 0)
1636 nStart = nMiddle + 1;
1637 else
1638 nEnd = nMiddle - 1;
1639 }
1640
1641 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1642 "search not succ");
1643 return eSAP_FALSE;
1644}
1645
1646void
1647sapAddMacToACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t *peerMac)
1648{
1649 v_SINT_t nRes = -1;
1650 int i;
1651 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"add acl entered");
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301652
Mahesh A Saptasagarbeb0ba02014-08-01 12:23:59 +05301653 if ((NULL == macList) || (*size >= MAX_ACL_MAC_ADDRESS))
Padma, Santhosh Kumarb8bc08a2014-05-26 19:11:20 +05301654 {
1655 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1656 "In %s, either buffer is NULL or size %d is incorrect."
1657 , __func__, *size);
1658 return;
1659 }
1660
Jeff Johnson295189b2012-06-20 16:38:30 -07001661 for (i=((*size)-1); i>=0; i--)
1662 {
1663 nRes = vos_mem_compare2(&macList[i], peerMac, sizeof(v_MACADDR_t));
1664 if (nRes > 0)
1665 {
1666 /* Move alphabetically greater mac addresses one index down to allow for insertion
1667 of new mac in sorted order */
1668 vos_mem_copy((macList+i+1)->bytes,(macList+i)->bytes, sizeof(v_MACADDR_t));
1669 }
1670 else
1671 {
1672 break;
1673 }
1674 }
1675 //This should also take care of if the element is the first to be added in the list
1676 vos_mem_copy((macList+i+1)->bytes, peerMac, sizeof(v_MACADDR_t));
1677 // increment the list size
1678 (*size)++;
1679}
1680
1681void
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001682sapRemoveMacFromACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t index)
Jeff Johnson295189b2012-06-20 16:38:30 -07001683{
1684 int i;
1685 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"remove acl entered");
1686 /* return if the list passed is empty. Ideally this should never happen since this funcn is always
1687 called after sapSearchMacList to get the index of the mac addr to be removed and this will
1688 only get called if the search is successful. Still no harm in having the check */
Padma, Santhosh Kumar72c28472014-05-15 21:18:11 +05301689 if ((macList==NULL) || (*size == 0) || (*size > MAX_ACL_MAC_ADDRESS))
1690 {
1691 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1692 "In %s, either buffer is NULL or size %d is incorrect."
1693 , __func__, *size);
1694 return;
1695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001696 for (i=index; i<((*size)-1); i++)
1697 {
1698 /* Move mac addresses starting from "index" passed one index up to delete the void
1699 created by deletion of a mac address in ACL */
1700 vos_mem_copy((macList+i)->bytes,(macList+i+1)->bytes, sizeof(v_MACADDR_t));
1701 }
1702 // The last space should be made empty since all mac addesses moved one step up
1703 vos_mem_zero((macList+(*size)-1)->bytes, sizeof(v_MACADDR_t));
1704 //reduce the list size by 1
1705 (*size)--;
1706}
1707
1708void sapPrintACL(v_MACADDR_t *macList, v_U8_t size)
1709{
1710 int i;
Arif Hussain24bafea2013-11-15 15:10:03 -08001711 v_BYTE_t *macArray;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001712 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"print acl entered");
Padma, Santhosh Kumar307003d2014-04-21 17:09:29 +05301713
1714 if ((NULL == macList) || (size == 0) || (size >= MAX_ACL_MAC_ADDRESS))
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1717 "In %s, either buffer is NULL or size %d is incorrect."
1718 , __func__, size);
1719 return;
1720 }
1721
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 for (i=0; i<size; i++)
1723 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001724 macArray = (macList+i)->bytes;
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussain24bafea2013-11-15 15:10:03 -08001726 "** ACL entry %i - "MAC_ADDRESS_STR, i,
1727 MAC_ADDR_ARRAY(macArray));
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 }
1729 return;
1730}
1731
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301732/*==========================================================================
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301733 FUNCTION sapGetStaId
1734
1735 DESCRIPTION
1736 Get the STA ID from Mac address.
1737
1738 DEPENDENCIES
1739 NA.
1740
1741 PARAMETERS
1742
1743 IN
1744 sapContext : Sap Context value
1745 staId : STA ID
1746 pCsrRoamInfo : Pointer to CSR info
1747
1748 RETURN VALUE
1749
1750 SIDE EFFECTS
1751============================================================================*/
1752
1753VOS_STATUS sapGetStaId(ptSapContext sapContext, v_U8_t *staId,
1754 tCsrRoamInfo *pCsrRoamInfo)
1755{
1756 v_U8_t i;
1757
1758 for (i = 0; i < WLAN_MAX_STA_COUNT; i++)
1759 {
1760 if (vos_mem_compare(&sapContext->aStaInfo[i].macAddrSTA,
1761 pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t))
1762 && sapContext->aStaInfo[i].isUsed)
1763 {
1764 *staId = i;
1765 return VOS_STATUS_SUCCESS;
1766 }
1767 }
1768 return VOS_STATUS_E_FAILURE;
1769}
1770
1771/*==========================================================================
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301772 FUNCTION sapAddHT40IntolerantSta
1773
1774 DESCRIPTION
1775 Add HT40 Intolerant STA & Move SAP from HT40 to HT20
1776
1777 DEPENDENCIES
1778 NA.
1779
1780 PARAMETERS
1781
1782 IN
1783 sapContext : Sap Context value
1784 pCsrRoamInfo : Pointer to CSR info
1785
1786 RETURN VALUE
1787
1788 SIDE EFFECTS
1789============================================================================*/
1790
1791#ifdef WLAN_FEATURE_AP_HT40_24G
1792void sapAddHT40IntolerantSta(ptSapContext sapContext,
1793 tCsrRoamInfo *pCsrRoamInfo)
1794{
1795
1796 tHalHandle hHal;
1797 v_U8_t cbMode;
1798 tANI_U8 staId;
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301799 eHalStatus halStatus;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301800 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301801
1802 /* tHalHandle */
1803 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1804
1805 if (NULL == hHal)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1808 FL("In invalid hHal"));
1809 return;
1810 }
1811
1812 staId = pCsrRoamInfo->staId;
1813
1814 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1815 FL("Add HT40 MHz Intolerant STA :"
1816 MAC_ADDRESS_STR " STA ID: %d"),
1817 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1818 staId);
1819
1820 // Get Channel Bonding Mode
1821 cbMode = sme_GetChannelBondingMode24G(hHal);
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301822
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301823 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301824 FL("Current Channel Bonding Mode: %d "
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301825 "HT40IntolerantSet: %d"),
1826 cbMode, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1827
1828 if(sapContext->aStaInfo[staId].isHT40IntolerantSet)
1829 {
1830 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1831 FL("HT40Intolerant is Already Set: %d"),
1832 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1833 return;
1834 }
1835
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301836 spin_lock_bh(&sapContext->staInfo_lock);
1837
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301838 sapContext->aStaInfo[staId].isHT40IntolerantSet = 1;
1839 sapContext->numHT40IntoSta++;
1840
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301841 spin_unlock_bh(&sapContext->staInfo_lock);
1842
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301843 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1844 FL("Total No of HT40 Intolerant STA: %d"
1845 " STA ID: %d HT40IntolerantSet: %d"),
1846 sapContext->numHT40IntoSta,
1847 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301848
1849 /* Stop HT20/40 Timer */
1850 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1851 {
1852 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1853 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1854 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1855 FL("Failed to Stop HT20/40 timer"));
1856 }
1857
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301858 if(cbMode)
1859 {
1860 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1861 FL("Move SAP from HT40 to HT20"));
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301862
1863 halStatus = sme_SetHT2040Mode(hHal, sapContext->sessionId,
1864 PHY_SINGLE_CHANNEL_CENTERED);
1865
1866 if (halStatus == eHAL_STATUS_FAILURE)
1867 {
1868 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1869 FL("Failed to change HT20/40 mode"));
1870 return;
1871 }
1872
1873 /* Disable Channel Bonding for 2.4GHz */
1874 sme_UpdateChannelBondingMode24G(hHal,
1875 PHY_SINGLE_CHANNEL_CENTERED);
1876
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301877 }
1878 else
1879 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
Hardik Kantilal Patel62a3a762014-11-21 12:55:57 +05301880 FL("SAP is Already in HT20"));
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301881}
1882
1883/*==========================================================================
1884 FUNCTION sapRemoveHT40IntolerantSta
1885
1886 DESCRIPTION
1887 Remove HT40 Intolerant STA & Move SAP from HT40 to HT20
1888
1889 DEPENDENCIES
1890 NA.
1891
1892 PARAMETERS
1893
1894 IN
1895 sapContext : Sap Context value
1896 pCsrRoamInfo : Pointer to CSR info
1897
1898 RETURN VALUE
1899
1900 SIDE EFFECTS
1901============================================================================*/
1902
1903void sapRemoveHT40IntolerantSta(ptSapContext sapContext,
1904 tCsrRoamInfo *pCsrRoamInfo)
1905{
1906 tANI_U8 staId;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301907 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
1908 unsigned int delay;
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301909
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301910 vosStatus = sapGetStaId(sapContext, &staId, pCsrRoamInfo);
1911
1912 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1913 {
1914 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1915 FL("ERROR: SAP Failed to find sta id!!"));
1916 return;
1917 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301918
1919 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1920 FL("Remove HT40 MHz Intolerant STA :"
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301921 MAC_ADDRESS_STR " STA ID: %d"
1922 " HT40IntolerantSet:%d"),
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301923 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac),
1924 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1925
1926 if(!sapContext->aStaInfo[staId].isHT40IntolerantSet)
1927 {
1928 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1929 FL("HT40Intolerant is not Set: %d"),
1930 sapContext->aStaInfo[staId].isHT40IntolerantSet);
1931 return;
1932 }
1933
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301934 spin_lock_bh(&sapContext->staInfo_lock);
1935 sapContext->aStaInfo[staId].isHT40IntolerantSet = 0;
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301936
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301937 if (sapContext->numHT40IntoSta > 0)
1938 sapContext->numHT40IntoSta--;
1939
Hardik Kantilal Patel5306e992014-12-17 15:45:17 +05301940 spin_unlock_bh(&sapContext->staInfo_lock);
1941
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301942 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1943 FL("Total No of HT40 Intolerant STA: %d"
1944 " STA ID: %d HT40IntolerantSet: %d"),
1945 sapContext->numHT40IntoSta,
1946 staId, sapContext->aStaInfo[staId].isHT40IntolerantSet);
1947
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +05301948 if ((!sapCheckHT40SecondaryIsNotAllowed(sapContext))
1949 && (!sapContext->numHT40IntoSta))
Hardik Kantilal Patelce62e8b2014-11-21 16:31:38 +05301950 {
1951 /* Stop Previous Running HT20/40 Timer & Start timer
1952 with (OBSS TransitionDelayFactor * obss interval)
1953 delay after time out move AP from HT20 -> HT40
1954 mode
1955 */
1956 if (VOS_TIMER_STATE_RUNNING == sapContext->sap_HT2040_timer.state)
1957 {
1958 vosStatus = vos_timer_stop(&sapContext->sap_HT2040_timer);
1959 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1960 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1961 FL("Failed to Stop HT20/40 timer"));
1962 }
1963
1964 delay =
1965 (sapContext->ObssScanInterval * sapContext->ObssTransitionDelayFactor);
1966
1967 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1968 FL("Start HT20/40 itransition"
1969 " timer (%d sec)"), delay);
1970
1971 vosStatus = vos_timer_start( &sapContext->sap_HT2040_timer,
1972 (delay * 1000));
1973
1974 if (!VOS_IS_STATUS_SUCCESS(vosStatus))
1975 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1976 FL("Failed to Start HT20/40 timer"));
1977 }
Hardik Kantilal Patel1ba630f2014-11-21 04:32:05 +05301978 return;
1979}
1980#endif
1981
Jeff Johnson295189b2012-06-20 16:38:30 -07001982VOS_STATUS
1983sapIsPeerMacAllowed(ptSapContext sapContext, v_U8_t *peerMac)
1984{
1985 if (eSAP_ALLOW_ALL == sapContext->eSapMacAddrAclMode)
1986 return VOS_STATUS_SUCCESS;
1987
1988 if (sapSearchMacList(sapContext->acceptMacList, sapContext->nAcceptMac, peerMac, NULL))
1989 return VOS_STATUS_SUCCESS;
1990
1991 if (sapSearchMacList(sapContext->denyMacList, sapContext->nDenyMac, peerMac, NULL))
1992 {
Arif Hussain24bafea2013-11-15 15:10:03 -08001993 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1994 "In %s, Peer "MAC_ADDRESS_STR" in deny list",
1995 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 return VOS_STATUS_E_FAILURE;
1997 }
1998
1999 // A new station CAN associate, unless in deny list. Less stringent mode
2000 if (eSAP_ACCEPT_UNLESS_DENIED == sapContext->eSapMacAddrAclMode)
2001 return VOS_STATUS_SUCCESS;
2002
2003 // A new station CANNOT associate, unless in accept list. More stringent mode
2004 if (eSAP_DENY_UNLESS_ACCEPTED == sapContext->eSapMacAddrAclMode)
2005 {
Arif Hussain24bafea2013-11-15 15:10:03 -08002006 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
2007 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_DENY_UNLESS_ACCEPTED",
2008 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 return VOS_STATUS_E_FAILURE;
2010 }
2011
2012 /* The new STA is neither in accept list nor in deny list. In this case, deny the association
2013 * but send a wifi event notification indicating the mac address being denied
2014 */
2015 if (eSAP_SUPPORT_ACCEPT_AND_DENY == sapContext->eSapMacAddrAclMode)
2016 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002017 sapSignalHDDevent(sapContext, NULL, eSAP_UNKNOWN_STA_JOIN, (v_PVOID_t)peerMac);
Arif Hussain24bafea2013-11-15 15:10:03 -08002018 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
2019 "In %s, Peer "MAC_ADDRESS_STR" denied, Mac filter mode is eSAP_SUPPORT_ACCEPT_AND_DENY",
2020 __func__, MAC_ADDR_ARRAY(peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -07002021 return VOS_STATUS_E_FAILURE;
2022 }
2023 return VOS_STATUS_SUCCESS;
2024}
2025
2026#ifdef SOFTAP_CHANNEL_RANGE
2027static VOS_STATUS sapGetChannelList(ptSapContext sapContext,
2028 v_U8_t **channelList, v_U8_t *numberOfChannels)
2029{
2030 v_U32_t startChannelNum;
2031 v_U32_t endChannelNum;
2032 v_U32_t operatingBand;
2033 v_U8_t loopCount;
2034 v_U8_t *list;
2035 v_U8_t channelCount;
2036 v_U8_t bandStartChannel;
2037 v_U8_t bandEndChannel ;
2038 v_U32_t enableLTECoex;
2039 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
Abhishek Singhb51853c2014-03-13 18:26:41 +05302040#ifdef FEATURE_WLAN_CH_AVOID
2041 v_U8_t i;
2042#endif
2043
Jeff Johnson295189b2012-06-20 16:38:30 -07002044
2045 if (NULL == hHal)
2046 {
2047 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2048 "Invalid HAL pointer from pvosGCtx on sapGetChannelList");
2049 *numberOfChannels = 0;
2050 *channelList = NULL;
2051 return VOS_STATUS_E_FAULT;
2052 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002053
Peng Xu2446a892014-09-05 17:21:18 +05302054 if ( eCSR_BAND_ALL == sapContext->scanBandPreference)
Jeff Johnson295189b2012-06-20 16:38:30 -07002055 {
Peng Xu2446a892014-09-05 17:21:18 +05302056
2057 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &startChannelNum);
2058 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum);
2059 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
2060
2061 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2062 "%s:sapGetChannelList: startChannel %d,EndChannel %d,Operatingband:%d",
2063 __func__,startChannelNum,endChannelNum,operatingBand);
2064
2065 switch(operatingBand)
2066 {
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302067 case eSAP_RF_SUBBAND_2_4_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302068 bandStartChannel = RF_CHAN_1;
2069 bandEndChannel = RF_CHAN_14;
2070 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002071
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302072 case eSAP_RF_SUBBAND_5_LOW_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302073 bandStartChannel = RF_CHAN_36;
2074 bandEndChannel = RF_CHAN_64;
2075 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002076
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302077 case eSAP_RF_SUBBAND_5_MID_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302078 bandStartChannel = RF_CHAN_100;
2079 bandEndChannel = RF_CHAN_140;
2080 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002081
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302082 case eSAP_RF_SUBBAND_5_HIGH_GHZ:
Peng Xu2446a892014-09-05 17:21:18 +05302083 bandStartChannel = RF_CHAN_149;
2084 bandEndChannel = RF_CHAN_165;
2085 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002086
Leela Venkata Kiran Kumar Reddy Chirala9f6566c2014-09-05 19:06:58 +05302087 case eSAP_RF_SUBBAND_5_ALL_GHZ:
2088 bandStartChannel = RF_CHAN_36;
2089 bandEndChannel = RF_CHAN_165;
2090 break;
2091
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 default:
Peng Xu2446a892014-09-05 17:21:18 +05302093 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2094 "sapGetChannelList:OperatingBand not valid ");
2095 /* assume 2.4 GHz */
2096 bandStartChannel = RF_CHAN_1;
2097 bandEndChannel = RF_CHAN_14;
2098 break;
2099 }
2100 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2101 "%s: expanded startChannel %d,EndChannel %d,Operatingband:%d",
2102 __func__,startChannelNum,endChannelNum,operatingBand);
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 }
Peng Xu2446a892014-09-05 17:21:18 +05302104 else
2105 {
2106 if ( sapContext->allBandScanned == eSAP_FALSE )
2107 {
2108 //first band scan
2109 sapContext->currentPreferredBand = sapContext->scanBandPreference;
2110 }
2111 else
2112 {
2113 //scan next band
2114 if ( eCSR_BAND_24 == sapContext->scanBandPreference )
2115 sapContext->currentPreferredBand = eCSR_BAND_5G;
2116 else
2117 sapContext->currentPreferredBand = eCSR_BAND_24;
2118 }
2119 switch(sapContext->currentPreferredBand)
2120 {
2121 case eCSR_BAND_24:
2122 bandStartChannel = RF_CHAN_1;
2123 bandEndChannel = RF_CHAN_14;
2124 startChannelNum = 1;
2125 endChannelNum = 14;
2126 break;
2127
2128 case eCSR_BAND_5G:
2129 bandStartChannel = RF_CHAN_36;
2130 bandEndChannel = RF_CHAN_165;
2131 startChannelNum = 36;
2132 endChannelNum = 165;
2133 break;
2134
2135 default:
2136 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2137 "sapGetChannelList:bandPreference not valid ");
2138 /* assume 2.4 GHz */
2139 bandStartChannel = RF_CHAN_1;
2140 bandEndChannel = RF_CHAN_14;
2141 startChannelNum = 1;
2142 endChannelNum = 14;
2143 break;
2144 }
2145 }
2146
2147 ccmCfgGetInt(hHal, WNI_CFG_ENABLE_LTE_COEX, &enableLTECoex);
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 /*Check if LTE coex is enabled and 2.4GHz is selected*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002149 if (enableLTECoex && (bandStartChannel == RF_CHAN_1)
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 && (bandEndChannel == RF_CHAN_14))
2151 {
2152 /*Set 2.4GHz upper limit to channel 9 for LTE COEX*/
2153 bandEndChannel = RF_CHAN_9;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 /* Allocate the max number of channel supported */
2156 list = (v_U8_t *)vos_mem_malloc(NUM_5GHZ_CHANNELS);
2157 if (NULL == list)
2158 {
2159 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002160 "%s: Unable to allocate channel list", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 *numberOfChannels = 0;
2162 *channelList = NULL;
2163 return VOS_STATUS_E_RESOURCES;
2164 }
2165
2166 /*Search for the Active channels in the given range */
2167 channelCount = 0;
2168 for( loopCount = bandStartChannel; loopCount <= bandEndChannel; loopCount++ )
2169 {
2170 if((startChannelNum <= rfChannels[loopCount].channelNum)&&
2171 (endChannelNum >= rfChannels[loopCount].channelNum ))
2172 {
2173 if( regChannels[loopCount].enabled )
2174 {
Abhishek Singhb51853c2014-03-13 18:26:41 +05302175#ifdef FEATURE_WLAN_CH_AVOID
2176 for( i = 0; i < NUM_20MHZ_RF_CHANNELS; i++ )
2177 {
2178 if( (safeChannels[i].channelNumber ==
2179 rfChannels[loopCount].channelNum) )
2180 {
2181 /* Check if channel is safe */
2182 if(VOS_TRUE == safeChannels[i].isSafe)
2183 {
2184#endif
2185 list[channelCount] =
2186 rfChannels[loopCount].channelNum;
2187 channelCount++;
2188#ifdef FEATURE_WLAN_CH_AVOID
2189 }
2190 break;
2191 }
2192 }
2193#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 }
2195 }
2196 }
2197 if (0 == channelCount)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002198 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2200 "sapGetChannelList:No active channels present in the given range for the current region");
2201 /*LTE COEX: channel range outside the restricted 2.4GHz band limits*/
2202 if (enableLTECoex && (startChannelNum > bandEndChannel))
2203 {
2204 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
2205 "sapGetChannelList:SAP cannot be started as LTE COEX restricted 2.4GHz limits");
2206 }
2207 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002208
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 /* return the channel list and number of channels to scan*/
2210 *numberOfChannels = channelCount;
2211 if(channelCount != 0)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07002212 {
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 *channelList = list;
2214 }
2215 else
2216 {
2217 *channelList = NULL;
2218 vos_mem_free(list);
2219 }
Peng Xu2446a892014-09-05 17:21:18 +05302220
2221 for (loopCount = 0; loopCount <channelCount; loopCount ++ )
2222 {
2223 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_DEBUG,
2224 "%s: channel number: %d",
2225 __func__,list[loopCount]);
2226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 return VOS_STATUS_SUCCESS;
2228}
2229#endif
Hardik Kantilal Pateldd107952014-11-20 15:24:52 +05302230
2231#ifdef WLAN_FEATURE_AP_HT40_24G
2232static VOS_STATUS sapGetChannelListForObss(tHalHandle halHandle,
2233 ptSapContext psapCtx, v_U8_t **channelList,
2234 v_U8_t *numberOfChannels)
2235{
2236 v_U32_t startChannelNum;
2237 v_U32_t endChannelNum;
2238 v_U8_t loopCount;
2239 v_U8_t channelCount;
2240 v_U8_t *list;
2241
2242 if (eHAL_STATUS_SUCCESS != sapGet24GOBSSAffectedChannel(halHandle, psapCtx))
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2245 "%s:Not able to Get Affected Channel Range for Channel : %d",
2246 __func__, psapCtx->channel);
2247 return VOS_STATUS_E_FAILURE;
2248 }
2249
2250 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2251 "%s: 40 MHz affected channel range: [%d,%d] MHz",
2252 __func__, psapCtx->affected_start, psapCtx->affected_end);
2253
2254 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2255 "%s: SAP Primary & Secondary Channel : [%d,%d] MHz",
2256 __func__, psapCtx->channel, psapCtx->sap_sec_chan);
2257
2258 /* Allocate the max number of channel supported */
2259 list = (v_U8_t *)vos_mem_malloc(RF_CHAN_14 + 1);
2260 if (NULL == list)
2261 {
2262 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
2263 "%s: Unable to allocate channel list", __func__);
2264 *numberOfChannels = 0;
2265 *channelList = NULL;
2266 return VOS_STATUS_E_RESOURCES;
2267 }
2268
2269 /*Search for the Active channels in the given range */
2270 channelCount = 0;
2271 startChannelNum = RF_CHAN_1;
2272 endChannelNum = RF_CHAN_14;
2273 for( loopCount = startChannelNum; loopCount <= endChannelNum; loopCount++ )
2274 {
2275 if ((rfChannels[loopCount].channelNum >= psapCtx->affected_start)
2276 && (rfChannels[loopCount].channelNum <= psapCtx->affected_end))
2277 {
2278 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
2279 "%s: Channel Number: %d State : %d", __func__,
2280 rfChannels[loopCount].channelNum,
2281 vos_nv_getChannelEnabledState(rfChannels[loopCount].channelNum));
2282 list[channelCount] = rfChannels[loopCount].channelNum;
2283 channelCount++;
2284 }
2285 }
2286 /* return the channel list and number of channels to scan*/
2287 *numberOfChannels = channelCount;
2288 if(channelCount != 0)
2289 {
2290 *channelList = list;
2291 }
2292 else
2293 {
2294 *channelList = NULL;
2295 vos_mem_free(list);
2296 }
2297 return VOS_STATUS_SUCCESS;
2298}
2299#endif