blob: 646bba4610306a1c862b0439609e4d18f3ddfd5f [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*===========================================================================
23
24 s a p F s m . C
25
26 OVERVIEW:
27
28 This software unit holds the implementation of the WLAN SAP Finite
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070029 State Machine modules
Jeff Johnson295189b2012-06-20 16:38:30 -070030
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070031 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070032
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070033 Are listed for each API below.
Jeff Johnson295189b2012-06-20 16:38:30 -070034
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070035
Jeff Johnson295189b2012-06-20 16:38:30 -070036 Copyright (c) 2010 QUALCOMM Incorporated.
37 All Rights Reserved.
38 Qualcomm Confidential and Proprietary
39===========================================================================*/
40
41/*===========================================================================
42
43 EDIT HISTORY FOR FILE
44
45
46 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
49
50
51 when who what, where, why
52---------- --- --------------------------------------------------------
532010-03-15 Created module
54
55===========================================================================*/
56
57
58/*----------------------------------------------------------------------------
59 * Include Files
60 * -------------------------------------------------------------------------*/
61#include "sapInternal.h"
62// Pick up the SME API definitions
63#include "sme_Api.h"
64// Pick up the PMC API definitions
65#include "pmcApi.h"
66#include "wlan_nv.h"
67
68/*----------------------------------------------------------------------------
69 * Preprocessor Definitions and Constants
70 * -------------------------------------------------------------------------*/
71
72/*----------------------------------------------------------------------------
73 * Type Declarations
74 * -------------------------------------------------------------------------*/
75
76/*----------------------------------------------------------------------------
77 * Global Data Definitions
78 * -------------------------------------------------------------------------*/
79
80/*----------------------------------------------------------------------------
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070081 * External declarations for global context
Jeff Johnson295189b2012-06-20 16:38:30 -070082 * -------------------------------------------------------------------------*/
83
84/*----------------------------------------------------------------------------
85 * Static Variable Definitions
86 * -------------------------------------------------------------------------*/
87
88/*----------------------------------------------------------------------------
89 * Static Function Declarations and Definitions
90 * -------------------------------------------------------------------------*/
91#ifdef SOFTAP_CHANNEL_RANGE
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -070092static VOS_STATUS sapGetChannelList(ptSapContext sapContext, v_U8_t **channelList,
Jeff Johnson295189b2012-06-20 16:38:30 -070093 v_U8_t *numberOfChannels);
94#endif
95/*----------------------------------------------------------------------------
96 * Externalized Function Definitions
97* -------------------------------------------------------------------------*/
98
99/*----------------------------------------------------------------------------
100 * Function Declarations and Documentation
101 * -------------------------------------------------------------------------*/
102
103/*==========================================================================
104 FUNCTION sapEventInit
105
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700106 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700107 Function for initializing sWLAN_SAPEvent structure
108
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700109 DEPENDENCIES
110 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700111
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700112 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700113
114 IN
115 sapEvent : State machine event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700116
Jeff Johnson295189b2012-06-20 16:38:30 -0700117 RETURN VALUE
118
119 None
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700120
121 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700122============================================================================*/
123static inline void sapEventInit(ptWLAN_SAPEvent sapEvent)
124{
125 sapEvent->event = eSAP_MAC_SCAN_COMPLETE;
126 sapEvent->params = 0;
127 sapEvent->u1 = 0;
128 sapEvent->u2 = 0;
129}
130
131/*==========================================================================
132 FUNCTION sapGotoChannelSel
133
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700134 DESCRIPTION
135 Function for initiating scan request for SME
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700137 DEPENDENCIES
138 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700139
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700140 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700141
142 IN
143 sapContext : Sap Context value
144 sapEvent : State machine event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146 RETURN VALUE
147 The VOS_STATUS code associated with performing the operation
148
149 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700150
151 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700152============================================================================*/
153VOS_STATUS
154sapGotoChannelSel
155(
156 ptSapContext sapContext,
157 ptWLAN_SAPEvent sapEvent
158)
159{
160 /* Initiate a SCAN request */
Jeff Johnson43971f52012-07-17 12:26:56 -0700161 eHalStatus halStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -0700162 tCsrScanRequest scanRequest;/* To be initialised if scan is required */
163 v_U32_t scanRequestID = 0;
164 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
165
166#ifdef SOFTAP_CHANNEL_RANGE
167 v_U8_t *channelList = NULL;
168 v_U8_t numOfChannels = 0 ;
169#endif
170 tHalHandle hHal;
171 tANI_U8 channel;
172
173 hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME, sapContext->pvosGCtx);
174 if (NULL == hHal)
175 {
176 /* we have a serious problem */
177 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
178 "In %s, invalid hHal", __FUNCTION__);
179 return VOS_STATUS_E_FAULT;
180 }
181
182 /*If STA-AP concurrency is enabled take the concurrent connected channel first. In other cases wpa_supplicant should take care */
183 if (vos_get_concurrency_mode() == VOS_STA_SAP)
184 {
185 channel = sme_GetConcurrentOperationChannel(hHal);
186
187 if (channel)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700188 { /*if a valid channel is returned then use concurrent channel.
Jeff Johnson295189b2012-06-20 16:38:30 -0700189 Else take whatever comes from configuartion*/
190 sapContext->channel = channel;
191 }
192 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700193
194 if (sapContext->channel == AUTO_CHANNEL_SELECT)
Jeff Johnson295189b2012-06-20 16:38:30 -0700195 {
196 vos_mem_zero(&scanRequest, sizeof(scanRequest));
197
198 /* Set scanType to Passive scan */
199 scanRequest.scanType = eSIR_PASSIVE_SCAN;
200
201 /* Set min and max channel time to zero */
202 scanRequest.minChnTime = 0;
203 scanRequest.maxChnTime = 0;
204
205 /* Set BSSType to default type */
206 scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700207
208#ifndef SOFTAP_CHANNEL_RANGE
Jeff Johnson295189b2012-06-20 16:38:30 -0700209 /*Scan all the channels */
210 scanRequest.ChannelInfo.numOfChannels = 0;
211
212 scanRequest.ChannelInfo.ChannelList = NULL;
213
214 scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN;//eCSR_SCAN_REQUEST_11D_SCAN;
215
216#else
217
218 sapGetChannelList(sapContext, &channelList, &numOfChannels);
219
220 /*Scan the channels in the list*/
221 scanRequest.ChannelInfo.numOfChannels = numOfChannels;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700222
Jeff Johnson295189b2012-06-20 16:38:30 -0700223 scanRequest.ChannelInfo.ChannelList = channelList;
224
225 scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
226
227 sapContext->channelList = channelList;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700228
Jeff Johnson295189b2012-06-20 16:38:30 -0700229#endif
230 /* Set requestType to Full scan */
231
232 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, calling sme_ScanRequest", __FUNCTION__);
233
Jeff Johnson43971f52012-07-17 12:26:56 -0700234 halStatus = sme_ScanRequest(hHal,
Jeff Johnson295189b2012-06-20 16:38:30 -0700235 0,//Not used in csrScanRequest
236 &scanRequest,
237 &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()?
238 &WLANSAP_ScanCallback,//csrScanCompleteCallback callback,
239 sapContext);//void * pContext scanRequestID filled up
Jeff Johnson43971f52012-07-17 12:26:56 -0700240 if (eHAL_STATUS_SUCCESS != halStatus)
Jeff Johnson295189b2012-06-20 16:38:30 -0700241 {
Jeff Johnson43971f52012-07-17 12:26:56 -0700242 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "%s:sme_ScanRequest fail %d!!!", __FUNCTION__, halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "SoftAP Configuring for default channel, Ch= %d", sapContext->channel);
244 /* In case of error, switch to default channel */
245 sapContext->channel = SAP_DEFAULT_CHANNEL;
246
247#ifdef SOFTAP_CHANNEL_RANGE
248 if(sapContext->channelList != NULL)
249 {
250 sapContext->channel = sapContext->channelList[0];
251 vos_mem_free(sapContext->channelList);
252 sapContext->channelList = NULL;
253 }
254#endif
255 /* Fill in the event structure */
256 sapEventInit(sapEvent);
257 /* Handle event */
258 vosStatus = sapFsm(sapContext, sapEvent);
259 }
260 else
261 {
262 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, return from sme_ScanRequest, scanRequestID=%d, Ch= %d",
263 __FUNCTION__, scanRequestID, sapContext->channel);
264 }
265
266 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700267 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 {
269 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, for configured channel, Ch= %d", __FUNCTION__, sapContext->channel);
270 /* Fill in the event structure */
271 // Eventhough scan was not done, means a user set channel was chosen
272 sapEventInit(sapEvent);
273 /* Handle event */
274 vosStatus = sapFsm(sapContext, sapEvent);
275 }
276
277 /* If scan failed, get default channel and advance state machine as success with default channel */
278 /* Have to wait for the call back to be called to get the channel cannot advance state machine here as said above */
279 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, before exiting sapGotoChannelSel channel=%d", __FUNCTION__, sapContext->channel);
280
281 return VOS_STATUS_SUCCESS;
282}// sapGotoChannelSel
283
284/*==========================================================================
285 FUNCTION sapGotoStarting
286
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700287 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 Function for initiating start bss request for SME
289
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700290 DEPENDENCIES
291 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700292
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700293 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700294
295 IN
296 sapContext : Sap Context value
297 sapEvent : State machine event
298 bssType : Type of bss to start, INRA AP
299 status : Return the SAP status here
300
301 RETURN VALUE
302 The VOS_STATUS code associated with performing the operation
303
304 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700305
306 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700307============================================================================*/
308VOS_STATUS
309sapGotoStarting
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700310(
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 ptSapContext sapContext,
312 ptWLAN_SAPEvent sapEvent,
313 eCsrRoamBssType bssType
314)
315{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700316 /* tHalHandle */
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
318 eHalStatus halStatus;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700319
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 /*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700321 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 -0700322 sapContext->key_type = 0x05;
323 sapContext->key_length = 32;
324 vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700325
Jeff Johnson295189b2012-06-20 16:38:30 -0700326 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __FUNCTION__);
327 if (NULL == hHal)
328 {
329 /* we have a serious problem */
330 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
331 "In %s, invalid hHal", __FUNCTION__);
332 return VOS_STATUS_E_FAULT;
333 }
334
335 //TODO: What shall we do if failure????
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700336 halStatus = pmcRequestFullPower( hHal,
337 WLANSAP_pmcFullPwrReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 sapContext,
339 eSME_REASON_OTHER);
340
341 /* Open SME Session for Softap */
342 halStatus = sme_OpenSession(hHal,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700343 &WLANSAP_RoamCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 sapContext,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700345 sapContext->self_mac_addr,
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 &sapContext->sessionId);
347
348 if(eHAL_STATUS_SUCCESS != halStatus )
349 {
350 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "Error: In %s calling sme_RoamConnect status = %d", __FUNCTION__, halStatus);
351 return VOS_STATUS_E_FAILURE;
352 }
353
354 return VOS_STATUS_SUCCESS;
355}// sapGotoStarting
356
357/*==========================================================================
358 FUNCTION sapGotoDisconnecting
359
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700360 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 Processing of SAP FSM Disconnecting state
362
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700363 DEPENDENCIES
364 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700365
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700366 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700367
368 IN
369 sapContext : Sap Context value
370 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700371
Jeff Johnson295189b2012-06-20 16:38:30 -0700372 RETURN VALUE
373 The VOS_STATUS code associated with performing the operation
374
375 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700376
377 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700378============================================================================*/
379VOS_STATUS
380sapGotoDisconnecting
381(
382 ptSapContext sapContext
383)
384{
385 eHalStatus halStatus;
386 tHalHandle hHal;
387
388 hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
389 if (NULL == hHal)
390 {
391 /* we have a serious problem */
392 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
393 "In %s, invalid hHal", __FUNCTION__);
394 return VOS_STATUS_E_FAULT;
395 }
396
397 sapFreeRoamProfile(&sapContext->csrRoamProfile);
398 halStatus = sme_RoamStopBss(hHal, sapContext->sessionId);
399 if(eHAL_STATUS_SUCCESS != halStatus )
400 {
401 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "Error: In %s calling sme_RoamStopBss status = %d", __FUNCTION__, halStatus);
402 return VOS_STATUS_E_FAILURE;
403 }
404
405 return VOS_STATUS_SUCCESS;
406}
407
408static eHalStatus sapRoamSessionCloseCallback(void *pContext)
409{
410 ptSapContext sapContext = (ptSapContext)pContext;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700411 return sapSignalHDDevent(sapContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 eSAP_STOP_BSS_EVENT, (v_PVOID_t) eSAP_STATUS_SUCCESS);
413}
414
415/*==========================================================================
416 FUNCTION sapGotoDisconnected
417
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700418 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 Function for setting the SAP FSM to Disconnection state
420
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700421 DEPENDENCIES
422 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700423
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700424 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700425
426 IN
427 sapContext : Sap Context value
428 sapEvent : State machine event
429 status : Return the SAP status here
430
431 RETURN VALUE
432 The VOS_STATUS code associated with performing the operation
433
434 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700435
436 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700437============================================================================*/
438VOS_STATUS
439sapGotoDisconnected
440(
441 ptSapContext sapContext
442)
443{
444 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
445 tWLAN_SAPEvent sapEvent;
446 // Processing has to be coded
447 // Clean up stations from TL etc as AP BSS is shut down then set event
448 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;// hardcoded
449 sapEvent.params = 0;
450 sapEvent.u1 = 0;
451 sapEvent.u2 = 0;
452 /* Handle event */
453 vosStatus = sapFsm(sapContext, &sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700454
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 return vosStatus;
456}
457
458/*==========================================================================
459 FUNCTION sapSignalHDDevent
460
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700461 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 Function for HDD to send the event notification using callback
463
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700464 DEPENDENCIES
465 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700466
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700467 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700468
469 IN
470 sapContext : Sap Context value
471 pCsrRoamInfo : Pointer to CSR roam information
472 sapHddevent : SAP HDD event
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700473 context : to pass the element for future support
474
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 RETURN VALUE
476 The VOS_STATUS code associated with performing the operation
477
478 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700479
480 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700481============================================================================*/
482VOS_STATUS
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700483sapSignalHDDevent
484(
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 ptSapContext sapContext, /* sapContext value */
486 tCsrRoamInfo *pCsrRoamInfo,
487 eSapHddEvent sapHddevent,
488 void *context
489)
490{
491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
492 tSap_Event sapApAppEvent; /* This now encodes ALL event types */
493 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
494
495 /* Format the Start BSS Complete event to return... */
496 VOS_ASSERT(sapContext->pfnSapEventCallback);
497
498 switch (sapHddevent)
499 {
500 case eSAP_STA_ASSOC_IND:
501 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "TODO: Indicate the assoc request indication to OS\n");
502 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_IND;
503
504 vos_mem_copy( &sapApAppEvent.sapevt.sapAssocIndication.staMac, pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
505 sapApAppEvent.sapevt.sapAssocIndication.staId = pCsrRoamInfo->staId;
506 sapApAppEvent.sapevt.sapAssocIndication.status = 0;
507 // Required for indicating the frames to upper layer
508 sapApAppEvent.sapevt.sapAssocIndication.beaconLength = pCsrRoamInfo->beaconLength;
509 sapApAppEvent.sapevt.sapAssocIndication.beaconPtr = pCsrRoamInfo->beaconPtr;
510 sapApAppEvent.sapevt.sapAssocIndication.assocReqLength = pCsrRoamInfo->assocReqLength;
511 sapApAppEvent.sapevt.sapAssocIndication.assocReqPtr = pCsrRoamInfo->assocReqPtr;
512 sapApAppEvent.sapevt.sapAssocIndication.fWmmEnabled = pCsrRoamInfo->wmmEnabledSta;
513 if ( pCsrRoamInfo->u.pConnectedProfile != NULL )
514 {
515 sapApAppEvent.sapevt.sapAssocIndication.negotiatedAuthType = pCsrRoamInfo->u.pConnectedProfile->AuthType;
516 sapApAppEvent.sapevt.sapAssocIndication.negotiatedUCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->EncryptionType;
517 sapApAppEvent.sapevt.sapAssocIndication.negotiatedMCEncryptionType = pCsrRoamInfo->u.pConnectedProfile->mcEncryptionType;
518 sapApAppEvent.sapevt.sapAssocIndication.fAuthRequired = pCsrRoamInfo->fAuthRequired;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700519 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 break;
521 case eSAP_START_BSS_EVENT:
522 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
523 __FUNCTION__, "eSAP_START_BSS_EVENT");
524 sapApAppEvent.sapHddEventCode = eSAP_START_BSS_EVENT;
525 sapApAppEvent.sapevt.sapStartBssCompleteEvent.status = (eSapStatus )context;
526 if(pCsrRoamInfo != NULL ){
527 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = pCsrRoamInfo->staId;
528 }
529 else
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700530 sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 sapApAppEvent.sapevt.sapStartBssCompleteEvent.operatingChannel = (v_U8_t)sapContext->channel;
532 break;
533
534 case eSAP_STOP_BSS_EVENT:
535 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
536 __FUNCTION__, "eSAP_STOP_BSS_EVENT");
537 sapApAppEvent.sapHddEventCode = eSAP_STOP_BSS_EVENT;
538 sapApAppEvent.sapevt.sapStopBssCompleteEvent.status = (eSapStatus )context;
539 break;
540
541 case eSAP_STA_ASSOC_EVENT:
542 {
543 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
544 __FUNCTION__, "eSAP_STA_ASSOC_EVENT");
545 if (pCsrRoamInfo->fReassocReq)
546 sapApAppEvent.sapHddEventCode = eSAP_STA_REASSOC_EVENT;
547 else
548 sapApAppEvent.sapHddEventCode = eSAP_STA_ASSOC_EVENT;
549
550 //TODO: Need to fill the SET KEY information and pass to HDD
551 vos_mem_copy( &sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700552 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
553 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.staId = pCsrRoamInfo->staId ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
555 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen = pCsrRoamInfo->rsnIELen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700556 vos_mem_copy(sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.ies, pCsrRoamInfo->prsnIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 pCsrRoamInfo->rsnIELen);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700558
559 if(pCsrRoamInfo->addIELen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 {
561 v_U8_t len = sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700562 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.iesLen
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 += pCsrRoamInfo->addIELen;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700564 vos_mem_copy(&sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.ies[len], pCsrRoamInfo->paddIE,
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 pCsrRoamInfo->addIELen);
566 }
567
568 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.wmmEnabled = pCsrRoamInfo->wmmEnabledSta;
569 sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.status = (eSapStatus )context;
570 //TODO: Need to fill sapAuthType
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700571 //sapApAppEvent.sapevt.sapStationAssocReassocCompleteEvent.SapAuthType = pCsrRoamInfo->pProfile->negotiatedAuthType;
Jeff Johnson295189b2012-06-20 16:38:30 -0700572 break;
573 }
574
575 case eSAP_STA_DISASSOC_EVENT:
576 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
577 __FUNCTION__, "eSAP_STA_DISASSOC_EVENT");
578 sapApAppEvent.sapHddEventCode = eSAP_STA_DISASSOC_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700579
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 vos_mem_copy( &sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staMac,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700581 pCsrRoamInfo->peerMac, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.staId = pCsrRoamInfo->staId;
583 if (pCsrRoamInfo->reasonCode == eCSR_ROAM_RESULT_FORCED)
584 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_USR_INITATED_DISASSOC;
585 else
586 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.reason = eSAP_MAC_INITATED_DISASSOC;
587
588 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.statusCode = pCsrRoamInfo->statusCode;
589 sapApAppEvent.sapevt.sapStationDisassocCompleteEvent.status = (eSapStatus )context;
590 break;
591
592 case eSAP_STA_SET_KEY_EVENT:
593 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
594 __FUNCTION__, "eSAP_STA_SET_KEY_EVENT");
595 sapApAppEvent.sapHddEventCode = eSAP_STA_SET_KEY_EVENT;
596 sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.status = (eSapStatus )context;
597 vos_mem_copy(&sapApAppEvent.sapevt.sapStationSetKeyCompleteEvent.peerMacAddr,
598 pCsrRoamInfo->peerMac,sizeof(tSirMacAddr));
599 break;
600
601 case eSAP_STA_DEL_KEY_EVENT :
602 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
603 __FUNCTION__, "eSAP_STA_DEL_KEY_EVENT");
604 sapApAppEvent.sapHddEventCode = eSAP_STA_DEL_KEY_EVENT;
605 sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.status = (eSapStatus )context;
606 //TODO: Should we need to send the key information
607 //sapApAppEvent.sapevt.sapStationDeleteKeyCompleteEvent.keyId = ;
608 break;
609
610 case eSAP_STA_MIC_FAILURE_EVENT :
611 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
612 __FUNCTION__, "eSAP_STA_MIC_FAILURE_EVENT");
613 sapApAppEvent.sapHddEventCode = eSAP_STA_MIC_FAILURE_EVENT;
614 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.srcMacAddr,
615 pCsrRoamInfo->u.pMICFailureInfo->srcMacAddr,
616 sizeof(tSirMacAddr));
617 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.staMac,
618 pCsrRoamInfo->u.pMICFailureInfo->taMacAddr,
619 sizeof(tSirMacAddr));
620 vos_mem_copy( &sapApAppEvent.sapevt.sapStationMICFailureEvent.dstMacAddr,
621 pCsrRoamInfo->u.pMICFailureInfo->dstMacAddr,
622 sizeof(tSirMacAddr));
623 sapApAppEvent.sapevt.sapStationMICFailureEvent.multicast = pCsrRoamInfo->u.pMICFailureInfo->multicast;
624 sapApAppEvent.sapevt.sapStationMICFailureEvent.IV1 = pCsrRoamInfo->u.pMICFailureInfo->IV1;
625 sapApAppEvent.sapevt.sapStationMICFailureEvent.keyId = pCsrRoamInfo->u.pMICFailureInfo->keyId;
626 vos_mem_copy( sapApAppEvent.sapevt.sapStationMICFailureEvent.TSC,
627 pCsrRoamInfo->u.pMICFailureInfo->TSC,
628 SIR_CIPHER_SEQ_CTR_SIZE);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700629 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700630
631 case eSAP_ASSOC_STA_CALLBACK_EVENT:
632 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s",
633 __FUNCTION__, "eSAP_ASSOC_STA_CALLBACK_EVENT");
634 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700635
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 case eSAP_WPS_PBC_PROBE_REQ_EVENT:
637 sapApAppEvent.sapHddEventCode = eSAP_WPS_PBC_PROBE_REQ_EVENT;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700638
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 vos_mem_copy( &sapApAppEvent.sapevt.sapPBCProbeReqEvent.WPSPBCProbeReq,
640 pCsrRoamInfo->u.pWPSPBCProbeReq,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700641 sizeof(tSirWPSPBCProbeReq));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 break;
643
644#ifdef WLAN_FEATURE_P2P
645 case eSAP_INDICATE_MGMT_FRAME:
646 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
647 "In %s, SAP event callback event = %s",
648 __FUNCTION__, "eSAP_INDICATE_MGMT_FRAME");
649 sapApAppEvent.sapHddEventCode = eSAP_INDICATE_MGMT_FRAME;
650 sapApAppEvent.sapevt.sapManagementFrameInfo.nFrameLength
651 = pCsrRoamInfo->nFrameLength;
652 sapApAppEvent.sapevt.sapManagementFrameInfo.pbFrames
653 = pCsrRoamInfo->pbFrames;
654 sapApAppEvent.sapevt.sapManagementFrameInfo.frameType
655 = pCsrRoamInfo->frameType;
656 sapApAppEvent.sapevt.sapManagementFrameInfo.rxChan
657 = pCsrRoamInfo->rxChan;
658
659 break;
660 case eSAP_REMAIN_CHAN_READY:
661 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
662 "In %s, SAP event callback event = %s",
663 __FUNCTION__, "eSAP_REMAIN_CHAN_READY");
664 sapApAppEvent.sapHddEventCode = eSAP_REMAIN_CHAN_READY;
665 break;
666 case eSAP_SEND_ACTION_CNF:
667 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
668 "In %s, SAP event callback event = %s",
669 __FUNCTION__, "eSAP_SEND_ACTION_CNF");
670 sapApAppEvent.sapHddEventCode = eSAP_SEND_ACTION_CNF;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700671 sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 break;
673#endif
674
675 case eSAP_UNKNOWN_STA_JOIN:
676 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
677 "In %s, SAP event callback event = %s",
678 __FUNCTION__, "eSAP_UNKNOWN_STA_JOIN");
679 sapApAppEvent.sapHddEventCode = eSAP_UNKNOWN_STA_JOIN;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700680 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapUnknownSTAJoin.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 (v_PVOID_t)context, sizeof(v_MACADDR_t));
682 break;
683
684 case eSAP_MAX_ASSOC_EXCEEDED:
685 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
686 "In %s, SAP event callback event = %s",
687 __FUNCTION__, "eSAP_MAX_ASSOC_EXCEEDED");
688 sapApAppEvent.sapHddEventCode = eSAP_MAX_ASSOC_EXCEEDED;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700689 vos_mem_copy((v_PVOID_t)sapApAppEvent.sapevt.sapMaxAssocExceeded.macaddr.bytes,
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 (v_PVOID_t)pCsrRoamInfo->peerMac, sizeof(v_MACADDR_t));
691 break;
692
693 default:
694 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, SAP Unknown callback event = %d",
695 __FUNCTION__,sapHddevent);
696 break;
697 }
698 vosStatus = (*sapContext->pfnSapEventCallback)
699 (
700 &sapApAppEvent,
701 sapContext->pUsrContext//userdataforcallback - hdd opaque handle
702 );
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700703
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 return vosStatus;
705
706} /* sapSignalApAppStartBssEvent */
707
708/*==========================================================================
709 FUNCTION sapFsm
710
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700711 DESCRIPTION
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 SAP State machine entry function
713
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700714 DEPENDENCIES
715 NA.
Jeff Johnson295189b2012-06-20 16:38:30 -0700716
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700717 PARAMETERS
Jeff Johnson295189b2012-06-20 16:38:30 -0700718
719 IN
720 sapContext : Sap Context value
721 sapEvent : State machine event
722 status : Return the SAP status here
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700723
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 RETURN VALUE
725 The VOS_STATUS code associated with performing the operation
726
727 VOS_STATUS_SUCCESS: Success
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700728
729 SIDE EFFECTS
Jeff Johnson295189b2012-06-20 16:38:30 -0700730============================================================================*/
731VOS_STATUS
732sapFsm
733(
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700734 ptSapContext sapContext, /* sapContext value */
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 ptWLAN_SAPEvent sapEvent /* State machine event */
736)
737{
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700738 /* Retrieve the phy link state machine structure
Jeff Johnson295189b2012-06-20 16:38:30 -0700739 * from the sapContext value
740 */
741 eSapFsmStates_t stateVar = sapContext->sapsMachine; /*state var that keeps track of state machine*/
742 tCsrRoamInfo *roamInfo = (tCsrRoamInfo *)(sapEvent->params);
743 v_U32_t msg = sapEvent->event; /* State machine input event message */
744 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
745
746 switch (stateVar)
747 {
748 case eSAP_DISCONNECTED:
749 if ((msg == eSAP_HDD_START_INFRA_BSS))
750 {
751 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
752 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, new from state %s => %s",
753 __FUNCTION__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
754
755 /* There can be one SAP Session for softap */
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700756 if (sapContext->isSapSessionOpen == eSAP_TRUE)
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 {
758 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
759 "%s:SME Session is already opened\n",__FUNCTION__);
760 return VOS_STATUS_E_EXISTS;
761 }
762
763 sapContext->sessionId = 0xff;
764
765 /* Set SAP device role */
766 sapContext->sapsMachine = eSAP_CH_SELECT;
767
768 /* Perform sme_ScanRequest */
769 vosStatus = sapGotoChannelSel(sapContext, sapEvent);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700770
Jeff Johnson295189b2012-06-20 16:38:30 -0700771 /* Transition from eSAP_DISCONNECTED to eSAP_CH_SELECT (both without substates) */
772 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
773 __FUNCTION__, "eSAP_DISCONNECTED", "eSAP_CH_SELECT");
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700774 }
775 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 {
777 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, event msg %d",
778 __FUNCTION__, "eSAP_DISCONNECTED", msg);
779 }
780 break;
781
782 case eSAP_CH_SELECT:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700783 if (msg == eSAP_MAC_SCAN_COMPLETE)
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 {
785 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
786 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
787 __FUNCTION__, "eSAP_CH_SELECT", "eSAP_STARTING");
788 // Channel selected. Now can sapGotoStarting
789 sapContext->sapsMachine = eSAP_STARTING;
790 // Specify the channel
791 sapContext->csrRoamProfile.ChannelInfo.numOfChannels = 1;
792 sapContext->csrRoamProfile.ChannelInfo.ChannelList = &sapContext->csrRoamProfile.operationChannel;
793 sapContext->csrRoamProfile.operationChannel = (tANI_U8)sapContext->channel;
794 vosStatus = sapGotoStarting( sapContext, sapEvent, eCSR_BSS_TYPE_INFRA_AP);
795 /* Transition from eSAP_CH_SELECT to eSAP_STARTING (both without substates) */
796 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
797 __FUNCTION__, "eSAP_CH_SELECT", "eSAP_STARTING");
798 }
799 else
800 {
801 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, invalid event msg %d",
802 __FUNCTION__, "eSAP_CH_SELECT", msg);
803 }
804 break;
805
806 case eSAP_STARTING:
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700807 if (msg == eSAP_MAC_START_BSS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 {
809 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
810 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state channel = %d %s => %s",
811 __FUNCTION__,sapContext->channel, "eSAP_STARTING", "eSAP_STARTED");
812
813 sapContext->sapsMachine = eSAP_STARTED;
814 /*Action code for transition */
815 vosStatus = sapSignalHDDevent( sapContext, roamInfo, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
816
817 /* Transition from eSAP_STARTING to eSAP_STARTED (both without substates) */
818 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
819 __FUNCTION__, "eSAP_STARTING", "eSAP_STARTED");
820 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700821 else if (msg == eSAP_MAC_START_FAILS)
Jeff Johnson295189b2012-06-20 16:38:30 -0700822 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700823 /*Transition from STARTING to DISCONNECTED (both without substates)*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700824 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
825 __FUNCTION__, "eSAP_STARTING", "eSAP_DISCONNECTED");
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700826
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 /*Action code for transition */
828 vosStatus = sapSignalHDDevent( sapContext, NULL, eSAP_START_BSS_EVENT,(v_PVOID_t) eSAP_STATUS_FAILURE);
829 vosStatus = sapGotoDisconnected(sapContext);
830
831 /*Advance outer statevar */
832 sapContext->sapsMachine = eSAP_DISCONNECTED;
833 }
834 else if (msg == eSAP_HDD_STOP_INFRA_BSS)
835 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700836 /*Transition from eSAP_STARTING to eSAP_DISCONNECTING (both without substates)*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700837 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
838 __FUNCTION__, "eSAP_STARTING", "eSAP_DISCONNECTING");
839
840 /*Advance outer statevar */
841 sapContext->sapsMachine = eSAP_DISCONNECTED;
842 vosStatus = sapSignalHDDevent( sapContext, NULL, eSAP_START_BSS_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
843 vosStatus = sapGotoDisconnected(sapContext);
844 /* Close the SME session*/
845
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700846 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 {
848 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
849 if (NULL == hHal)
850 {
851 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
852 "In %s, NULL hHal in state %s, msg %d",
853 __FUNCTION__, "eSAP_STARTING", msg);
854 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700855 else if (eHAL_STATUS_SUCCESS ==
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 sme_CloseSession(hHal,
857 sapContext->sessionId, NULL, NULL))
858 {
859 sapContext->isSapSessionOpen = eSAP_FALSE;
860 }
861 }
862 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700863 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 {
865 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
866 "In %s, in state %s, invalid event msg %d",
867 __FUNCTION__, "eSAP_STARTING", msg);
868 /* Intentionally left blank */
869 }
870 break;
871
872 case eSAP_STARTED:
873 if (msg == eSAP_HDD_STOP_INFRA_BSS)
874 {
875 /* Transition from eSAP_STARTED to eSAP_DISCONNECTING (both without substates) */
876 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
877 __FUNCTION__, "eSAP_STARTED", "eSAP_DISCONNECTING");
878 sapContext->sapsMachine = eSAP_DISCONNECTING;
879 vosStatus = sapGotoDisconnecting(sapContext);
880 }
881 else
882 {
883 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, in state %s, invalid event msg %d",
884 __FUNCTION__, "eSAP_STARTED", msg);
885 }
886 break;
887
888 case eSAP_DISCONNECTING:
889 if (msg == eSAP_MAC_READY_FOR_CONNECTIONS)
890 {
891 /* Transition from eSAP_DISCONNECTING to eSAP_DISCONNECTED (both without substates) */
892 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, from state %s => %s",
893 __FUNCTION__, "eSAP_DISCONNECTING", "eSAP_DISCONNECTED");
894
895 sapContext->sapsMachine = eSAP_DISCONNECTED;
896 /* Close the SME session*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700897 if (eSAP_TRUE == sapContext->isSapSessionOpen)
Jeff Johnson295189b2012-06-20 16:38:30 -0700898 {
899 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
900
901 if (NULL == hHal)
902 {
903 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
904 "In %s, NULL hHal in state %s, msg %d",
905 __FUNCTION__, "eSAP_DISCONNECTING", msg);
906 }
907 else
908 {
909 sapContext->isSapSessionOpen = eSAP_FALSE;
910 if (!HAL_STATUS_SUCCESS(
911 sme_CloseSession(hHal,
912 sapContext->sessionId,
913 sapRoamSessionCloseCallback, sapContext)))
914 {
915 vosStatus = sapSignalHDDevent(sapContext, NULL,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700916 eSAP_STOP_BSS_EVENT,
Jeff Johnson295189b2012-06-20 16:38:30 -0700917 (v_PVOID_t) eSAP_STATUS_SUCCESS);
918 }
919 }
920 }
921 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700922 else
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700924 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 "In %s, in state %s, invalid event msg %d",
926 __FUNCTION__, "eSAP_DISCONNECTING", msg);
927 }
928 break;
929 }
930 return vosStatus;
931}// sapFsm
932
933
934eSapStatus
935sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, tCsrRoamProfile *profile)
936{
937 //Create Roam profile for SoftAP to connect
938 profile->BSSType = eCSR_BSS_TYPE_INFRA_AP;
939 profile->SSIDs.numOfSSIDs = 1;
940 profile->csrPersona = pconfig_params->persona;
941
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700942 vos_mem_zero(profile->SSIDs.SSIDList[0].SSID.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 sizeof(profile->SSIDs.SSIDList[0].SSID.ssId));
944
945 //Flag to not broadcast the SSID information
946 profile->SSIDs.SSIDList[0].ssidHidden = pconfig_params->SSIDinfo.ssidHidden;
947
948 profile->SSIDs.SSIDList[0].SSID.length = pconfig_params->SSIDinfo.ssid.length;
949 vos_mem_copy(&profile->SSIDs.SSIDList[0].SSID.ssId, pconfig_params->SSIDinfo.ssid.ssId,
950 sizeof(pconfig_params->SSIDinfo.ssid.ssId));
951
952 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
953
954 if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
955 {
956 profile->negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
957 }
958 else if (pconfig_params->authType == eSAP_SHARED_KEY)
959 {
960 profile->negotiatedAuthType = eCSR_AUTH_TYPE_SHARED_KEY;
961 }
962 else
963 {
964 profile->negotiatedAuthType = eCSR_AUTH_TYPE_AUTOSWITCH;
965 }
966
967 profile->AuthType.numEntries = 1;
968 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_OPEN_SYSTEM;
969
970 //Always set the Encryption Type
971 profile->EncryptionType.numEntries = 1;
972 profile->EncryptionType.encryptionType[0] = pconfig_params->RSNEncryptType;
973
974 profile->mcEncryptionType.numEntries = 1;
975 profile->mcEncryptionType.encryptionType[0] = pconfig_params->mcRSNEncryptType;
976
977 if (pconfig_params->privacy & eSAP_SHARED_KEY)
978 {
979 profile->AuthType.authType[0] = eCSR_AUTH_TYPE_SHARED_KEY;
980 }
981
982 profile->privacy = pconfig_params->privacy;
983 profile->fwdWPSPBCProbeReq = pconfig_params->fwdWPSPBCProbeReq;
984
985 if (pconfig_params->authType == eSAP_SHARED_KEY)
986 {
987 profile->csr80211AuthType = eSIR_SHARED_KEY;
988 }
989 else if (pconfig_params->authType == eSAP_OPEN_SYSTEM)
990 {
991 profile->csr80211AuthType = eSIR_OPEN_SYSTEM;
992 }
993 else
994 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700995 profile->csr80211AuthType = eSIR_AUTO_SWITCH;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 }
997
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -0700998 //Initialize we are not going to use it
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 profile->pWPAReqIE = NULL;
1000 profile->nWPAReqIELength = 0;
1001
1002 //set the RSN/WPA IE
1003 profile->pRSNReqIE = NULL;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001004 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 if (pconfig_params->RSNWPAReqIELength)
1006 {
1007 profile->pRSNReqIE = vos_mem_malloc(pconfig_params->RSNWPAReqIELength);
1008 if( NULL == profile->pRSNReqIE )
1009 {
1010 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, " %s Fail to alloc memory", __FUNCTION__);
1011 return eSAP_STATUS_FAILURE;
1012 }
1013 vos_mem_copy(profile->pRSNReqIE, pconfig_params->pRSNWPAReqIE, pconfig_params->RSNWPAReqIELength);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001014 profile->nRSNReqIELength = pconfig_params->RSNWPAReqIELength;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 }
1016
1017 // Turn off CB mode
1018 profile->CBMode = eCSR_CB_OFF;
1019
1020 //set the phyMode to accept anything
1021 //Best means everything because it covers all the things we support
1022 profile->phyMode = pconfig_params->SapHw_mode; /*eCSR_DOT11_MODE_BEST*/
1023
1024 //Configure beaconInterval
1025 profile->beaconInterval = (tANI_U16)pconfig_params->beacon_int;
1026
1027 // set DTIM period
1028 profile->dtimPeriod = pconfig_params->dtim_period;
1029
1030 //set Uapsd enable bit
1031 profile->ApUapsdEnable = pconfig_params->UapsdEnable;
1032
1033 //Enable protection parameters
1034 profile->protEnabled = pconfig_params->protEnabled;
1035 profile->obssProtEnabled = pconfig_params->obssProtEnabled;
1036 profile->cfg_protection = pconfig_params->ht_capab;
1037
1038 //country code
1039 if (pconfig_params->countryCode[0])
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001040 vos_mem_copy(profile->countryCode, pconfig_params->countryCode, WNI_CFG_COUNTRY_CODE_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07001041#ifdef WLAN_SOFTAP_FEATURE
1042 profile->ieee80211d = pconfig_params->ieee80211d;
1043#endif
1044 //wps config info
1045 profile->wps_state = pconfig_params->wps_state;
1046
1047 return eSAP_STATUS_SUCCESS; /* Success. */
1048}
1049
1050
1051void sapFreeRoamProfile(tCsrRoamProfile *profile)
1052{
1053 if(profile->pRSNReqIE)
1054 {
1055 vos_mem_free(profile->pRSNReqIE);
1056 profile->pRSNReqIE = NULL;
1057 }
1058}
1059
1060
1061void
1062sapSortMacList(v_MACADDR_t *macList, v_U8_t size)
1063{
1064 v_U8_t outer, inner;
1065 v_MACADDR_t temp;
1066 v_SINT_t nRes = -1;
1067
1068 for(outer = 0; outer < size; outer++)
1069 {
1070 for(inner = 0; inner < size - 1; inner++)
1071 {
1072 nRes = vos_mem_compare2((macList + inner)->bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1073 if (nRes > 0)
1074 {
1075 vos_mem_copy(temp.bytes, (macList + inner + 1)->bytes, sizeof(v_MACADDR_t));
1076 vos_mem_copy((macList + inner + 1)->bytes, (macList + inner)->bytes, sizeof(v_MACADDR_t));
1077 vos_mem_copy((macList + inner)->bytes, temp.bytes, sizeof(v_MACADDR_t));
1078 }
1079 }
1080 }
1081}
1082
1083eSapBool
1084sapSearchMacList(v_MACADDR_t *macList, v_U8_t num_mac, v_U8_t *peerMac, v_U8_t *index)
1085{
1086 v_SINT_t nRes = -1;
1087 v_S7_t nStart = 0, nEnd, nMiddle;
1088 nEnd = num_mac - 1;
1089
1090 while (nStart <= nEnd)
1091 {
1092 nMiddle = (nStart + nEnd) / 2;
1093 nRes = vos_mem_compare2(&macList[nMiddle], peerMac, sizeof(v_MACADDR_t));
1094
1095 if (0 == nRes)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1098 "search SUCC");
1099 // "index equals NULL" means the caller does not need the
1100 // index value of the peerMac being searched
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001101 if (index != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 {
1103 *index = (v_U8_t) nMiddle;
1104 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1105 "index %d", *index);
1106 }
1107 return eSAP_TRUE;
1108 }
1109 if (nRes < 0)
1110 nStart = nMiddle + 1;
1111 else
1112 nEnd = nMiddle - 1;
1113 }
1114
1115 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
1116 "search not succ");
1117 return eSAP_FALSE;
1118}
1119
1120void
1121sapAddMacToACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t *peerMac)
1122{
1123 v_SINT_t nRes = -1;
1124 int i;
1125 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"add acl entered");
1126 for (i=((*size)-1); i>=0; i--)
1127 {
1128 nRes = vos_mem_compare2(&macList[i], peerMac, sizeof(v_MACADDR_t));
1129 if (nRes > 0)
1130 {
1131 /* Move alphabetically greater mac addresses one index down to allow for insertion
1132 of new mac in sorted order */
1133 vos_mem_copy((macList+i+1)->bytes,(macList+i)->bytes, sizeof(v_MACADDR_t));
1134 }
1135 else
1136 {
1137 break;
1138 }
1139 }
1140 //This should also take care of if the element is the first to be added in the list
1141 vos_mem_copy((macList+i+1)->bytes, peerMac, sizeof(v_MACADDR_t));
1142 // increment the list size
1143 (*size)++;
1144}
1145
1146void
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001147sapRemoveMacFromACL(v_MACADDR_t *macList, v_U8_t *size, v_U8_t index)
Jeff Johnson295189b2012-06-20 16:38:30 -07001148{
1149 int i;
1150 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"remove acl entered");
1151 /* return if the list passed is empty. Ideally this should never happen since this funcn is always
1152 called after sapSearchMacList to get the index of the mac addr to be removed and this will
1153 only get called if the search is successful. Still no harm in having the check */
1154 if (macList==NULL) return;
1155 for (i=index; i<((*size)-1); i++)
1156 {
1157 /* Move mac addresses starting from "index" passed one index up to delete the void
1158 created by deletion of a mac address in ACL */
1159 vos_mem_copy((macList+i)->bytes,(macList+i+1)->bytes, sizeof(v_MACADDR_t));
1160 }
1161 // The last space should be made empty since all mac addesses moved one step up
1162 vos_mem_zero((macList+(*size)-1)->bytes, sizeof(v_MACADDR_t));
1163 //reduce the list size by 1
1164 (*size)--;
1165}
1166
1167void sapPrintACL(v_MACADDR_t *macList, v_U8_t size)
1168{
1169 int i;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001170 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"print acl entered");
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 if (size==0) return;
1172 for (i=0; i<size; i++)
1173 {
1174 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001175 "** ACL entry %i - %02x:%02x:%02x:%02x:%02x:%02x", i,
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 (macList+i)->bytes[0], (macList+i)->bytes[1], (macList+i)->bytes[2],
1177 (macList+i)->bytes[3], (macList+i)->bytes[4], (macList+i)->bytes[5]);
1178 }
1179 return;
1180}
1181
1182VOS_STATUS
1183sapIsPeerMacAllowed(ptSapContext sapContext, v_U8_t *peerMac)
1184{
1185 if (eSAP_ALLOW_ALL == sapContext->eSapMacAddrAclMode)
1186 return VOS_STATUS_SUCCESS;
1187
1188 if (sapSearchMacList(sapContext->acceptMacList, sapContext->nAcceptMac, peerMac, NULL))
1189 return VOS_STATUS_SUCCESS;
1190
1191 if (sapSearchMacList(sapContext->denyMacList, sapContext->nDenyMac, peerMac, NULL))
1192 {
1193 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Peer %02x:%02x:%02x:%02x:%02x:%02x in deny list",
1194 __FUNCTION__, *peerMac, *(peerMac + 1), *(peerMac + 2), *(peerMac + 3), *(peerMac + 4), *(peerMac + 5));
1195 return VOS_STATUS_E_FAILURE;
1196 }
1197
1198 // A new station CAN associate, unless in deny list. Less stringent mode
1199 if (eSAP_ACCEPT_UNLESS_DENIED == sapContext->eSapMacAddrAclMode)
1200 return VOS_STATUS_SUCCESS;
1201
1202 // A new station CANNOT associate, unless in accept list. More stringent mode
1203 if (eSAP_DENY_UNLESS_ACCEPTED == sapContext->eSapMacAddrAclMode)
1204 {
1205 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Peer %02x:%02x:%02x:%02x:%02x:%02x denied, Mac filter mode is eSAP_DENY_UNLESS_ACCEPTED",
1206 __FUNCTION__, *peerMac, *(peerMac + 1), *(peerMac + 2), *(peerMac + 3), *(peerMac + 4), *(peerMac + 5));
1207 return VOS_STATUS_E_FAILURE;
1208 }
1209
1210 /* The new STA is neither in accept list nor in deny list. In this case, deny the association
1211 * but send a wifi event notification indicating the mac address being denied
1212 */
1213 if (eSAP_SUPPORT_ACCEPT_AND_DENY == sapContext->eSapMacAddrAclMode)
1214 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001215 sapSignalHDDevent(sapContext, NULL, eSAP_UNKNOWN_STA_JOIN, (v_PVOID_t)peerMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07001216 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Peer %02x:%02x:%02x:%02x:%02x:%02x denied, Mac filter mode is eSAP_SUPPORT_ACCEPT_AND_DENY",
1217 __FUNCTION__, *peerMac, *(peerMac + 1), *(peerMac + 2), *(peerMac + 3), *(peerMac + 4), *(peerMac + 5));
1218 return VOS_STATUS_E_FAILURE;
1219 }
1220 return VOS_STATUS_SUCCESS;
1221}
1222
1223#ifdef SOFTAP_CHANNEL_RANGE
1224static VOS_STATUS sapGetChannelList(ptSapContext sapContext,
1225 v_U8_t **channelList, v_U8_t *numberOfChannels)
1226{
1227 v_U32_t startChannelNum;
1228 v_U32_t endChannelNum;
1229 v_U32_t operatingBand;
1230 v_U8_t loopCount;
1231 v_U8_t *list;
1232 v_U8_t channelCount;
1233 v_U8_t bandStartChannel;
1234 v_U8_t bandEndChannel ;
1235 v_U32_t enableLTECoex;
1236 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
1237
1238 if (NULL == hHal)
1239 {
1240 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1241 "Invalid HAL pointer from pvosGCtx on sapGetChannelList");
1242 *numberOfChannels = 0;
1243 *channelList = NULL;
1244 return VOS_STATUS_E_FAULT;
1245 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001246
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &startChannelNum);
1248 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum);
1249 ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
1250 ccmCfgGetInt(hHal, WNI_CFG_ENABLE_LTE_COEX, &enableLTECoex);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001251
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
1253 "%s:sapGetChannelList: startChannel %d,EndChannel %d,Operatingband:%d",
1254 __FUNCTION__,startChannelNum,endChannelNum,operatingBand);
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001255
Jeff Johnson295189b2012-06-20 16:38:30 -07001256 switch(operatingBand)
1257 {
1258 case RF_SUBBAND_2_4_GHZ:
1259 bandStartChannel = RF_CHAN_1;
1260 bandEndChannel = RF_CHAN_14;
1261 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001262
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 case RF_SUBBAND_5_LOW_GHZ:
1264 bandStartChannel = RF_CHAN_36;
1265 bandEndChannel = RF_CHAN_64;
1266 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001267
Jeff Johnson295189b2012-06-20 16:38:30 -07001268 case RF_SUBBAND_5_MID_GHZ:
1269 bandStartChannel = RF_CHAN_100;
1270 bandEndChannel = RF_CHAN_140;
1271 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001272
Jeff Johnson295189b2012-06-20 16:38:30 -07001273 case RF_SUBBAND_5_HIGH_GHZ:
1274 bandStartChannel = RF_CHAN_149;
1275 bandEndChannel = RF_CHAN_165;
1276 break;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001277
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 default:
1279 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1280 "sapGetChannelList:OperatingBand not valid ");
1281 /* assume 2.4 GHz */
1282 bandStartChannel = RF_CHAN_1;
1283 bandEndChannel = RF_CHAN_14;
1284 break;
1285 }
1286 /*Check if LTE coex is enabled and 2.4GHz is selected*/
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001287 if (enableLTECoex && (bandStartChannel == RF_CHAN_1)
Jeff Johnson295189b2012-06-20 16:38:30 -07001288 && (bandEndChannel == RF_CHAN_14))
1289 {
1290 /*Set 2.4GHz upper limit to channel 9 for LTE COEX*/
1291 bandEndChannel = RF_CHAN_9;
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001293 /* Allocate the max number of channel supported */
1294 list = (v_U8_t *)vos_mem_malloc(NUM_5GHZ_CHANNELS);
1295 if (NULL == list)
1296 {
1297 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1298 "%s: Unable to allocate channel list", __FUNCTION__);
1299 *numberOfChannels = 0;
1300 *channelList = NULL;
1301 return VOS_STATUS_E_RESOURCES;
1302 }
1303
1304 /*Search for the Active channels in the given range */
1305 channelCount = 0;
1306 for( loopCount = bandStartChannel; loopCount <= bandEndChannel; loopCount++ )
1307 {
1308 if((startChannelNum <= rfChannels[loopCount].channelNum)&&
1309 (endChannelNum >= rfChannels[loopCount].channelNum ))
1310 {
1311 if( regChannels[loopCount].enabled )
1312 {
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001313 list[channelCount] = rfChannels[loopCount].channelNum;
Jeff Johnson295189b2012-06-20 16:38:30 -07001314 channelCount++;
1315 }
1316 }
1317 }
1318 if (0 == channelCount)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001319 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001320 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
1321 "sapGetChannelList:No active channels present in the given range for the current region");
1322 /*LTE COEX: channel range outside the restricted 2.4GHz band limits*/
1323 if (enableLTECoex && (startChannelNum > bandEndChannel))
1324 {
1325 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
1326 "sapGetChannelList:SAP cannot be started as LTE COEX restricted 2.4GHz limits");
1327 }
1328 }
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001329
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* return the channel list and number of channels to scan*/
1331 *numberOfChannels = channelCount;
1332 if(channelCount != 0)
Madan Mohan Koyyalamudi33a178c2012-09-18 18:17:13 -07001333 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001334 *channelList = list;
1335 }
1336 else
1337 {
1338 *channelList = NULL;
1339 vos_mem_free(list);
1340 }
1341 return VOS_STATUS_SUCCESS;
1342}
1343#endif