blob: f7bdee8fff7228f7670d31ec8097e889bdf523fa [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -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.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
43
44 s a p A p i L i n k C n t l . C
45
46 OVERVIEW:
47
48 This software unit holds the implementation of the WLAN SAP modules
49 Link Control functions.
50
51 The functions externalized by this module are to be called ONLY by other
52 WLAN modules (HDD)
53
54 DEPENDENCIES:
55
56 Are listed for each API below.
57
58
59 Copyright (c) 2010 QUALCOMM Incorporated.
60 All Rights Reserved.
61 Qualcomm Confidential and Proprietary
62===========================================================================*/
63
64/*===========================================================================
65
66 EDIT HISTORY FOR FILE
67
68
69 This section contains comments describing changes made to the module.
70 Notice that changes are listed in reverse chronological order.
71
72
73 $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 $
74
75
76 when who what, where, why
77---------- --- --------------------------------------------------------
782010-03-15 Created module
79
80===========================================================================*/
81
82/*----------------------------------------------------------------------------
83 * Include Files
84 * -------------------------------------------------------------------------*/
85#include "vos_trace.h"
86// Pick up the CSR callback definition
87#include "csrApi.h"
88#include "sme_Api.h"
89// SAP Internal API header file
90#include "sapInternal.h"
91
92/*----------------------------------------------------------------------------
93 * Preprocessor Definitions and Constants
94 * -------------------------------------------------------------------------*/
95#define SAP_DEBUG
96
97/*----------------------------------------------------------------------------
98 * Type Declarations
99 * -------------------------------------------------------------------------*/
100
101/*----------------------------------------------------------------------------
102 * Global Data Definitions
103 * -------------------------------------------------------------------------*/
104
105/*----------------------------------------------------------------------------
106 * Static Variable Definitions
107 * -------------------------------------------------------------------------*/
108
109/*----------------------------------------------------------------------------
110 * Static Function Declarations and Definitions
111 * -------------------------------------------------------------------------*/
112
113/*----------------------------------------------------------------------------
114 * Externalized Function Definitions
115* -------------------------------------------------------------------------*/
116
117/*----------------------------------------------------------------------------
118 * Function Declarations and Documentation
119 * -------------------------------------------------------------------------*/
120
121/*==========================================================================
122 FUNCTION WLANSAP_ScanCallback()
123
124 DESCRIPTION
125 Callback for Scan (scan results) Events
126
127 DEPENDENCIES
128 NA.
129
130 PARAMETERS
131
132 IN
133 tHalHandle : tHalHandle passed in with the scan request
134 *pContext : The second context pass in for the caller (sapContext)
135 scanID : scanID got after the scan
136 status : Status of scan -success, failure or abort
137
138 RETURN VALUE
139 The eHalStatus code associated with performing the operation
140
141 eHAL_STATUS_SUCCESS: Success
142
143 SIDE EFFECTS
144============================================================================*/
145eHalStatus
146WLANSAP_ScanCallback
147(
148 tHalHandle halHandle,
149 void *pContext, /* Opaque SAP handle */
150 v_U32_t scanID,
151 eCsrScanStatus scanStatus
152)
153{
154 tScanResultHandle pResult = NULL;
155 eHalStatus scanGetResultStatus = eHAL_STATUS_FAILURE;
156 ptSapContext psapContext = (ptSapContext)pContext;
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530157 void *pTempHddCtx;
Jeff Johnson295189b2012-06-20 16:38:30 -0700158 tWLAN_SAPEvent sapEvent; /* State machine event */
159 v_U8_t operChannel = 0;
160 VOS_STATUS sapstatus;
161#ifdef SOFTAP_CHANNEL_RANGE
162 v_U32_t operatingBand;
163#endif
164
165 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
166
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530167 pTempHddCtx = vos_get_context( VOS_MODULE_ID_HDD,
168 psapContext->pvosGCtx);
169 if (NULL == pTempHddCtx)
170 {
171 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
172 "HDD context is NULL");
173 return eHAL_STATUS_FAILURE;
174 }
175
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700176 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 -0700177
178 switch (scanStatus)
179 {
180 case eCSR_SCAN_SUCCESS:
181 // sapScanCompleteCallback with eCSR_SCAN_SUCCESS
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700182 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 -0700183
184 // Get scan results, Run channel selection algorithm, select channel and keep in pSapContext->Channel
185 scanGetResultStatus = sme_ScanGetResult(halHandle, 0, NULL, &pResult);
186
187 if ((NULL == pResult) || (scanGetResultStatus != eHAL_STATUS_SUCCESS))
188 {
189 // No scan results
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700190 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, sme_ScanGetResult = NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700191 break;
192 }
193
Madan Mohan Koyyalamudi5aef2af2012-10-05 11:56:27 -0700194 operChannel = sapSelectChannel(halHandle, psapContext, pResult);
195
Jeff Johnson295189b2012-06-20 16:38:30 -0700196 sme_ScanResultPurge(halHandle, pResult);
197 break;
198
199 default:
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700200 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 -0700201 }
202
203 if (operChannel == SAP_CHANNEL_NOT_SELECTED)
204#ifdef SOFTAP_CHANNEL_RANGE
205 {
206 if(psapContext->channelList != NULL)
207 {
208 psapContext->channel = psapContext->channelList[0];
209 }
210 else
211 {
212 /* if the channel list is empty then there is no valid channel in
213 the selected sub-band so select default channel in the
214 BAND(2.4GHz/5GHZ) */
215 ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
216 if(RF_SUBBAND_2_4_GHZ == operatingBand )
217 psapContext->channel = SAP_DEFAULT_CHANNEL;
218 else
219 psapContext->channel = SAP_DEFAULT_5GHZ_CHANNEL;
220
221 }
222 }
223#else
224 psapContext->channel = SAP_DEFAULT_CHANNEL;
225#endif
226 else
227 {
228 psapContext->channel = operChannel;
229 }
Gopichand Nakkala936715f2013-03-18 19:48:10 +0530230
231 wlan_sap_select_cbmode(pTempHddCtx, psapContext->csrRoamProfile.phyMode,
232 psapContext->channel);
Jeff Johnson295189b2012-06-20 16:38:30 -0700233#ifdef SOFTAP_CHANNEL_RANGE
234 if(psapContext->channelList != NULL)
235 {
236 /* Always free up the memory for channel selection whatever
237 * the result */
238 vos_mem_free(psapContext->channelList);
239 psapContext->channelList = NULL;
240 }
241#endif
242
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700243 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 -0700244
245 /* Fill in the event structure */
246 sapEvent.event = eSAP_MAC_SCAN_COMPLETE;
247 sapEvent.params = 0; // pCsrRoamInfo;
248 sapEvent.u1 = scanStatus; // roamstatus
249 sapEvent.u2 = 0; // roamResult
250
251 /* Handle event */
252 sapstatus = sapFsm(psapContext, &sapEvent);
253
254 return sapstatus;
255}// WLANSAP_ScanCallback
256
257/*==========================================================================
258 FUNCTION WLANSAP_RoamCallback()
259
260 DESCRIPTION
261 Callback for Roam (connection status) Events
262
263 DEPENDENCIES
264 NA.
265
266 PARAMETERS
267
268 IN
269 pContext : pContext passed in with the roam request
270 pCsrRoamInfo : Pointer to a tCsrRoamInfo, see definition of eRoamCmdStatus and
271 eRoamCmdResult: For detail valid members. It may be NULL
272 roamId : To identify the callback related roam request. 0 means unsolicited
273 roamStatus : Flag indicating the status of the callback
274 roamResult : Result
275
276 RETURN VALUE
277 The eHalStatus code associated with performing the operation
278
279 eHAL_STATUS_SUCCESS: Success
280
281 SIDE EFFECTS
282============================================================================*/
283eHalStatus
284WLANSAP_RoamCallback
285(
286 void *pContext, /* Opaque SAP handle */
287 tCsrRoamInfo *pCsrRoamInfo,
288 v_U32_t roamId,
289 eRoamCmdStatus roamStatus,
290 eCsrRoamResult roamResult
291)
292{
293 /* sapContext value */
294 ptSapContext sapContext = (ptSapContext) pContext;
295 tWLAN_SAPEvent sapEvent; /* State machine event */
296 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
297 eHalStatus halStatus = eHAL_STATUS_SUCCESS;
298
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700299 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 -0700300 switch(roamStatus)
301 {
302 case eCSR_ROAM_SESSION_OPENED:
303 {
304 /* tHalHandle */
305 tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx);
306
307 if (NULL == hHal)
308 {
309 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700310 "In %s invalid hHal", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 halStatus = eHAL_STATUS_FAILED_ALLOC;
312 }
313 else
314 {
315 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700316 "In %s calling sme_RoamConnect with eCSR_BSS_TYPE_INFRA_AP", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 sapContext->isSapSessionOpen = eSAP_TRUE;
318 halStatus = sme_RoamConnect(hHal, sapContext->sessionId,
319 &sapContext->csrRoamProfile,
320 &sapContext->csrRoamId);
321 }
322 break;
323 }
324
325 case eCSR_ROAM_INFRA_IND:
326 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 -0700327 __func__, "eCSR_ROAM_INFRA_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700328 if(roamResult == eCSR_ROAM_RESULT_INFRA_START_FAILED)
329 {
330 /* Fill in the event structure */
331 sapEvent.event = eSAP_MAC_START_FAILS;
332 sapEvent.params = pCsrRoamInfo;
333 sapEvent.u1 = roamStatus;
334 sapEvent.u2 = roamResult;
335
336 /* Handle event */
337 vosStatus = sapFsm(sapContext, &sapEvent);
338 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
339 {
340 halStatus = eHAL_STATUS_FAILURE;
341 }
342 }
343 break;
344
345 case eCSR_ROAM_LOSTLINK:
346 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 -0700347 __func__, "eCSR_ROAM_LOSTLINK", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 break;
349
350 case eCSR_ROAM_MIC_ERROR_IND:
351 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 -0700352 __func__, "eCSR_ROAM_MIC_ERROR_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 break;
354
355 case eCSR_ROAM_SET_KEY_COMPLETE:
356 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 -0700357 __func__, "eCSR_ROAM_SET_KEY_COMPLETE", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
359 {
360 /* Format the SET KEY complete information pass to HDD... */
361 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_SET_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_FAILURE);
362 }
363 break;
364
365 case eCSR_ROAM_REMOVE_KEY_COMPLETE:
366 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 -0700367 __func__, "eCSR_ROAM_REMOVE_KEY_COMPLETE", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700368 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
369 {
370 /* Format the SET KEY complete information pass to HDD... */
371 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_DEL_KEY_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
372 }
373 break;
374
375 case eCSR_ROAM_ASSOCIATION_COMPLETION:
376 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 -0700377 __func__, "eCSR_ROAM_ASSOCIATION_COMPLETION", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700378 if (roamResult == eCSR_ROAM_RESULT_FAILURE )
379 {
380 /* Format the SET KEY complete information pass to HDD... */
381 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_REASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_FAILURE);
382 }
383 break;
384
385 case eCSR_ROAM_DISASSOCIATED:
386 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 -0700387 __func__, "eCSR_ROAM_DISASSOCIATED", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 if (roamResult == eCSR_ROAM_RESULT_MIC_FAILURE)
389 {
390 /* Format the MIC failure event to return... */
391 sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) eSAP_STATUS_FAILURE);
392 }
393 break;
394
395 case eCSR_ROAM_WPS_PBC_PROBE_REQ_IND:
396 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 -0700397 __func__, "eCSR_ROAM_WPS_PBC_PROBE_REQ_IND", roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 break;
399
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 case eCSR_ROAM_INDICATE_MGMT_FRAME:
401 sapSignalHDDevent(sapContext, pCsrRoamInfo,
402 eSAP_INDICATE_MGMT_FRAME,
403 (v_PVOID_t) eSAP_STATUS_SUCCESS);
404 break;
405 case eCSR_ROAM_REMAIN_CHAN_READY:
406 sapSignalHDDevent(sapContext, pCsrRoamInfo,
407 eSAP_REMAIN_CHAN_READY,
408 (v_PVOID_t) eSAP_STATUS_SUCCESS);
409 break;
410 case eCSR_ROAM_SEND_ACTION_CNF:
411 sapSignalHDDevent(sapContext, pCsrRoamInfo,
412 eSAP_SEND_ACTION_CNF,
413 (v_PVOID_t)(( roamResult == eCSR_ROAM_RESULT_NONE) ?
414 eSAP_STATUS_SUCCESS : eSAP_STATUS_FAILURE));
415 break;
Madan Mohan Koyyalamudi167b95e2012-11-27 15:53:38 -0800416
417 case eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS:
418 sapSignalHDDevent(sapContext, pCsrRoamInfo,
419 eSAP_DISCONNECT_ALL_P2P_CLIENT,
420 (v_PVOID_t) eSAP_STATUS_SUCCESS );
421 break;
422
423 case eCSR_ROAM_SEND_P2P_STOP_BSS:
424 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Received stopbss", __func__);
425 sapSignalHDDevent(sapContext, pCsrRoamInfo,
426 eSAP_MAC_TRIG_STOP_BSS_EVENT,
427 (v_PVOID_t) eSAP_STATUS_SUCCESS );
428 break;
Jeff Johnson295189b2012-06-20 16:38:30 -0700429
430 default:
431 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 -0700432 __func__, get_eRoamCmdStatus_str(roamStatus), roamStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 break;
434
435 }
436
437 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 -0700438 __func__, roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700439
440 switch (roamResult)
441 {
442 case eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND:
443 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 -0700444 __func__, "eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 sapContext->nStaWPARSnReqIeLength = pCsrRoamInfo->rsnIELen;
446
447 if(sapContext->nStaWPARSnReqIeLength)
448 vos_mem_copy( sapContext->pStaWpaRsnReqIE,
449 pCsrRoamInfo->prsnIE, sapContext->nStaWPARSnReqIeLength);
450
451 sapContext->nStaAddIeLength = pCsrRoamInfo->addIELen;
452
453 if(sapContext->nStaAddIeLength)
454 vos_mem_copy( sapContext->pStaAddIE,
455 pCsrRoamInfo->paddIE, sapContext->nStaAddIeLength);
456
457 sapContext->SapQosCfg.WmmIsEnabled = pCsrRoamInfo->wmmEnabledSta;
458 // MAC filtering
459 vosStatus = sapIsPeerMacAllowed(sapContext, (v_U8_t *)pCsrRoamInfo->peerMac);
460
461 if ( VOS_STATUS_SUCCESS == vosStatus )
462 {
463 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_ASSOC_IND, (v_PVOID_t)eSAP_STATUS_SUCCESS);
464 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
465 {
466 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
467 "In %s, CSR roamResult = (%d) MAC"
468 "(%02X-%02X-%02X-%02X-%02X-%02X) fail",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700469 __func__, roamResult, pCsrRoamInfo->peerMac[0],
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 pCsrRoamInfo->peerMac[1], pCsrRoamInfo->peerMac[2],
471 pCsrRoamInfo->peerMac[3], pCsrRoamInfo->peerMac[4],
472 pCsrRoamInfo->peerMac[5]);
473 halStatus = eHAL_STATUS_FAILURE;
474 }
475 }
476 else
477 {
478 VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_WARN,
479 "In %s, CSR roamResult = (%d) MAC"
480 "(%02X-%02X-%02X-%02X-%02X-%02X) not allowed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, roamResult, pCsrRoamInfo->peerMac[0],
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 pCsrRoamInfo->peerMac[1], pCsrRoamInfo->peerMac[2],
483 pCsrRoamInfo->peerMac[3], pCsrRoamInfo->peerMac[4], pCsrRoamInfo->peerMac[5]);
484 halStatus = eHAL_STATUS_FAILURE;
485 }
486
487 break;
488
489 case eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF:
490 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 -0700491 __func__, "eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700492
493 sapContext->nStaWPARSnReqIeLength = pCsrRoamInfo->rsnIELen;
494 if (sapContext->nStaWPARSnReqIeLength)
495 vos_mem_copy( sapContext->pStaWpaRsnReqIE,
496 pCsrRoamInfo->prsnIE, sapContext->nStaWPARSnReqIeLength);
497
498 sapContext->nStaAddIeLength = pCsrRoamInfo->addIELen;
499 if(sapContext->nStaAddIeLength)
500 vos_mem_copy( sapContext->pStaAddIE,
501 pCsrRoamInfo->paddIE, sapContext->nStaAddIeLength);
502
503 sapContext->SapQosCfg.WmmIsEnabled = pCsrRoamInfo->wmmEnabledSta;
504 /* Fill in the event structure */
505 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_ASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
506 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
507 {
508 halStatus = eHAL_STATUS_FAILURE;
509 }
510 break;
511
512 case eCSR_ROAM_RESULT_DISASSOC_IND:
513 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 -0700514 __func__, "eCSR_ROAM_RESULT_DISASSOC_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* Fill in the event structure */
516 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_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_DEAUTH_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_DEAUTH_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* Fill in the event structure */
527 //TODO: we will use the same event inorder to inform HDD to disassociate the station
528 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
529 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
530 {
531 halStatus = eHAL_STATUS_FAILURE;
532 }
533 break;
534
535 case eCSR_ROAM_RESULT_MIC_ERROR_GROUP:
536 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 -0700537 __func__, "eCSR_ROAM_RESULT_MIC_ERROR_GROUP", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 /* Fill in the event structure */
539 //TODO: support for group key MIC failure event to be handled
540 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) NULL);
541 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
542 {
543 halStatus = eHAL_STATUS_FAILURE;
544 }
545 break;
546
547 case eCSR_ROAM_RESULT_MIC_ERROR_UNICAST:
548 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 -0700549 __func__, "eCSR_ROAM_RESULT_MIC_ERROR_UNICAST", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 /* Fill in the event structure */
551 //TODO: support for unicast key MIC failure event to be handled
552 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_MIC_FAILURE_EVENT,(v_PVOID_t) NULL);
553 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
554 {
555 halStatus = eHAL_STATUS_FAILURE;
556 }
557 break;
558
559 case eCSR_ROAM_RESULT_AUTHENTICATED:
560 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 -0700561 __func__, "eCSR_ROAM_RESULT_AUTHENTICATED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* Fill in the event structure */
563 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_SET_KEY_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
564 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
565 {
566 halStatus = eHAL_STATUS_FAILURE;
567 }
568 break;
569
570 case eCSR_ROAM_RESULT_ASSOCIATED:
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_ASSOCIATED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 /* Fill in the event structure */
574 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_REASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
575 break;
576
577 case eCSR_ROAM_RESULT_INFRA_STARTED:
578 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 -0700579 __func__, "eCSR_ROAM_RESULT_INFRA_STARTED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 /* Fill in the event structure */
581 sapEvent.event = eSAP_MAC_START_BSS_SUCCESS;
582 sapEvent.params = pCsrRoamInfo;
583 sapEvent.u1 = roamStatus;
584 sapEvent.u2 = roamResult;
585
586 /* Handle event */
587 vosStatus = sapFsm(sapContext, &sapEvent);
588 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
589 {
590 halStatus = eHAL_STATUS_FAILURE;
591 }
592 break;
593
594 case eCSR_ROAM_RESULT_INFRA_STOPPED:
595 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 -0700596 __func__, "eCSR_ROAM_RESULT_INFRA_STOPPED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 /* Fill in the event structure */
598 sapEvent.event = eSAP_MAC_READY_FOR_CONNECTIONS;
599 sapEvent.params = pCsrRoamInfo;
600 sapEvent.u1 = roamStatus;
601 sapEvent.u2 = roamResult;
602
603 /* Handle event */
604 vosStatus = sapFsm(sapContext, &sapEvent);
605 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
606 {
607 halStatus = eHAL_STATUS_FAILURE;
608 }
609 break;
610
611 case eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND:
612 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 -0700613 __func__, "eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700614 /* Fill in the event structure */
615 //TODO: support for group key MIC failure event to be handled
616 vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_WPS_PBC_PROBE_REQ_EVENT,(v_PVOID_t) NULL);
617 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
618 {
619 halStatus = eHAL_STATUS_FAILURE;
620 }
621 break;
622
623 case eCSR_ROAM_RESULT_FORCED:
624 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 -0700625 __func__, "eCSR_ROAM_RESULT_FORCED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 //This event can be used to inform hdd about user triggered disassoc event
627 /* Fill in the event structure */
628 sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
629 break;
630
631 case eCSR_ROAM_RESULT_NONE:
632 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 -0700633 __func__, "eCSR_ROAM_RESULT_NONE", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 //This event can be used to inform hdd about user triggered disassoc event
635 /* Fill in the event structure */
636 if ( roamStatus == eCSR_ROAM_SET_KEY_COMPLETE)
637 {
638 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_SET_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_SUCCESS);
639 }
640 else if (roamStatus == eCSR_ROAM_REMOVE_KEY_COMPLETE )
641 {
642 sapSignalHDDevent( sapContext, pCsrRoamInfo,eSAP_STA_DEL_KEY_EVENT,(v_PVOID_t) eSAP_STATUS_SUCCESS);
643 }
644 break;
645
646 case eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED:
647 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 -0700648 __func__, "eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED", roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* Fill in the event structure */
650 vosStatus = sapSignalHDDevent(sapContext, pCsrRoamInfo, eSAP_MAX_ASSOC_EXCEEDED, (v_PVOID_t)NULL);
651 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
652 {
653 halStatus = eHAL_STATUS_FAILURE;
654 }
655
656 break;
657 default:
658 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 -0700659 __func__,get_eCsrRoamResult_str(roamResult),roamResult);
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 break;
661 }
662
663 return halStatus;
664}