blob: 56c24de7a52925a966d4c606a2cffa1d1690ffe6 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam0fb93dd2014-02-19 00:32:59 -08002 * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam0fb93dd2014-02-19 00:32:59 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028/*===========================================================================
29
30 s a p A p i L i n k C n t l . C
31
32 OVERVIEW:
33
34 This software unit holds the implementation of the WLAN SAP modules
35 Link Control functions.
36
37 The functions externalized by this module are to be called ONLY by other
38 WLAN modules (HDD)
39
40 DEPENDENCIES:
41
42 Are listed for each API below.
43
44
45 Copyright (c) 2010 QUALCOMM Incorporated.
46 All Rights Reserved.
47 Qualcomm Confidential and Proprietary
48===========================================================================*/
49
50/*===========================================================================
51
52 EDIT HISTORY FOR FILE
53
54
55 This section contains comments describing changes made to the module.
56 Notice that changes are listed in reverse chronological order.
57
58
59 $Header: /cygdrive/c/Dropbox/M7201JSDCAAPAD52240B/WM/platform/msm7200/Src/Drivers/SD/ClientDrivers/WLAN/QCT_SAP_PAL/CORE/SAP/src/sapApiLinkCntl.c,v 1.7 2008/12/18 19:44:11 jzmuda Exp jzmuda $$DateTime$$Author: jzmuda $
60
61
62 when who what, where, why
63---------- --- --------------------------------------------------------
642010-03-15 Created module
65
66===========================================================================*/
67
68/*----------------------------------------------------------------------------
69 * Include Files
70 * -------------------------------------------------------------------------*/
71#include "vos_trace.h"
72// Pick up the CSR callback definition
73#include "csrApi.h"
74#include "sme_Api.h"
75// SAP Internal API header file
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -070076#include "sapInternal.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077
78/*----------------------------------------------------------------------------
79 * Preprocessor Definitions and Constants
80 * -------------------------------------------------------------------------*/
81#define SAP_DEBUG
82
83/*----------------------------------------------------------------------------
84 * Type Declarations
85 * -------------------------------------------------------------------------*/
86
87/*----------------------------------------------------------------------------
88 * Global Data Definitions
89 * -------------------------------------------------------------------------*/
90
91/*----------------------------------------------------------------------------
92 * Static Variable Definitions
93 * -------------------------------------------------------------------------*/
94
95/*----------------------------------------------------------------------------
96 * Static Function Declarations and Definitions
97 * -------------------------------------------------------------------------*/
98
99/*----------------------------------------------------------------------------
100 * Externalized Function Definitions
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -0700101 * -------------------------------------------------------------------------*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700102
103/*----------------------------------------------------------------------------
104 * Function Declarations and Documentation
105 * -------------------------------------------------------------------------*/
106
107/*==========================================================================
108 FUNCTION WLANSAP_ScanCallback()
109
110 DESCRIPTION
111 Callback for Scan (scan results) Events
112
113 DEPENDENCIES
114 NA.
115
116 PARAMETERS
117
118 IN
119 tHalHandle : tHalHandle passed in with the scan request
120 *pContext : The second context pass in for the caller (sapContext)
121 scanID : scanID got after the scan
122 status : Status of scan -success, failure or abort
123
124 RETURN VALUE
125 The eHalStatus code associated with performing the operation
126
127 eHAL_STATUS_SUCCESS: Success
128
129 SIDE EFFECTS
130============================================================================*/
131eHalStatus
132WLANSAP_ScanCallback
133(
134 tHalHandle halHandle,
135 void *pContext, /* Opaque SAP handle */
136 v_U32_t scanID,
137 eCsrScanStatus scanStatus
138)
139{
140 tScanResultHandle pResult = NULL;
141 eHalStatus scanGetResultStatus = eHAL_STATUS_FAILURE;
142 ptSapContext psapContext = (ptSapContext)pContext;
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530143 void *pTempHddCtx;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144 tWLAN_SAPEvent sapEvent; /* State machine event */
145 v_U8_t operChannel = 0;
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530146 v_U8_t i = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700147 VOS_STATUS sapstatus;
Peng Xu2446a892014-09-05 17:21:18 +0530148 v_U32_t event;
Jeff Johnson295189b2012-06-20 16:38:30 -0700149
150 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
151
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530152 pTempHddCtx = vos_get_context( VOS_MODULE_ID_HDD,
153 psapContext->pvosGCtx);
154 if (NULL == pTempHddCtx)
155 {
156 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
157 "HDD context is NULL");
158 return eHAL_STATUS_FAILURE;
159 }
160
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700161 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, before switch on scanStatus = %d", __func__, scanStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162
163 switch (scanStatus)
164 {
165 case eCSR_SCAN_SUCCESS:
166 // sapScanCompleteCallback with eCSR_SCAN_SUCCESS
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700167 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR scanStatus = %s (%d)", __func__, "eCSR_SCAN_SUCCESS", scanStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168
169 // Get scan results, Run channel selection algorithm, select channel and keep in pSapContext->Channel
170 scanGetResultStatus = sme_ScanGetResult(halHandle, 0, NULL, &pResult);
171
Peng Xu0d6dfd02014-09-10 20:18:48 +0530172 if ((scanGetResultStatus != eHAL_STATUS_SUCCESS)&& (scanGetResultStatus != eHAL_STATUS_E_NULL_VALUE))
Jeff Johnson295189b2012-06-20 16:38:30 -0700173 {
174 // No scan results
Peng Xu0d6dfd02014-09-10 20:18:48 +0530175 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, Get scan result failed! ret = %d",
176 __func__, scanGetResultStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700177 break;
178 }
179
Madan Mohan Koyyalamudi5aef2af2012-10-05 11:56:27 -0700180 operChannel = sapSelectChannel(halHandle, psapContext, pResult);
181
Jeff Johnson295189b2012-06-20 16:38:30 -0700182 sme_ScanResultPurge(halHandle, pResult);
Peng Xu2446a892014-09-05 17:21:18 +0530183 event = eSAP_MAC_SCAN_COMPLETE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700184 break;
185
186 default:
Peng Xu2446a892014-09-05 17:21:18 +0530187 event = eSAP_CHANNEL_SELECTION_FAILED;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700188 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR scanStatus = %s (%d)", __func__, "eCSR_SCAN_ABORT/FAILURE", scanStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700189 }
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530190
Jeff Johnson295189b2012-06-20 16:38:30 -0700191 if (operChannel == SAP_CHANNEL_NOT_SELECTED)
192#ifdef SOFTAP_CHANNEL_RANGE
193 {
Peng Xu2446a892014-09-05 17:21:18 +0530194 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
195 "%s: No suitable channel selected", __func__);
196
197 if ( eCSR_BAND_ALL == psapContext->scanBandPreference ||
198 psapContext->allBandScanned == eSAP_TRUE)
199 {
200 if(psapContext->channelList != NULL)
201 {
Deepthi Gowri0f60c0f2014-09-22 18:13:29 +0530202 psapContext->channel = SAP_DEFAULT_CHANNEL;
203 for ( i = 0 ; i < psapContext->numofChannel ; i++)
204 {
205 if (NV_CHANNEL_ENABLE ==
206 vos_nv_getChannelEnabledState(psapContext->channelList[i]))
207 {
208 psapContext->channel = psapContext->channelList[i];
209 break;
210 }
211 }
Peng Xu2446a892014-09-05 17:21:18 +0530212 }
213 else
214 {
215 /* if the channel list is empty then there is no valid channel in
216 the selected sub-band so select default channel in the
217 BAND(2.4GHz) as 2.4 channels are available in all the
218 countries*/
219 psapContext->channel = SAP_DEFAULT_CHANNEL;
220 }
221 }
222 else
223 {
224 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
225 "%s: Has scan band preference",
226 __func__);
227 if (eCSR_BAND_24 == psapContext->currentPreferredBand)
228 psapContext->currentPreferredBand = eCSR_BAND_5G;
229 else
230 psapContext->currentPreferredBand = eCSR_BAND_24;
231
232 psapContext->allBandScanned = eSAP_TRUE;
233 //go back to DISCONNECT state, scan next band
234 psapContext->sapsMachine = eSAP_DISCONNECTED;
235 event = eSAP_CHANNEL_SELECTION_FAILED;
236 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700237 }
238#else
239 psapContext->channel = SAP_DEFAULT_CHANNEL;
240#endif
241 else
242 {
243 psapContext->channel = operChannel;
244 }
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530245
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -0700246 sme_SelectCBMode(halHandle,
247 sapConvertSapPhyModeToCsrPhyMode(psapContext->csrRoamProfile.phyMode),
248 psapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700249#ifdef SOFTAP_CHANNEL_RANGE
250 if(psapContext->channelList != NULL)
251 {
Ravi Joshiaeb7d9e2013-05-02 12:28:14 -0700252 /* Always free up the memory for channel selection whatever
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 * the result */
254 vos_mem_free(psapContext->channelList);
255 psapContext->channelList = NULL;
256 }
257#endif
258
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700259 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Channel selected = %d", __func__, psapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700260
261 /* Fill in the event structure */
Peng Xu2446a892014-09-05 17:21:18 +0530262 sapEvent.event = event;
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 sapEvent.params = 0; // pCsrRoamInfo;
264 sapEvent.u1 = scanStatus; // roamstatus
265 sapEvent.u2 = 0; // roamResult
266
267 /* Handle event */
268 sapstatus = sapFsm(psapContext, &sapEvent);
269
270 return sapstatus;
271}// WLANSAP_ScanCallback
272
273/*==========================================================================
274 FUNCTION WLANSAP_RoamCallback()
275
276 DESCRIPTION
277 Callback for Roam (connection status) Events
278
279 DEPENDENCIES
280 NA.
281
282 PARAMETERS
283
284 IN
285 pContext : pContext passed in with the roam request
286 pCsrRoamInfo : Pointer to a tCsrRoamInfo, see definition of eRoamCmdStatus and
287 eRoamCmdResult: For detail valid members. It may be NULL
288 roamId : To identify the callback related roam request. 0 means unsolicited
289 roamStatus : Flag indicating the status of the callback
290 roamResult : Result
291
292 RETURN VALUE
293 The eHalStatus code associated with performing the operation
294
295 eHAL_STATUS_SUCCESS: Success
296
297 SIDE EFFECTS
298============================================================================*/
299eHalStatus
300WLANSAP_RoamCallback
301(
302 void *pContext, /* Opaque SAP handle */
303 tCsrRoamInfo *pCsrRoamInfo,
304 v_U32_t roamId,
305 eRoamCmdStatus roamStatus,
306 eCsrRoamResult roamResult
307)
308{
309 /* sapContext value */
310 ptSapContext sapContext = (ptSapContext) pContext;
311 tWLAN_SAPEvent sapEvent; /* State machine event */
312 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
313 eHalStatus halStatus = eHAL_STATUS_SUCCESS;
314
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700315 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, before switch on roamStatus = %d\n", __func__, roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 switch(roamStatus)
317 {
318 case eCSR_ROAM_SESSION_OPENED:
319 {
320 /* tHalHandle */
321 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
322
323 if (NULL == hHal)
324 {
325 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700326 "In %s invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 halStatus = eHAL_STATUS_FAILED_ALLOC;
328 }
329 else
330 {
331 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700332 "In %s calling sme_RoamConnect with eCSR_BSS_TYPE_INFRA_AP", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700333 sapContext->isSapSessionOpen = eSAP_TRUE;
334 halStatus = sme_RoamConnect(hHal, sapContext->sessionId,
335 &sapContext->csrRoamProfile,
336 &sapContext->csrRoamId);
337 }
338 break;
339 }
340
341 case eCSR_ROAM_INFRA_IND:
342 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700343 __func__, "eCSR_ROAM_INFRA_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 if(roamResult == eCSR_ROAM_RESULT_INFRA_START_FAILED)
345 {
346 /* Fill in the event structure */
347 sapEvent.event = eSAP_MAC_START_FAILS;
348 sapEvent.params = pCsrRoamInfo;
349 sapEvent.u1 = roamStatus;
350 sapEvent.u2 = roamResult;
351
352 /* Handle event */
353 vosStatus = sapFsm(sapContext, &sapEvent);
354 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
355 {
356 halStatus = eHAL_STATUS_FAILURE;
357 }
358 }
359 break;
360
361 case eCSR_ROAM_LOSTLINK:
362 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700363 __func__, "eCSR_ROAM_LOSTLINK", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700364 break;
365
366 case eCSR_ROAM_MIC_ERROR_IND:
367 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700368 __func__, "eCSR_ROAM_MIC_ERROR_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700369 break;
370
371 case eCSR_ROAM_SET_KEY_COMPLETE:
372 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700373 __func__, "eCSR_ROAM_SET_KEY_COMPLETE", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
375 {
376 /* Format the SET KEY complete information pass to HDD... */
377 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_SET_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_FAILURE);
378 }
379 break;
380
381 case eCSR_ROAM_REMOVE_KEY_COMPLETE:
382 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700383 __func__, "eCSR_ROAM_REMOVE_KEY_COMPLETE", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700384 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
385 {
386 /* Format the SET KEY complete information pass to HDD... */
387 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_DEL_KEY_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
388 }
389 break;
390
391 case eCSR_ROAM_ASSOCIATION_COMPLETION:
392 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 __func__, "eCSR_ROAM_ASSOCIATION_COMPLETION", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
395 {
396 /* Format the SET KEY complete information pass to HDD... */
397 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_REASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
398 }
399 break;
400
401 case eCSR_ROAM_DISASSOCIATED:
402 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700403 __func__, "eCSR_ROAM_DISASSOCIATED", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 if (roamResult == eCSR_ROAM_RESULT_MIC_FAILURE)
405 {
406 /* Format the MIC failure event to return... */
407 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) eSAP_STATUS_FAILURE);
408 }
409 break;
410
411 case eCSR_ROAM_WPS_PBC_PROBE_REQ_IND:
412 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700413 __func__, "eCSR_ROAM_WPS_PBC_PROBE_REQ_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 break;
415
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 case eCSR_ROAM_INDICATE_MGMT_FRAME:
417 sapSignalHDDevent(sapContext, pCsrRoamInfo,
418 eSAP_INDICATE_MGMT_FRAME,
419 (v_PVOID_t) eSAP_STATUS_SUCCESS);
420 break;
421 case eCSR_ROAM_REMAIN_CHAN_READY:
422 sapSignalHDDevent(sapContext, pCsrRoamInfo,
423 eSAP_REMAIN_CHAN_READY,
424 (v_PVOID_t) eSAP_STATUS_SUCCESS);
425 break;
426 case eCSR_ROAM_SEND_ACTION_CNF:
427 sapSignalHDDevent(sapContext, pCsrRoamInfo,
428 eSAP_SEND_ACTION_CNF,
Arun Kumar Khandavalli022c5452014-02-17 16:20:48 +0530429 (v_PVOID_t)((eSapStatus)((roamResult == eCSR_ROAM_RESULT_NONE)
430 ? eSAP_STATUS_SUCCESS : eSAP_STATUS_FAILURE)));
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 break;
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800432
433 case eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS:
434 sapSignalHDDevent(sapContext, pCsrRoamInfo,
435 eSAP_DISCONNECT_ALL_P2P_CLIENT,
436 (v_PVOID_t) eSAP_STATUS_SUCCESS );
437 break;
438
439 case eCSR_ROAM_SEND_P2P_STOP_BSS:
440 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Received stopbss", __func__);
441 sapSignalHDDevent(sapContext, pCsrRoamInfo,
442 eSAP_MAC_TRIG_STOP_BSS_EVENT,
443 (v_PVOID_t) eSAP_STATUS_SUCCESS );
444 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700445
446 default:
447 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, CSR roamStatus not handled roamStatus = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700448 __func__, get_eRoamCmdStatus_str(roamStatus), roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 break;
450
451 }
452
453 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, before switch on roamResult = %d\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700454 __func__, roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700455
456 switch (roamResult)
457 {
458 case eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND:
459 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700460 __func__, "eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 sapContext->nStaWPARSnReqIeLength = pCsrRoamInfo->rsnIELen;
462
463 if(sapContext->nStaWPARSnReqIeLength)
464 vos_mem_copy( sapContext->pStaWpaRsnReqIE,
465 pCsrRoamInfo->prsnIE, sapContext->nStaWPARSnReqIeLength);
466
467 sapContext->nStaAddIeLength = pCsrRoamInfo->addIELen;
468
469 if(sapContext->nStaAddIeLength)
470 vos_mem_copy( sapContext->pStaAddIE,
471 pCsrRoamInfo->paddIE, sapContext->nStaAddIeLength);
472
473 sapContext->SapQosCfg.WmmIsEnabled = pCsrRoamInfo->wmmEnabledSta;
474 // MAC filtering
475 vosStatus = sapIsPeerMacAllowed(sapContext, (v_U8_t *)pCsrRoamInfo->peerMac);
476
477 if ( VOS_STATUS_SUCCESS == vosStatus )
478 {
479 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_ASSOC_IND, (v_PVOID_t)eSAP_STATUS_SUCCESS);
480 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
481 {
Arif Hussaina7c8e412013-11-20 11:06:42 -0800482 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
483 "In %s, CSR roamResult = (%d) MAC ("
484 MAC_ADDRESS_STR") fail", __func__, roamResult,
485 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 halStatus = eHAL_STATUS_FAILURE;
487 }
488 }
489 else
490 {
Arif Hussaina7c8e412013-11-20 11:06:42 -0800491 VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_WARN,
492 "In %s, CSR roamResult = (%d) MAC ("
493 MAC_ADDRESS_STR") not allowed", __func__, roamResult,
494 MAC_ADDR_ARRAY(pCsrRoamInfo->peerMac));
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 halStatus = eHAL_STATUS_FAILURE;
496 }
497
498 break;
499
500 case eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF:
501 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700502 __func__, "eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700503
504 sapContext->nStaWPARSnReqIeLength = pCsrRoamInfo->rsnIELen;
505 if (sapContext->nStaWPARSnReqIeLength)
506 vos_mem_copy( sapContext->pStaWpaRsnReqIE,
507 pCsrRoamInfo->prsnIE, sapContext->nStaWPARSnReqIeLength);
508
509 sapContext->nStaAddIeLength = pCsrRoamInfo->addIELen;
510 if(sapContext->nStaAddIeLength)
511 vos_mem_copy( sapContext->pStaAddIE,
512 pCsrRoamInfo->paddIE, sapContext->nStaAddIeLength);
513
514 sapContext->SapQosCfg.WmmIsEnabled = pCsrRoamInfo->wmmEnabledSta;
515 /* Fill in the event structure */
516 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_ASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
517 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
518 {
519 halStatus = eHAL_STATUS_FAILURE;
520 }
521 break;
522
523 case eCSR_ROAM_RESULT_DISASSOC_IND:
524 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700525 __func__, "eCSR_ROAM_RESULT_DISASSOC_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* Fill in the event structure */
527 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
528 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
529 {
530 halStatus = eHAL_STATUS_FAILURE;
531 }
532 break;
533
534 case eCSR_ROAM_RESULT_DEAUTH_IND:
535 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700536 __func__, "eCSR_ROAM_RESULT_DEAUTH_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 /* Fill in the event structure */
538 //TODO: we will use the same event inorder to inform HDD to disassociate the station
539 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
540 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
541 {
542 halStatus = eHAL_STATUS_FAILURE;
543 }
544 break;
545
546 case eCSR_ROAM_RESULT_MIC_ERROR_GROUP:
547 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 __func__, "eCSR_ROAM_RESULT_MIC_ERROR_GROUP", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* Fill in the event structure */
550 //TODO: support for group key MIC failure event to be handled
551 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) NULL);
552 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
553 {
554 halStatus = eHAL_STATUS_FAILURE;
555 }
556 break;
557
558 case eCSR_ROAM_RESULT_MIC_ERROR_UNICAST:
559 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700560 __func__, "eCSR_ROAM_RESULT_MIC_ERROR_UNICAST", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700561 /* Fill in the event structure */
562 //TODO: support for unicast key MIC failure event to be handled
563 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) NULL);
564 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
565 {
566 halStatus = eHAL_STATUS_FAILURE;
567 }
568 break;
569
570 case eCSR_ROAM_RESULT_AUTHENTICATED:
571 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700572 __func__, "eCSR_ROAM_RESULT_AUTHENTICATED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 /* Fill in the event structure */
574 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_SET_KEY_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
575 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
576 {
577 halStatus = eHAL_STATUS_FAILURE;
578 }
579 break;
580
581 case eCSR_ROAM_RESULT_ASSOCIATED:
582 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700583 __func__, "eCSR_ROAM_RESULT_ASSOCIATED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 /* Fill in the event structure */
585 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_REASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
586 break;
587
588 case eCSR_ROAM_RESULT_INFRA_STARTED:
589 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700590 __func__, "eCSR_ROAM_RESULT_INFRA_STARTED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* Fill in the event structure */
592 sapEvent.event = eSAP_MAC_START_BSS_SUCCESS;
593 sapEvent.params = pCsrRoamInfo;
594 sapEvent.u1 = roamStatus;
595 sapEvent.u2 = roamResult;
596
597 /* Handle event */
598 vosStatus = sapFsm(sapContext, &sapEvent);
599 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
600 {
601 halStatus = eHAL_STATUS_FAILURE;
602 }
603 break;
604
605 case eCSR_ROAM_RESULT_INFRA_STOPPED:
606 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700607 __func__, "eCSR_ROAM_RESULT_INFRA_STOPPED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 /* Fill in the event structure */
609 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;
610 sapEvent.params = pCsrRoamInfo;
611 sapEvent.u1 = roamStatus;
612 sapEvent.u2 = roamResult;
613
614 /* Handle event */
615 vosStatus = sapFsm(sapContext, &sapEvent);
616 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
617 {
618 halStatus = eHAL_STATUS_FAILURE;
619 }
620 break;
621
622 case eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND:
623 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700624 __func__, "eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* Fill in the event structure */
626 //TODO: support for group key MIC failure event to be handled
627 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_WPS_PBC_PROBE_REQ_EVENT,(v_PVOID_t) NULL);
628 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
629 {
630 halStatus = eHAL_STATUS_FAILURE;
631 }
632 break;
633
634 case eCSR_ROAM_RESULT_FORCED:
635 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700636 __func__, "eCSR_ROAM_RESULT_FORCED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 //This event can be used to inform hdd about user triggered disassoc event
638 /* Fill in the event structure */
639 sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
640 break;
641
642 case eCSR_ROAM_RESULT_NONE:
643 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700644 __func__, "eCSR_ROAM_RESULT_NONE", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 //This event can be used to inform hdd about user triggered disassoc event
646 /* Fill in the event structure */
647 if ( roamStatus == eCSR_ROAM_SET_KEY_COMPLETE)
648 {
649 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_SET_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_SUCCESS);
650 }
651 else if (roamStatus == eCSR_ROAM_REMOVE_KEY_COMPLETE )
652 {
653 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_DEL_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_SUCCESS);
654 }
655 break;
656
657 case eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED:
658 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, CSR roamResult = %s (%d)\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700659 __func__, "eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* Fill in the event structure */
661 vosStatus = sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_MAX_ASSOC_EXCEEDED, (v_PVOID_t)NULL);
662 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
663 {
664 halStatus = eHAL_STATUS_FAILURE;
665 }
666
667 break;
668 default:
669 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, CSR roamResult = %s (%d) not handled\n",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700670 __func__,get_eCsrRoamResult_str(roamResult),roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 break;
672 }
673
674 return halStatus;
675}