blob: 12803fb60f9c566c6223bc1ad1a9ed94a57aa97c [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/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
158void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
159 tANI_U32 *pConfig) ;
160void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
161 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
162void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
163 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
164void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
165 void* pUserData ) ;
166static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
167static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700183#ifdef WLAN_FEATURE_PACKET_FILTERING
184static VOS_STATUS WDA_Process8023MulticastListReq (
185 tWDA_CbContext *pWDA,
186 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
187 );
188static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
189 tWDA_CbContext *pWDA,
190 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
191 );
192static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
193 tWDA_CbContext *pWDA,
194 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvFltPktClearParam *pRcvFltPktClearParam
199 );
200#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700202static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
203 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700204VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
205 v_U8_t *pDefaultKeyId,
206 v_U8_t *pNumKeys,
207 WDI_KeysType *pWdiKeys );
208
209#ifdef WLAN_FEATURE_GTK_OFFLOAD
210static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
211static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
212#endif // WLAN_FEATURE_GTK_OFFLOAD
213
214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700220/*
221 * FUNCTION: WDA_open
222 * Allocate the WDA context
223 */
224VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
225 tMacOpenParameters *pMacParams )
226{
227 tWDA_CbContext *wdaContext;
228 VOS_STATUS status;
229 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700230 /* Allocate WDA context */
231 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
232 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
233 if(!VOS_IS_STATUS_SUCCESS(status))
234 {
235 return VOS_STATUS_E_NOMEM;
236 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700237 /*__asm int 3;*/
238 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
239
240 /* Initialize data structures */
241 wdaContext->pVosContext = pVosContext;
242 wdaContext->wdaState = WDA_INIT_STATE;
243 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
244
245 /* Initialize WDA-WDI synchronization event */
246 status = vos_event_init(&wdaContext->wdaWdiEvent);
247 if(!VOS_IS_STATUS_SUCCESS(status))
248 {
249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
250 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800251 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700252 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 /* Init Frame transfer event */
254 status = vos_event_init(&wdaContext->txFrameEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 status = vos_event_init(&wdaContext->suspendDataTxEvent);
262 if(!VOS_IS_STATUS_SUCCESS(status))
263 {
264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
265 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800266 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
269 if(!VOS_IS_STATUS_SUCCESS(status))
270 {
271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
272 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800273 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 wdaContext->driverMode = pMacParams->driverType;
277 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
278 &wdiDevCapability, pMacParams->driverType))
279 {
280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
281 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800282 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 }
284 else
285 {
286 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
287 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
288 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 /* update max STA in WDA used for BA */
290 wdaContext->wdaMaxSta = pMacParams->maxStation;
291 /* store the frameTransRequired flag in wdaContext, to send this to HAL
292 * in WDA_Start
293 */
294 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
295 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800297
298error:
299 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
300 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700301}
302
Jeff Johnson295189b2012-06-20 16:38:30 -0700303/*
304 * FUNCTION: WDA_preStart
305 * Trigger DAL-AL to start CFG download
306 */
307VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
308{
309 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
310 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 /*
312 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
313 */
314 wdaMsg.type = WNI_CFG_DNLD_REQ ;
315 wdaMsg.bodyptr = NULL;
316 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 /* post the message.. */
318 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
319 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
320 {
321 vosStatus = VOS_STATUS_E_BADMSG;
322 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 return( vosStatus );
324}
Jeff Johnson295189b2012-06-20 16:38:30 -0700325/*
326 * FUNCTION: WDA_wdiStartCallback
327 * Once WDI_Start is finished, WDI start callback will be called by WDI
328 * to indicate completion of WDI_Start.
329 */
330void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
331 void *pVosContext)
332{
333 tWDA_CbContext *wdaContext;
334 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700335 if (NULL == pVosContext)
336 {
337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700338 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700339 return;
340 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
342 if (NULL == wdaContext)
343 {
344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700345 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 return;
347 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 }
353 else
354 {
355 wdaContext->wdaState = WDA_START_STATE;
356 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 /* extract and save version information from the Start Response */
358 wdaContext->wcnssWlanCompiledVersion.major =
359 wdiRspParams->wlanCompiledVersion.major;
360 wdaContext->wcnssWlanCompiledVersion.minor =
361 wdiRspParams->wlanCompiledVersion.minor;
362 wdaContext->wcnssWlanCompiledVersion.version =
363 wdiRspParams->wlanCompiledVersion.version;
364 wdaContext->wcnssWlanCompiledVersion.revision =
365 wdiRspParams->wlanCompiledVersion.revision;
366 wdaContext->wcnssWlanReportedVersion.major =
367 wdiRspParams->wlanReportedVersion.major;
368 wdaContext->wcnssWlanReportedVersion.minor =
369 wdiRspParams->wlanReportedVersion.minor;
370 wdaContext->wcnssWlanReportedVersion.version =
371 wdiRspParams->wlanReportedVersion.version;
372 wdaContext->wcnssWlanReportedVersion.revision =
373 wdiRspParams->wlanReportedVersion.revision;
374 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
375 wdiRspParams->wcnssSoftwareVersion,
376 sizeof(wdaContext->wcnssSoftwareVersionString));
377 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
378 wdiRspParams->wcnssHardwareVersion,
379 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 /* Notify WDA_start that WDI_Start has completed */
381 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700382 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700385 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 return;
388}
389
Jeff Johnson295189b2012-06-20 16:38:30 -0700390/*
391 * FUNCTION: WDA_start
392 * Prepare TLV configuration and call WDI_Start.
393 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700394VOS_STATUS WDA_start(v_PVOID_t pVosContext)
395{
396 tWDA_CbContext *wdaContext;
397 VOS_STATUS status;
398 WDI_Status wdiStatus;
399 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 if (NULL == pVosContext)
401 {
402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700403 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 return VOS_STATUS_E_FAILURE;
405 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
407 if (NULL == wdaContext)
408 {
409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700410 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 return VOS_STATUS_E_FAILURE;
412 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 /* Non-FTM mode, WDA status for START must be INIT
414 * FTM mode, WDA Status for START can be INIT or STOP */
415 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
416 (WDA_STOP_STATE != wdaContext->wdaState) )
417 {
418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
419 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700420 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 return VOS_STATUS_E_FAILURE;
422 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /* initialize the wdiStartParam. Note that we can create this on
424 the stack since we won't exit until WDI_Start() completes or
425 times out */
426 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* prepare the config TLV for the WDI */
429 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
430 if ( !VOS_IS_STATUS_SUCCESS(status) )
431 {
432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* note from here onwards if an error occurs we must
437 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
439 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
440 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* initialize the WDA-WDI synchronization event */
442 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* call WDI start */
444 wdiStatus = WDI_Start(&wdiStartParam,
445 (WDI_StartRspCb)WDA_wdiStartCallback,
446 (v_VOID_t *)pVosContext);
447 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
448 {
449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700450 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 vos_mem_free(wdiStartParam.pConfigBuffer);
452 return VOS_STATUS_E_FAILURE;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* wait for WDI start to invoke our callback */
455 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
456 WDA_WDI_START_TIMEOUT );
457 if ( !VOS_IS_STATUS_SUCCESS(status) )
458 {
459 if ( VOS_STATUS_E_TIMEOUT == status )
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
464 else
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
467 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700468 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 }
470 vos_mem_free(wdiStartParam.pConfigBuffer);
471 return VOS_STATUS_E_FAILURE;
472 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 /* we no longer need the config TLV */
475 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* if we are not in the START state then WDI_Start() failed */
477 if (WDA_START_STATE != wdaContext->wdaState)
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700480 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 return VOS_STATUS_E_FAILURE;
482 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* FTM mode does not need to monitor BA activity */
484 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
485 {
486 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800487 if(VOS_STATUS_SUCCESS == status)
488 {
489 wdaContext->wdaTimersCreated = VOS_TRUE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 return status;
493}
494
Jeff Johnson295189b2012-06-20 16:38:30 -0700495/*
496 * FUNCTION: WDA_prepareConfigTLV
497 * Function to prepare CFG for DAL(WDA)
498 */
499VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
500 WDI_StartReqParamsType *wdiStartParams )
501{
502 /* get pMac to acess CFG data base */
503 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
504 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
505 tHalCfg *tlvStruct = NULL ;
506 tANI_U8 *tlvStructStart = NULL ;
507 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
508 v_PVOID_t *configParam;
509 tANI_U32 configParamSize;
510 tANI_U32 *configDataValue;
511 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 if ((NULL == pMac)||(NULL == wdaContext))
513 {
514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700515 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 VOS_ASSERT(0);
517 return VOS_STATUS_E_FAILURE;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
520 WNI_CFG_STA_ID_LEN +
521 WNI_CFG_EDCA_WME_ACBK_LEN +
522 WNI_CFG_EDCA_WME_ACBE_LEN +
523 WNI_CFG_EDCA_WME_ACVI_LEN +
524 WNI_CFG_EDCA_WME_ACVO_LEN +
525 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* malloc memory for all configs in one shot */
527 configParam = vos_mem_malloc(configParamSize);
528
529 if(NULL == configParam )
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 VOS_ASSERT(0) ;
534 return VOS_STATUS_E_NOMEM;
535 }
536 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 tlvStruct = (tHalCfg *)configParam;
539 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 /* TODO: Remove Later */
541 /* QWLAN_HAL_CFG_STA_ID */
542 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
543 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
544 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
545 eSIR_SUCCESS)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
548 "Failed to get value for WNI_CFG_STA_ID");
549 goto handle_failure;
550 }
551 tlvStruct->length = strLength ;
552 /* calculate the pad bytes to have the CFG in aligned format */
553 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
554 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
556 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
558 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
559 tlvStruct->length = sizeof(tANI_U32);
560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
561 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
562 != eSIR_SUCCESS)
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
565 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
566 goto handle_failure;
567 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
569 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
571 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
572 tlvStruct->length = sizeof(tANI_U32);
573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
574 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
575 eSIR_SUCCESS)
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
579 goto handle_failure;
580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
582 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
584 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
585 tlvStruct->length = sizeof(tANI_U32);
586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
587 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
588 != eSIR_SUCCESS)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
591 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
592 goto handle_failure;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
595 + sizeof(tHalCfg) + tlvStruct->length)) ;
596
597 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
598 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
599 tlvStruct->length = sizeof(tANI_U32);
600 configDataValue = (tANI_U32 *)(tlvStruct + 1);
601 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
602 configDataValue ) != eSIR_SUCCESS)
603 {
604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
605 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
606 goto handle_failure;
607 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
609 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* QWLAN_HAL_CFG_CAL_PERIOD */
611 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
612 tlvStruct->length = sizeof(tANI_U32);
613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
614 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
615 != eSIR_SUCCESS)
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "Failed to get value for WNI_CFG_CAL_PERIOD");
619 goto handle_failure;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
622 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* QWLAN_HAL_CFG_CAL_CONTROL */
624 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
625 tlvStruct->length = sizeof(tANI_U32);
626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
627 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
628 != eSIR_SUCCESS)
629 {
630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
631 "Failed to get value for WNI_CFG_CAL_CONTROL");
632 goto handle_failure;
633 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
635 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* QWLAN_HAL_CFG_PROXIMITY */
637 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
638 tlvStruct->length = sizeof(tANI_U32);
639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
640 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
641 != eSIR_SUCCESS)
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
644 "Failed to get value for WNI_CFG_PROXIMITY");
645 goto handle_failure;
646 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
648 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
650 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
651 tlvStruct->length = sizeof(tANI_U32);
652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
653 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
654 != eSIR_SUCCESS)
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
657 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
658 goto handle_failure;
659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
661 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
663 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
664 tlvStruct->length = sizeof(tANI_U32);
665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
666 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
667 eSIR_SUCCESS)
668 {
669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
670 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
671 goto handle_failure;
672 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
674 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
676 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
677 tlvStruct->length = sizeof(tANI_U32);
678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
679 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
680 configDataValue ) != eSIR_SUCCESS)
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
684 goto handle_failure;
685 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
687 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
689 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
690 tlvStruct->length = sizeof(tANI_U32);
691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
692 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
693 eSIR_SUCCESS)
694 {
695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
696 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
697 goto handle_failure;
698 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
700 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
702 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
703 tlvStruct->length = sizeof(tANI_U32);
704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
705 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
706 eSIR_SUCCESS)
707 {
708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
709 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
710 goto handle_failure;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
713 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
715 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
719 eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
728 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
732 configDataValue ) != eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
741 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
745 configDataValue ) != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length));
753
754 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
755 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
756 tlvStruct->length = sizeof(tANI_U32);
757 configDataValue = (tANI_U32 *)(tlvStruct + 1);
758 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
759 configDataValue ) != eSIR_SUCCESS)
760 {
761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
762 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
763 goto handle_failure;
764 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
766 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
768 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
772 configDataValue ) != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length));
780
781 /* QWLAN_HAL_CFG_FIXED_RATE */
782 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
786 != eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_FIXED_RATE");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
794
795 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
796 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
797 tlvStruct->length = sizeof(tANI_U32);
798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
799 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
800 != eSIR_SUCCESS)
801 {
802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
803 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
804 goto handle_failure;
805 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
807 + sizeof(tHalCfg) + tlvStruct->length));
808
809 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
810 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
811 tlvStruct->length = sizeof(tANI_U32);
812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
813 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
814 configDataValue ) != eSIR_SUCCESS)
815 {
816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
817 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
818 goto handle_failure;
819 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
821 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700822 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
823 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
827 configDataValue ) != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
831 goto handle_failure;
832 }
833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700835 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
836 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
837 tlvStruct->length = sizeof(tANI_U32);
838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
839 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
840 configDataValue ) != eSIR_SUCCESS)
841 {
842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
843 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
844 goto handle_failure;
845 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
847 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
849 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
850 tlvStruct->length = sizeof(tANI_U32);
851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
852 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
853 configDataValue ) != eSIR_SUCCESS)
854 {
855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
856 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
857 goto handle_failure;
858 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
860 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
874
875#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
876 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
877 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
878 tlvStruct->length = sizeof(tANI_U32);
879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
880 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
881 configDataValue ) != eSIR_SUCCESS)
882 {
883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
884 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
885 goto handle_failure;
886 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
888 + sizeof(tHalCfg) + tlvStruct->length);
889#endif
890 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
891 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
892 tlvStruct->length = sizeof(tANI_U32);
893 configDataValue = (tANI_U32 *)(tlvStruct + 1);
894 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
895 configDataValue ) != eSIR_SUCCESS)
896 {
897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
898 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
899 goto handle_failure;
900 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
902 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
904 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
905 tlvStruct->length = sizeof(tANI_U32);
906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
907 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
908 eSIR_SUCCESS)
909 {
910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
911 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
912 goto handle_failure;
913 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
915 + sizeof(tHalCfg) + tlvStruct->length);
916
917 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
918 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
919 tlvStruct->length = sizeof(tANI_U32);
920 configDataValue = (tANI_U32 *)(tlvStruct + 1);
921 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
922 configDataValue ) != eSIR_SUCCESS)
923 {
924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
925 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
926 goto handle_failure;
927 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
929 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700930 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
931 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
932 tlvStruct->length = sizeof(tANI_U32);
933 configDataValue = (tANI_U32 *)(tlvStruct + 1);
934 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
935 configDataValue ) != eSIR_SUCCESS)
936 {
937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
938 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
939 goto handle_failure;
940 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
942 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
944 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
945 tlvStruct->length = sizeof(tANI_U32);
946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
947 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
948 configDataValue ) != eSIR_SUCCESS)
949 {
950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
951 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
952 goto handle_failure;
953 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
955 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
957 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
969
970 /* QWLAN_HAL_CFG_STATS_PERIOD */
971 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
972 tlvStruct->length = sizeof(tANI_U32);
973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
974 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
975 eSIR_SUCCESS)
976 {
977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
978 "Failed to get value for WNI_CFG_STATS_PERIOD");
979 goto handle_failure;
980 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
982 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
984 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
988 eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
997 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
998 tlvStruct->length = sizeof(tANI_U32);
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1001 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1005 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1009 != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1018 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1019 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1022 &strLength) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1026 goto handle_failure;
1027 }
1028 tlvStruct->length = strLength;
1029 /* calculate the pad bytes to have the CFG in aligned format */
1030 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1031 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1033 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1035 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1036 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1039 &strLength) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1043 goto handle_failure;
1044 }
1045 tlvStruct->length = strLength;
1046 /* calculate the pad bytes to have the CFG in aligned format */
1047 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1048 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1050 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1052 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1053 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1055 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1056 &strLength) != eSIR_SUCCESS)
1057 {
1058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1059 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1060 goto handle_failure;
1061 }
1062 tlvStruct->length = strLength;
1063 /* calculate the pad bytes to have the CFG in aligned format */
1064 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1065 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1069 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1070 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1073 &strLength) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1077 goto handle_failure;
1078 }
1079 tlvStruct->length = strLength;
1080 /* calculate the pad bytes to have the CFG in aligned format */
1081 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1082 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1084 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1086 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1090 != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1099 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1103 != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1112 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1116 != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1125 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1133 goto handle_failure;
1134 }
1135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1138 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1146 goto handle_failure;
1147 }
1148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1151 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1159 goto handle_failure;
1160 }
1161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1190 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1203 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1216 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1229 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1230 * into FW, so the parameters are added here.
1231 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1240 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1241 tlvStruct->length = sizeof(tANI_U32);
1242 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1243 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1244 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1245 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1247 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1248 tlvStruct->length = sizeof(tANI_U32);
1249 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1250 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1251 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1252 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001253 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1254 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1255 tlvStruct->length = sizeof(tANI_U32);
1256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1257 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1258 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1259 + sizeof(tHalCfg) + tlvStruct->length) ;
1260
1261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1362 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1363 wcnssCompiledApiVersion.minor,
1364 wcnssCompiledApiVersion.version,
1365 wcnssCompiledApiVersion.revision);
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
1368
Jeff Johnsond13512a2012-07-17 11:42:19 -07001369 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1370 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1374 configDataValue ) != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1378 goto handle_failure;
1379 }
1380
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1384 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1385 tlvStruct->length = sizeof(tANI_U32);
1386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1387 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1388 configDataValue ) != eSIR_SUCCESS)
1389 {
1390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1391 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1392 goto handle_failure;
1393 }
1394
1395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1396 + sizeof(tHalCfg) + tlvStruct->length) ;
1397
1398 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1399 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1403 != eSIR_SUCCESS)
1404 {
1405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1406 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1407 goto handle_failure;
1408 }
1409
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001413 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1414 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1418 != eSIR_SUCCESS)
1419 {
1420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1421 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1422 goto handle_failure;
1423 }
1424
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001427#ifdef WLAN_SOFTAP_VSTA_FEATURE
1428 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1429 tlvStruct->length = sizeof(tANI_U32);
1430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1431 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1432 != eSIR_SUCCESS)
1433 {
1434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1435 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1436 goto handle_failure;
1437 }
1438
1439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1440 + sizeof(tHalCfg) + tlvStruct->length) ;
1441#endif
1442
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001443 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1444 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1445 tlvStruct->length = sizeof(tANI_U32);
1446 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1447
1448 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1449 != eSIR_SUCCESS)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1452 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1453 goto handle_failure;
1454 }
1455
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301459/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1460 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1464 configDataValue ) != eSIR_SUCCESS)
1465 {
1466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1467 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1468 goto handle_failure;
1469 }
1470
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Jeff Johnson295189b2012-06-20 16:38:30 -07001474 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001475#ifdef WLAN_DEBUG
1476 {
1477 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1479 "****** Dumping CFG TLV ***** ");
1480 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1481 {
1482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1483 "%02x %02x %02x %02x %02x %02x %02x %02x",
1484 tlvStructStart[i],
1485 tlvStructStart[i+1],
1486 tlvStructStart[i+2],
1487 tlvStructStart[i+3],
1488 tlvStructStart[i+4],
1489 tlvStructStart[i+5],
1490 tlvStructStart[i+6],
1491 tlvStructStart[i+7]);
1492 }
1493 /* Dump the bytes in the last line*/
1494 for (; i < wdiStartParams->usConfigBufferLen; i++)
1495 {
1496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1497 "%02x ",tlvStructStart[i]);
1498 }
1499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1500 "**************************** ");
1501 }
1502#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001503 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001504handle_failure:
1505 vos_mem_free(configParam);
1506 return VOS_STATUS_E_FAILURE;
1507}
Jeff Johnson295189b2012-06-20 16:38:30 -07001508/*
1509 * FUNCTION: WDA_wdiCompleteCB
1510 * call the voss call back function
1511 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001512void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001513{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1515 tWDA_CbContext *wdaContext;
1516
1517 if(NULL == pWdaParams)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001520 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001521 VOS_ASSERT(0) ;
1522 return ;
1523 }
1524
1525 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1526
Jeff Johnson295189b2012-06-20 16:38:30 -07001527 if (NULL == wdaContext)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001530 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001531 return ;
1532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001533
Jeff Johnson295189b2012-06-20 16:38:30 -07001534 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001535 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001536 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539 vos_mem_free(pWdaParams);
1540
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 if(WDI_STATUS_SUCCESS != status)
1542 {
1543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1544 "WDI stop callback returned failure" );
1545 VOS_ASSERT(0) ;
1546 }
1547 else
1548 {
1549 wdaContext->wdaState = WDA_STOP_STATE;
1550 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001551
Jeff Johnson295189b2012-06-20 16:38:30 -07001552 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001553 vos_WDAComplete_cback(wdaContext->pVosContext);
1554
Jeff Johnson295189b2012-06-20 16:38:30 -07001555 return ;
1556}
Jeff Johnson295189b2012-06-20 16:38:30 -07001557/*
1558 * FUNCTION: WDA_stop
1559 * call WDI_stop
1560 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001561VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1562{
1563 WDI_Status wdiStatus;
1564 VOS_STATUS status = VOS_STATUS_SUCCESS;
1565 WDI_StopReqParamsType *wdiStopReq;
1566 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001567 tWDA_ReqParams *pWdaParams ;
1568
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 if (NULL == pWDA)
1570 {
1571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001572 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001573 VOS_ASSERT(0);
1574 return VOS_STATUS_E_FAILURE;
1575 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001576 if (pWDA->wdiFailed == true)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001579 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001580 return VOS_STATUS_E_ALREADY;
1581 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001582
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 /* FTM mode stay START_STATE */
1584 if( (WDA_READY_STATE != pWDA->wdaState) &&
1585 (WDA_INIT_STATE != pWDA->wdaState) &&
1586 (WDA_START_STATE != pWDA->wdaState) )
1587 {
1588 VOS_ASSERT(0);
1589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 wdiStopReq = (WDI_StopReqParamsType *)
1591 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1592 if(NULL == wdiStopReq)
1593 {
1594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 VOS_ASSERT(0);
1597 return VOS_STATUS_E_NOMEM;
1598 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001599
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 wdiStopReq->wdiStopReason = reason;
1601 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602
1603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1604 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 VOS_ASSERT(0);
1609 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001610 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001611 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001612
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001613 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1614 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 {
1616 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001617 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001619
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1621 pWdaParams->wdaMsgParam = NULL;
1622 pWdaParams->pWdaContext = pWDA;
1623
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 /* call WDI stop */
1625 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001626 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1627
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1629 {
1630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1631 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001634 status = VOS_STATUS_E_FAILURE;
1635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 return status;
1637}
Jeff Johnson295189b2012-06-20 16:38:30 -07001638/*
1639 * FUNCTION: WDA_close
1640 * call WDI_close and free the WDA context
1641 */
1642VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1643{
Jeff Johnson43971f52012-07-17 12:26:56 -07001644 VOS_STATUS status = VOS_STATUS_SUCCESS;
1645 WDI_Status wstatus;
1646 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 if (NULL == wdaContext)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001651 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 return VOS_STATUS_E_FAILURE;
1653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1655 (WDA_STOP_STATE != wdaContext->wdaState))
1656 {
1657 VOS_ASSERT(0);
1658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001660 wstatus = WDI_Close();
1661 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001662 {
1663 status = VOS_STATUS_E_FAILURE;
1664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001667 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1668 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001669 {
1670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1671 "WDI Sync Event destroy failed - status = %d\n", status);
1672 status = VOS_STATUS_E_FAILURE;
1673 }
1674
Jeff Johnson43971f52012-07-17 12:26:56 -07001675 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001676 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001677 {
1678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1679 "VOS Event destroy failed - status = %d\n", status);
1680 status = VOS_STATUS_E_FAILURE;
1681 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001682 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001683 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 {
1685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1686 "VOS Event destroy failed - status = %d\n", status);
1687 status = VOS_STATUS_E_FAILURE;
1688 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001689 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001690 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 {
1692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1693 "VOS Event destroy failed - status = %d\n", status);
1694 status = VOS_STATUS_E_FAILURE;
1695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001696 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001697 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001698 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "error in WDA close " );
1702 status = VOS_STATUS_E_FAILURE;
1703 }
1704 return status;
1705}
Jeff Johnson295189b2012-06-20 16:38:30 -07001706/*
1707 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1708 * returns 1 if the compiled version is greater than or equal to the input version
1709 */
1710
1711uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1712{
1713 VOS_STATUS status = VOS_STATUS_SUCCESS;
1714 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1715 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1718 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1719 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1720 (compiledVersion.revision >= revision)))
1721 return 1;
1722 else
1723 return 0;
1724}
Jeff Johnson295189b2012-06-20 16:38:30 -07001725/*
1726 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1727 * returns 1 if the compiled version is greater than or equal to the input version
1728 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001729uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1730{
1731 VOS_STATUS status = VOS_STATUS_SUCCESS;
1732 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1733 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1736 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1737 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1738 (reportedVersion.revision >= revision)))
1739 return 1;
1740 else
1741 return 0;
1742}
Jeff Johnson295189b2012-06-20 16:38:30 -07001743/*
1744 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1745 * Returns the version of the WCNSS WLAN API with which the HOST
1746 * device driver was compiled
1747 */
1748VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1749 tSirVersionType *pVersion)
1750{
1751 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001753 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 if ((NULL == pvosGCtx) || (NULL == pVersion))
1755 {
1756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001757 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001758 VOS_ASSERT(0);
1759 return VOS_STATUS_E_FAILURE;
1760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001761 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1762 if (NULL == pWDA )
1763 {
1764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001765 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 VOS_ASSERT(0);
1767 return VOS_STATUS_E_FAILURE;
1768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001769 *pVersion = pWDA->wcnssWlanCompiledVersion;
1770 return VOS_STATUS_SUCCESS;
1771}
Jeff Johnson295189b2012-06-20 16:38:30 -07001772/*
1773 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1774 * Returns the version of the WCNSS WLAN API with which the WCNSS
1775 * device driver was compiled
1776 */
1777VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1778 tSirVersionType *pVersion)
1779{
1780 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001782 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 if ((NULL == pvosGCtx) || (NULL == pVersion))
1784 {
1785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001786 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 VOS_ASSERT(0);
1788 return VOS_STATUS_E_FAILURE;
1789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001790 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1791 if (NULL == pWDA )
1792 {
1793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 *pVersion = pWDA->wcnssWlanReportedVersion;
1799 return VOS_STATUS_SUCCESS;
1800}
Jeff Johnson295189b2012-06-20 16:38:30 -07001801/*
1802 * FUNCTION: WDA_GetWcnssSoftwareVersion
1803 * Returns the WCNSS Software version string
1804 */
1805VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1806 tANI_U8 *pVersion,
1807 tANI_U32 versionBufferSize)
1808{
1809 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001811 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 if ((NULL == pvosGCtx) || (NULL == pVersion))
1813 {
1814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001815 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 VOS_ASSERT(0);
1817 return VOS_STATUS_E_FAILURE;
1818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001819 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1820 if (NULL == pWDA )
1821 {
1822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001823 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 VOS_ASSERT(0);
1825 return VOS_STATUS_E_FAILURE;
1826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1828 return VOS_STATUS_SUCCESS;
1829}
Jeff Johnson295189b2012-06-20 16:38:30 -07001830/*
1831 * FUNCTION: WDA_GetWcnssHardwareVersion
1832 * Returns the WCNSS Hardware version string
1833 */
1834VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1835 tANI_U8 *pVersion,
1836 tANI_U32 versionBufferSize)
1837{
1838 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 if ((NULL == pvosGCtx) || (NULL == pVersion))
1842 {
1843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001844 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001845 VOS_ASSERT(0);
1846 return VOS_STATUS_E_FAILURE;
1847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1849 if (NULL == pWDA )
1850 {
1851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001852 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 VOS_ASSERT(0);
1854 return VOS_STATUS_E_FAILURE;
1855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1857 return VOS_STATUS_SUCCESS;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/*
1860 * FUNCTION: WDA_WniCfgDnld
1861 * Trigger CFG Download
1862 */
1863VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1864{
1865 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001867 v_VOID_t *pFileImage = NULL;
1868 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001869 v_VOID_t *pCfgBinary = NULL;
1870 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001871 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001872
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 if (NULL == pMac )
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001876 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 VOS_ASSERT(0);
1878 return VOS_STATUS_E_FAILURE;
1879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 /* get the number of bytes in the CFG Binary... */
1881 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1882 &cbFileImageSize );
1883 if ( VOS_STATUS_E_NOMEM != vosStatus )
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1886 "Error obtaining binary size" );
1887 goto fail;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 // malloc a buffer to read in the Configuration binary file.
1890 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 if ( NULL == pFileImage )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1895 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001896 vosStatus = VOS_STATUS_E_NOMEM;
1897 goto fail;
1898 }
1899
1900 /* Get the entire CFG file image... */
1901 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1902 &cbFileImageSize );
1903 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1907 cbFileImageSize );
1908 goto fail;
1909 }
1910
1911 /*
1912 * Validate the binary image. This function will return a pointer
1913 * and length where the CFG binary is located within the binary image file.
1914 */
1915 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1916 &pCfgBinary, &cbCfgBinarySize );
1917 if ( VOS_FALSE == bStatus )
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Error: Cannot find STA CFG in binary image file" );
1921 vosStatus = VOS_STATUS_E_FAILURE;
1922 goto fail;
1923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 /*
1925 * TODO: call the config download function
1926 * for now calling the existing cfg download API
1927 */
1928 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07001929 vosStatus = VOS_STATUS_SUCCESS;
1930
1931 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07001932
1933fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07001934 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 return vosStatus;
1936}
Jeff Johnson295189b2012-06-20 16:38:30 -07001937/* -----------------------------------------------------------------
1938 * WDI interface
1939 * -----------------------------------------------------------------
1940 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001941/*
1942 * FUNCTION: WDA_suspendDataTxCallback
1943 * call back function called from TL after suspend Transmission
1944 */
1945VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1946 v_U8_t* ucSTAId,
1947 VOS_STATUS vosStatus)
1948{
1949 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001951 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 if (NULL == pWDA )
1953 {
1954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001955 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 VOS_ASSERT(0);
1957 return VOS_STATUS_E_FAILURE;
1958 }
1959 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1960 {
1961 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1962 }
1963 else
1964 {
1965 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 /* Trigger the event to bring the WDA TL suspend function to come
1968 * out of wait*/
1969 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1970 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1971 {
1972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1973 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 /* If TL suspended had timedout before this callback was called, resume back
1976 * TL.*/
1977 if (pWDA->txSuspendTimedOut)
1978 {
1979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1980 "Late TLSuspendCallback, resuming TL back again\n");
1981 WDA_ResumeDataTx(pWDA);
1982 pWDA->txSuspendTimedOut = FALSE;
1983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 return VOS_STATUS_SUCCESS;
1985}
Jeff Johnson295189b2012-06-20 16:38:30 -07001986/*
1987 * FUNCTION: WDA_suspendDataTx
1988 * Update TL to suspend the data Transmission
1989 */
1990VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1991{
1992 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1993 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001994
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001996 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 if (pWDA->txSuspendTimedOut)
1999 {
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2001 "TL suspend timedout previously, CB not called yet\n");
2002 return status;
2003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 /* Reset the event to be not signalled */
2005 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2006 if(!VOS_IS_STATUS_SUCCESS(status))
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "VOS Event reset failed - status = %d\n",status);
2010 return VOS_STATUS_E_FAILURE;
2011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002013 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002014 WDA_SuspendDataTxCallback);
2015 if(status != VOS_STATUS_SUCCESS)
2016 {
2017 return status;
2018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 /* Wait for the event to be set by the TL, to get the response of
2020 * suspending the TX queues, this event should be set by the Callback
2021 * function called by TL*/
2022 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2023 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2024 if(!VOS_IS_STATUS_SUCCESS(status))
2025 {
2026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2027 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002028 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 /* Set this flag to true when TL suspend times out, so that when TL
2030 * suspend eventually happens and calls the callback, TL can be resumed
2031 * right away by looking at this flag when true.*/
2032 pWDA->txSuspendTimedOut = TRUE;
2033 }
2034 else
2035 {
2036 pWDA->txSuspendTimedOut = FALSE;
2037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2039 {
2040 status = VOS_STATUS_SUCCESS;
2041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002042 return status;
2043}
Jeff Johnson295189b2012-06-20 16:38:30 -07002044/*
2045 * FUNCTION: WDA_resumeDataTx
2046 * Update TL to resume the data Transmission
2047 */
2048VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2049{
2050 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002051
2052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002053 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002054
2055 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002056 return status;
2057}
Jeff Johnson295189b2012-06-20 16:38:30 -07002058/*
2059 * FUNCTION: WDA_InitScanReqCallback
2060 * Trigger Init SCAN callback
2061 */
2062void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2063{
2064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2065 tWDA_CbContext *pWDA;
2066 tInitScanParams *pWDA_ScanParam ;
2067 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002070 if(NULL == pWdaParams)
2071 {
2072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 VOS_ASSERT(0) ;
2075 return ;
2076 }
2077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2078 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 if(NULL == pWDA_ScanParam)
2080 {
2081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002082 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002083 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2085 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 return ;
2087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 if(WDI_STATUS_SUCCESS != wdiStatus)
2089 {
2090 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 if(VOS_STATUS_SUCCESS != status)
2092 {
2093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002094 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 }
2096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 /* free WDI command buffer */
2098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002100
Jeff Johnson295189b2012-06-20 16:38:30 -07002101
2102 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002103 /* without converting the Status to Failure or Success Just
2104 pass the same status to lim */
2105 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 /* send SCAN RSP message back to PE */
2107 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 return ;
2109}
2110
2111/*
2112 * FUNCTION: WDA_ProcessInitScanReq
2113 * Trigger Init SCAN in DAL
2114 */
2115VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2116 tInitScanParams *initScanParams)
2117{
2118 WDI_Status status = WDI_STATUS_SUCCESS ;
2119 WDI_InitScanReqParamsType *wdiInitScanParam =
2120 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2121 sizeof(WDI_InitScanReqParamsType)) ;
2122 tWDA_ReqParams *pWdaParams;
2123 tANI_U8 i = 0;
2124
2125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002126 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002127 if(NULL == wdiInitScanParam)
2128 {
2129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002130 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 VOS_ASSERT(0);
2132 return VOS_STATUS_E_NOMEM;
2133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2135 if(NULL == pWdaParams)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 VOS_ASSERT(0);
2140 vos_mem_free(wdiInitScanParam);
2141 return VOS_STATUS_E_NOMEM;
2142 }
2143
2144 /* Copy init Scan params to WDI structure */
2145 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2146 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2147 sizeof(tSirMacAddr)) ;
2148 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2149 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2150 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2152 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2154 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2156 {
2157 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2158 initScanParams->scanEntry.bssIdx[i] ;
2159 }
2160
2161 /* if Frame length, copy macMgmtHdr or WDI structure */
2162 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2163 {
2164 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2165 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2166 }
2167 wdiInitScanParam->wdiReqStatusCB = NULL ;
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 /* Store Init Req pointer, as this will be used for response */
2170 pWdaParams->pWdaContext = pWDA;
2171 pWdaParams->wdaMsgParam = initScanParams;
2172 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 /* first try to suspend TX */
2174 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 if(WDI_STATUS_SUCCESS != status)
2176 {
2177 goto handleWdiFailure;
2178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002179 /* call DAL API to pass init scan request to DAL */
2180 status = WDI_InitScanReq(wdiInitScanParam,
2181 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if(IS_WDI_STATUS_FAILURE(status))
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2185 "error in WDA Init Scan, Resume Tx " );
2186 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0) ;
2188
2189 goto handleWdiFailure;
2190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002192handleWdiFailure:
2193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2194 "Failure in WDI Api, free all the memory " );
2195 /* free WDI command buffer */
2196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2197 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 /* send Failure to PE */
2199 initScanParams->status = eSIR_FAILURE ;
2200 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002201 return CONVERT_WDI2VOS_STATUS(status) ;
2202}
2203
Jeff Johnson295189b2012-06-20 16:38:30 -07002204/*
2205 * FUNCTION: WDA_StartScanReqCallback
2206 * send Start SCAN RSP back to PE
2207 */
2208void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2209 void* pUserData)
2210{
2211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2212 tWDA_CbContext *pWDA;
2213 tStartScanParams *pWDA_ScanParam;
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 if(NULL == pWdaParams)
2217 {
2218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002219 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 VOS_ASSERT(0) ;
2221 return ;
2222 }
2223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2224 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 if(NULL == pWDA_ScanParam)
2226 {
2227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002228 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002230 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 return ;
2232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002236 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002238 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 return ;
2240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2242 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002243
Jeff Johnson295189b2012-06-20 16:38:30 -07002244
2245 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002246 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 /* send SCAN RSP message back to PE */
2248 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 return ;
2250}
2251
Jeff Johnson295189b2012-06-20 16:38:30 -07002252/*
2253 * FUNCTION: WDA_ProcessStartScanReq
2254 * Trigger start SCAN in WDI
2255 */
2256VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2257 tStartScanParams *startScanParams)
2258{
2259 WDI_Status status = WDI_STATUS_SUCCESS;
2260 WDI_StartScanReqParamsType *wdiStartScanParams =
2261 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2262 sizeof(WDI_StartScanReqParamsType)) ;
2263 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 if(NULL == wdiStartScanParams)
2267 {
2268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 VOS_ASSERT(0);
2271 return VOS_STATUS_E_NOMEM;
2272 }
2273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2274 if(NULL == pWdaParams)
2275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 VOS_ASSERT(0);
2279 vos_mem_free(wdiStartScanParams);
2280 return VOS_STATUS_E_NOMEM;
2281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 /* Copy init Scan params to WDI structure */
2283 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2284 wdiStartScanParams->wdiReqStatusCB = NULL ;
2285
Jeff Johnson295189b2012-06-20 16:38:30 -07002286 /* Store Init Req pointer, as this will be used for response */
2287 /* store Params pass it to WDI */
2288 pWdaParams->pWdaContext = pWDA;
2289 pWdaParams->wdaMsgParam = startScanParams;
2290 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 /* call DAL API to pass init scan request to DAL */
2292 status = WDI_StartScanReq(wdiStartScanParams,
2293 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 /* failure returned by WDI API */
2295 if(IS_WDI_STATUS_FAILURE(status))
2296 {
2297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2298 "Failure in Start Scan WDI API, free all the memory "
2299 "It should be due to previous abort scan." );
2300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2301 vos_mem_free(pWdaParams) ;
2302 startScanParams->status = eSIR_FAILURE ;
2303 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 return CONVERT_WDI2VOS_STATUS(status) ;
2306}
Jeff Johnson295189b2012-06-20 16:38:30 -07002307/*
2308 * FUNCTION: WDA_EndScanReqCallback
2309 * END SCAN callback
2310 */
2311void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2312{
2313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2314 tWDA_CbContext *pWDA;
2315 tEndScanParams *endScanParam;
2316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002318 if(NULL == pWdaParams)
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 VOS_ASSERT(0) ;
2323 return ;
2324 }
2325 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2326 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 if(NULL == endScanParam)
2328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002330 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2333 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 return ;
2335 }
2336
2337 /* Free WDI command buffer */
2338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2339 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002341 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002342 /* send response back to PE */
2343 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2344 return ;
2345}
2346
Jeff Johnson295189b2012-06-20 16:38:30 -07002347/*
2348 * FUNCTION: WDA_ProcessEndScanReq
2349 * Trigger END SCAN in WDI
2350 */
2351VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2352 tEndScanParams *endScanParams)
2353{
2354 WDI_Status status = WDI_STATUS_SUCCESS;
2355 WDI_EndScanReqParamsType *wdiEndScanParams =
2356 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2357 sizeof(WDI_EndScanReqParamsType)) ;
2358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 if(NULL == wdiEndScanParams)
2362 {
2363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 VOS_ASSERT(0);
2366 return VOS_STATUS_E_NOMEM;
2367 }
2368 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2369 if(NULL == pWdaParams)
2370 {
2371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 VOS_ASSERT(0);
2374 vos_mem_free(wdiEndScanParams);
2375 return VOS_STATUS_E_NOMEM;
2376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 /* Copy init Scan params to WDI structure */
2378 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2379 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 /* Store Init Req pointer, as this will be used for response */
2381 /* store Params pass it to WDI */
2382 pWdaParams->pWdaContext = pWDA;
2383 pWdaParams->wdaMsgParam = endScanParams;
2384 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 /* call DAL API to pass init scan request to DAL */
2386 status = WDI_EndScanReq(wdiEndScanParams,
2387 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 if(IS_WDI_STATUS_FAILURE(status))
2389 {
2390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2391 "Failure in End Scan WDI API, free all the memory "
2392 "It should be due to previous abort scan." );
2393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2394 vos_mem_free(pWdaParams) ;
2395 endScanParams->status = eSIR_FAILURE ;
2396 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 return CONVERT_WDI2VOS_STATUS(status) ;
2399}
Jeff Johnson295189b2012-06-20 16:38:30 -07002400/*
2401 * FUNCTION: WDA_FinishScanReqCallback
2402 * Trigger Finish SCAN callback
2403 */
2404void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2405{
2406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2407 tWDA_CbContext *pWDA;
2408 tFinishScanParams *finishScanParam;
2409 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002411 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 if(NULL == pWdaParams)
2413 {
2414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002415 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 VOS_ASSERT(0) ;
2417 return ;
2418 }
2419
2420 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2421 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 if(NULL == finishScanParam)
2423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002425 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2428 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 return ;
2430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2432 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 /*
2434 * Now Resume TX, if we reached here means, TX is already suspended, we
2435 * have to resume it unconditionaly
2436 */
2437 status = WDA_ResumeDataTx(pWDA) ;
2438
2439 if(VOS_STATUS_SUCCESS != status)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002444 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2446 return ;
2447}
Jeff Johnson295189b2012-06-20 16:38:30 -07002448/*
2449 * FUNCTION: WDA_ProcessFinshScanReq
2450 * Trigger Finish SCAN in WDI
2451 */
2452VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2453 tFinishScanParams *finishScanParams)
2454{
2455 WDI_Status status = WDI_STATUS_SUCCESS;
2456 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2457 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2458 sizeof(WDI_FinishScanReqParamsType)) ;
2459 tWDA_ReqParams *pWdaParams ;
2460 tANI_U8 i = 0;
2461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 if(NULL == wdiFinishScanParams)
2464 {
2465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 VOS_ASSERT(0);
2468 return VOS_STATUS_E_NOMEM;
2469 }
2470 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2471 if(NULL == pWdaParams)
2472 {
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 VOS_ASSERT(0);
2476 vos_mem_free(wdiFinishScanParams);
2477 return VOS_STATUS_E_NOMEM;
2478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 /* Copy init Scan params to WDI structure */
2480 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2481 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2482 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2484 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2485 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2486 finishScanParams->frameLength ;
2487 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2488 finishScanParams->currentOperChannel ;
2489 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2490 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2491 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2493 {
2494 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2495 finishScanParams->scanEntry.bssIdx[i] ;
2496 }
2497
2498
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 /* if Frame length, copy macMgmtHdr ro WDI structure */
2500 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2501 {
2502 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2503 &finishScanParams->macMgmtHdr,
2504 sizeof(WDI_MacMgmtHdr)) ;
2505 }
2506 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 /* Store Init Req pointer, as this will be used for response */
2508 /* store Params pass it to WDI */
2509 pWdaParams->pWdaContext = pWDA;
2510 pWdaParams->wdaMsgParam = finishScanParams;
2511 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 /* call DAL API to pass init scan request to DAL */
2513 status = WDI_FinishScanReq(wdiFinishScanParams,
2514 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002515
Jeff Johnson295189b2012-06-20 16:38:30 -07002516
2517 /*
2518 * WDI API returns failure..
2519 */
2520 if(IS_WDI_STATUS_FAILURE( status))
2521 {
2522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2523 "Failure in Finish Scan WDI API, free all the memory " );
2524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2525 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 finishScanParams->status = eSIR_FAILURE ;
2527 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 return CONVERT_WDI2VOS_STATUS(status) ;
2530}
Jeff Johnson295189b2012-06-20 16:38:30 -07002531/*---------------------------------------------------------------------
2532 * ASSOC API's
2533 *---------------------------------------------------------------------
2534 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002535/*
2536 * FUNCTION: WDA_JoinReqCallback
2537 * Trigger Init SCAN callback
2538 */
2539void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2540{
2541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2542 tWDA_CbContext *pWDA;
2543 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002545 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 if(NULL == pWdaParams)
2547 {
2548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 VOS_ASSERT(0) ;
2551 return ;
2552 }
2553 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2554 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2556 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* reset macBSSID */
2558 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 /* reset macSTASelf */
2560 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002561 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 return ;
2564}
Jeff Johnson295189b2012-06-20 16:38:30 -07002565/*
2566 * FUNCTION: WDA_ProcessJoinReq
2567 * Trigger Join REQ in WDI
2568 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002569VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2570 tSwitchChannelParams* joinReqParam)
2571{
2572 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 WDI_JoinReqParamsType *wdiJoinReqParam =
2574 (WDI_JoinReqParamsType *)vos_mem_malloc(
2575 sizeof(WDI_JoinReqParamsType)) ;
2576 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 if(NULL == wdiJoinReqParam)
2580 {
2581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002584 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 return VOS_STATUS_E_NOMEM;
2586 }
2587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2588 if(NULL == pWdaParams)
2589 {
2590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 VOS_ASSERT(0);
2593 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002594 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 return VOS_STATUS_E_NOMEM;
2596 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002597
2598 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2599 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2600 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2601 {
2602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2603 "%s: received join request when BSSID or self-STA is NULL "
2604 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002605 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002606 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2607 VOS_ASSERT(0);
2608 vos_mem_free(wdiJoinReqParam);
2609 vos_mem_free(pWdaParams);
2610 joinReqParam->status = eSIR_FAILURE ;
2611 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2612 return VOS_STATUS_E_INVAL;
2613 }
2614
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 /* copy the BSSID for pWDA */
2616 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2617 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2619 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2621 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002622#ifdef WLAN_FEATURE_VOWIFI
2623 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2624 joinReqParam->maxTxPower ;
2625#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2627 joinReqParam->localPowerConstraint ;
2628#endif
2629 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2630 joinReqParam->secondaryChannelOffset ;
2631 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2632
2633 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 /* Store Init Req pointer, as this will be used for response */
2635 /* store Params pass it to WDI */
2636 pWdaParams->pWdaContext = pWDA;
2637 pWdaParams->wdaMsgParam = joinReqParam;
2638 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 status = WDI_JoinReq(wdiJoinReqParam,
2640 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 if(IS_WDI_STATUS_FAILURE(status))
2642 {
2643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2644 "Failure in Join WDI API, free all the memory " );
2645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2646 vos_mem_free(pWdaParams) ;
2647 joinReqParam->status = eSIR_FAILURE ;
2648 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 return CONVERT_WDI2VOS_STATUS(status) ;
2651}
Jeff Johnson295189b2012-06-20 16:38:30 -07002652/*
2653 * FUNCTION: WDA_SwitchChannelReqCallback
2654 * send Switch channel RSP back to PE
2655 */
2656void WDA_SwitchChannelReqCallback(
2657 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2658{
2659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2660 tWDA_CbContext *pWDA;
2661 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 if(NULL == pWdaParams)
2665 {
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002667 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 VOS_ASSERT(0) ;
2669 return ;
2670 }
2671 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2672 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2673
2674#ifdef WLAN_FEATURE_VOWIFI
2675 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2676#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2678 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002680 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 return ;
2683}
Jeff Johnson295189b2012-06-20 16:38:30 -07002684/*
2685 * FUNCTION: WDA_ProcessChannelSwitchReq
2686 * Request to WDI to switch channel REQ params.
2687 */
2688VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2689 tSwitchChannelParams *pSwitchChanParams)
2690{
2691 WDI_Status status = WDI_STATUS_SUCCESS ;
2692 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2693 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2694 sizeof(WDI_SwitchChReqParamsType)) ;
2695 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 if(NULL == wdiSwitchChanParam)
2699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_ASSERT(0);
2703 return VOS_STATUS_E_NOMEM;
2704 }
2705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2706 if(NULL == pWdaParams)
2707 {
2708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 VOS_ASSERT(0);
2711 vos_mem_free(wdiSwitchChanParam);
2712 return VOS_STATUS_E_NOMEM;
2713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2715#ifndef WLAN_FEATURE_VOWIFI
2716 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2717 pSwitchChanParams->localPowerConstraint;
2718#endif
2719 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2720 pSwitchChanParams->secondaryChannelOffset;
2721 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 /* Store req pointer, as this will be used for response */
2723 /* store Params pass it to WDI */
2724 pWdaParams->pWdaContext = pWDA;
2725 pWdaParams->wdaMsgParam = pSwitchChanParams;
2726 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727#ifdef WLAN_FEATURE_VOWIFI
2728 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2729 = pSwitchChanParams->maxTxPower;
2730 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2731 pSwitchChanParams ->selfStaMacAddr,
2732 sizeof(tSirMacAddr));
2733#endif
2734 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2735 pSwitchChanParams->bssId,
2736 sizeof(tSirMacAddr));
2737
2738 status = WDI_SwitchChReq(wdiSwitchChanParam,
2739 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 if(IS_WDI_STATUS_FAILURE(status))
2741 {
2742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2743 "Failure in process channel switch Req WDI API, free all the memory " );
2744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2745 vos_mem_free(pWdaParams) ;
2746 pSwitchChanParams->status = eSIR_FAILURE ;
2747 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 return CONVERT_WDI2VOS_STATUS(status) ;
2750}
Jeff Johnson295189b2012-06-20 16:38:30 -07002751/*
2752 * FUNCTION: WDA_ConfigBssReqCallback
2753 * config BSS Req Callback, called by WDI
2754 */
2755void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2756 ,void* pUserData)
2757{
2758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2759 tWDA_CbContext *pWDA;
2760 tAddBssParams *configBssReqParam;
2761 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(NULL == pWdaParams)
2765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002767 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 VOS_ASSERT(0) ;
2769 return ;
2770 }
2771 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2772 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2773 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002775 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2777 {
2778 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2779 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2781 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2782 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2783
2784 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2785 {
2786 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2787 {
2788 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2789 staConfigBssParam->staType = STA_ENTRY_BSSID;
2790 }
2791 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2792 (staConfigBssParam->staType == STA_ENTRY_SELF))
2793 {
2794 /* This is the 1st add BSS Req for the BTAMP STA */
2795 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2796 staConfigBssParam->staType = STA_ENTRY_BSSID;
2797 }
2798 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2799 (staConfigBssParam->staType == STA_ENTRY_PEER))
2800 {
2801 /* This is the 2nd ADD BSS Request that is sent
2802 * on the BTAMP STA side. The Sta type is
2803 * set to STA_ENTRY_PEER here.*/
2804 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2805 }
2806 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2807 (staConfigBssParam->staType == STA_ENTRY_SELF))
2808 {
2809 /* statype is already set by PE.
2810 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2811 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2812 staConfigBssParam->staType = STA_ENTRY_BSSID;
2813 }
2814 else
2815 {
2816 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2817 staConfigBssParam->staType = STA_ENTRY_PEER;
2818 }
2819 }
2820 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2821 {
2822 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2823 staConfigBssParam->staType = STA_ENTRY_SELF;
2824 }
2825 else
2826 {
2827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2828 "Invalid operation mode specified");
2829 VOS_ASSERT(0);
2830 }
2831
2832 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2837 sizeof(tSirMacAddr));
2838 staConfigBssParam->txChannelWidthSet =
2839 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2841 staConfigBssParam->htCapable)
2842 {
2843 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2844 wdiConfigBssRsp->ucBSSIdx;
2845 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2846 WDA_VALID_STA_INDEX ;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2849 wdiConfigBssRsp->ucBSSIdx,
2850 wdiConfigBssRsp->ucSTAIdx))
2851 {
2852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002853 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 VOS_ASSERT(0) ;
2855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 VOS_ASSERT(0) ;
2861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002862#ifdef WLAN_FEATURE_VOWIFI
2863 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2864#endif
2865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 return ;
2870}
Jeff Johnson295189b2012-06-20 16:38:30 -07002871/*
2872 * FUNCTION: WDA_UpdateEdcaParamsForAC
2873 * Update WDI EDCA params with PE edca params
2874 */
2875void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2876 WDI_EdcaParamRecord *wdiEdcaParam,
2877 tSirMacEdcaParamRecord *macEdcaParam)
2878{
2879 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2880 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2881 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2882 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2883 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2884 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2885}
Jeff Johnson295189b2012-06-20 16:38:30 -07002886/*
2887 * FUNCTION: WDA_ProcessConfigBssReq
2888 * Configure BSS before starting Assoc with AP
2889 */
2890VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2891 tAddBssParams* configBssReqParam)
2892{
2893 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2895 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2896 sizeof(WDI_ConfigBSSReqParamsType)) ;
2897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(NULL == wdiConfigBssReqParam)
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_ASSERT(0);
2905 return VOS_STATUS_E_NOMEM;
2906 }
2907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2908 if(NULL == pWdaParams)
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 VOS_ASSERT(0);
2913 vos_mem_free(wdiConfigBssReqParam);
2914 return VOS_STATUS_E_NOMEM;
2915 }
Kiran4a17ebe2013-01-31 10:43:43 -08002916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2917 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2920 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 /* Store Init Req pointer, as this will be used for response */
2922 /* store Params pass it to WDI */
2923 pWdaParams->pWdaContext = pWDA;
2924 pWdaParams->wdaMsgParam = configBssReqParam;
2925 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2927 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 if(IS_WDI_STATUS_FAILURE(status))
2929 {
2930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2931 "Failure in Config BSS WDI API, free all the memory " );
2932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2933 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return CONVERT_WDI2VOS_STATUS(status) ;
2938}
Jeff Johnson295189b2012-06-20 16:38:30 -07002939#ifdef ENABLE_HAL_COMBINED_MESSAGES
2940/*
2941 * FUNCTION: WDA_PostAssocReqCallback
2942 * Post ASSOC req callback, send RSP back to PE
2943 */
2944void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2945 void* pUserData)
2946{
2947 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2948 tPostAssocParams *postAssocReqParam =
2949 (tPostAssocParams *)pWDA->wdaMsgParam ;
2950 /*STA context within the BSS Params*/
2951 tAddStaParams *staPostAssocParam =
2952 &postAssocReqParam->addBssParams.staContext ;
2953 /*STA Params for self STA*/
2954 tAddStaParams *selfStaPostAssocParam =
2955 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002959 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2961 {
2962 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2963 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2964 sizeof(tSirMacAddr)) ;
2965 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2966 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2967 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2969 }
2970 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2971 pWDA->wdaWdiApiMsgParam = NULL;
2972 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 return ;
2975}
Jeff Johnson295189b2012-06-20 16:38:30 -07002976/*
2977 * FUNCTION: WDA_ProcessPostAssocReq
2978 * Trigger POST ASSOC processing in WDI
2979 */
2980VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2981 tPostAssocParams *postAssocReqParam)
2982{
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 WDI_Status status = WDI_STATUS_SUCCESS ;
2984
2985 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2986 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2987 sizeof(WDI_PostAssocReqParamsType)) ;
2988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002990
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(NULL == wdiPostAssocReqParam)
2992 {
2993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 VOS_ASSERT(0);
2996 return VOS_STATUS_E_NOMEM;
2997 }
2998
2999 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 VOS_ASSERT(0);
3004 return VOS_STATUS_E_FAILURE;
3005 }
3006
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 /* update BSS params into WDI structure */
3008 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3009 &postAssocReqParam->addBssParams) ;
3010 /* update STA params into WDI structure */
3011 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3012 &postAssocReqParam->addStaParams) ;
3013
3014 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3015 postAssocReqParam->addBssParams.highPerformance;
3016 WDA_UpdateEdcaParamsForAC(pWDA,
3017 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3018 &postAssocReqParam->addBssParams.acbe);
3019 WDA_UpdateEdcaParamsForAC(pWDA,
3020 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3021 &postAssocReqParam->addBssParams.acbk);
3022 WDA_UpdateEdcaParamsForAC(pWDA,
3023 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3024 &postAssocReqParam->addBssParams.acvi);
3025 WDA_UpdateEdcaParamsForAC(pWDA,
3026 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3027 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 /* Store Init Req pointer, as this will be used for response */
3029 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 /* store Params pass it to WDI */
3031 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3033 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 if(IS_WDI_STATUS_FAILURE(status))
3035 {
3036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3037 "Failure in Post Assoc WDI API, free all the memory " );
3038 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3039 pWDA->wdaWdiApiMsgParam = NULL;
3040 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 return CONVERT_WDI2VOS_STATUS(status) ;
3045}
3046#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003047/*
3048 * FUNCTION: WDA_AddStaReqCallback
3049 * ADD STA req callback, send RSP back to PE
3050 */
3051void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3052 void* pUserData)
3053{
3054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3055 tWDA_CbContext *pWDA;
3056 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 if(NULL == pWdaParams)
3060 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 VOS_ASSERT(0) ;
3063 return ;
3064 }
3065 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3066 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003068 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3070 {
3071 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3072 /*TODO: UMAC structure doesn't have these fields*/
3073 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3074 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3075 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3076 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3077 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3078 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003079#ifdef FEATURE_WLAN_TDLS
3080 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3081 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3082#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003084#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 {
3086 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3087 wdiConfigStaRsp->ucBssIdx;
3088 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3089 WDA_VALID_STA_INDEX ;
3090 }
3091 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3092 {
3093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 VOS_ASSERT(0) ;
3096 return ;
3097 }
3098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3100 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 return ;
3103}
Jeff Johnson295189b2012-06-20 16:38:30 -07003104/*
3105 * FUNCTION: WDA_ConfigStaReq
3106 * Trigger Config STA processing in WDI
3107 */
3108VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3109 tAddStaParams *addStaReqParam)
3110{
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3113 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3114 sizeof(WDI_ConfigSTAReqParamsType)) ;
3115 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 if(NULL == wdiConfigStaReqParam)
3119 {
3120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 VOS_ASSERT(0);
3123 return VOS_STATUS_E_NOMEM;
3124 }
3125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3126 if(NULL == pWdaParams)
3127 {
3128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 VOS_ASSERT(0);
3131 vos_mem_free(wdiConfigStaReqParam);
3132 return VOS_STATUS_E_NOMEM;
3133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 /* update STA params into WDI structure */
3136 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3137 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 /* Store Init Req pointer, as this will be used for response */
3139 /* store Params pass it to WDI */
3140 pWdaParams->pWdaContext = pWDA;
3141 pWdaParams->wdaMsgParam = addStaReqParam;
3142 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3144 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 if(IS_WDI_STATUS_FAILURE(status))
3146 {
3147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3148 "Failure in Config STA WDI API, free all the memory " );
3149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3150 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 return CONVERT_WDI2VOS_STATUS(status) ;
3155}
Jeff Johnson295189b2012-06-20 16:38:30 -07003156/*
3157 * FUNCTION: WDA_DelBSSReqCallback
3158 * Dens DEL BSS RSP back to PE
3159 */
3160void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3161 void* pUserData)
3162{
3163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3164 tWDA_CbContext *pWDA;
3165 tDeleteBssParams *delBssReqParam;
3166 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 if(NULL == pWdaParams)
3170 {
3171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 VOS_ASSERT(0) ;
3174 return ;
3175 }
3176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3177 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003178 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3180 {
3181 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3182 sizeof(tSirMacAddr)) ;
3183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3185 {
3186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003187 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 VOS_ASSERT(0) ;
3189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3191 {
3192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003193 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 VOS_ASSERT(0) ;
3195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0) ;
3201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3203 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 /* reset the the system role*/
3205 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3206
3207 /* Reset the BA related information */
3208 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3209 {
3210 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3211 {
3212 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3213 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3214 /* Reset framesTxed counters here */
3215 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3216 {
3217 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3218 }
3219 }
3220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003222 return ;
3223}
3224
Jeff Johnson295189b2012-06-20 16:38:30 -07003225/*
3226 * FUNCTION: WDA_ProcessDelBssReq
3227 * Init DEL BSS req with WDI
3228 */
3229VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3230 tDeleteBssParams *delBssParam)
3231{
3232 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3234 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3235 sizeof(WDI_DelBSSReqParamsType)) ;
3236 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 if(NULL == wdiDelBssReqParam)
3240 {
3241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 VOS_ASSERT(0);
3244 return VOS_STATUS_E_NOMEM;
3245 }
3246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3247 if(NULL == pWdaParams)
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_ASSERT(0);
3252 vos_mem_free(wdiDelBssReqParam);
3253 return VOS_STATUS_E_NOMEM;
3254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3256 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3257
3258 /* Store Init Req pointer, as this will be used for response */
3259 /* store Params pass it to WDI */
3260 pWdaParams->pWdaContext = pWDA;
3261 pWdaParams->wdaMsgParam = delBssParam;
3262 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 status = WDI_DelBSSReq(wdiDelBssReqParam,
3264 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 if(IS_WDI_STATUS_FAILURE(status))
3266 {
3267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3268 "Failure in Del BSS WDI API, free all the memory " );
3269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3270 vos_mem_free(pWdaParams) ;
3271 delBssParam->status = eSIR_FAILURE ;
3272 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 return CONVERT_WDI2VOS_STATUS(status) ;
3275}
Jeff Johnson295189b2012-06-20 16:38:30 -07003276/*
3277 * FUNCTION: WDA_DelSTAReqCallback
3278 * Dens DEL STA RSP back to PE
3279 */
3280void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3281 void* pUserData)
3282{
3283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3284 tWDA_CbContext *pWDA;
3285 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 if(NULL == pWdaParams)
3289 {
3290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003291 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 VOS_ASSERT(0) ;
3293 return ;
3294 }
3295 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3296 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003297 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3299 {
3300 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3301 {
3302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003303 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 VOS_ASSERT(0) ;
3305 }
3306 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3307 }
3308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3309 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 /*Reset the BA information corresponding to this STAIdx */
3311 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3312 WDA_INVALID_STA_INDEX;
3313 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3314
3315 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 return ;
3317}
Jeff Johnson295189b2012-06-20 16:38:30 -07003318/*
3319 * FUNCTION: WDA_ProcessDelStaReq
3320 * Init DEL STA req with WDI
3321 */
3322VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3323 tDeleteStaParams *delStaParam)
3324{
3325 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3327 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3328 sizeof(WDI_DelSTAReqParamsType)) ;
3329 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 if(NULL == wdiDelStaReqParam)
3333 {
3334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 VOS_ASSERT(0);
3337 return VOS_STATUS_E_NOMEM;
3338 }
3339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3340 if(NULL == pWdaParams)
3341 {
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 VOS_ASSERT(0);
3345 vos_mem_free(wdiDelStaReqParam);
3346 return VOS_STATUS_E_NOMEM;
3347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3349 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 /* Store Init Req pointer, as this will be used for response */
3351 /* store Params pass it to WDI */
3352 pWdaParams->pWdaContext = pWDA;
3353 pWdaParams->wdaMsgParam = delStaParam;
3354 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 status = WDI_DelSTAReq(wdiDelStaReqParam,
3356 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 if(IS_WDI_STATUS_FAILURE(status))
3358 {
3359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3360 "Failure in Del STA WDI API, free all the memory status = %d",
3361 status );
3362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3363 vos_mem_free(pWdaParams) ;
3364 delStaParam->status = eSIR_FAILURE ;
3365 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 return CONVERT_WDI2VOS_STATUS(status) ;
3368}
Jeff Johnson295189b2012-06-20 16:38:30 -07003369void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3370{
3371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3372 tWDA_CbContext *pWDA;
3373 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003375 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 if(NULL == pWdaParams)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003379 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 VOS_ASSERT(0) ;
3381 return ;
3382 }
3383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3384 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3386 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3388 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3389 pwdiAddSTASelfRsp->macSelfSta,
3390 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 return ;
3393}
Jeff Johnson295189b2012-06-20 16:38:30 -07003394/*
3395 * FUNCTION: WDA_ProcessAddStaSelfReq
3396 *
3397 */
3398VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3399{
3400 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003401 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3403 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3404 sizeof(WDI_AddSTASelfReqParamsType)) ;
3405 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if( NULL == wdiAddStaSelfReq )
3409 {
3410 VOS_ASSERT( 0 );
3411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003412 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 return( VOS_STATUS_E_NOMEM );
3414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 if( NULL == pWdaParams )
3417 {
3418 VOS_ASSERT( 0 );
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 vos_mem_free(wdiAddStaSelfReq) ;
3422 return( VOS_STATUS_E_NOMEM );
3423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3426 /* Store Init Req pointer, as this will be used for response */
3427 /* store Params pass it to WDI */
3428 pWdaParams->pWdaContext = pWDA;
3429 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3430 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003431 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003432
Jeff Johnson43971f52012-07-17 12:26:56 -07003433 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 {
3435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3436 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003437 wstatus );
3438 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3440 vos_mem_free(pWdaParams) ;
3441 pAddStaSelfReq->status = eSIR_FAILURE ;
3442 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3443 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003444 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445}
Jeff Johnson295189b2012-06-20 16:38:30 -07003446/*
3447 * FUNCTION: WDA_DelSTASelfRespCallback
3448 *
3449 */
3450void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3451 wdiDelStaSelfRspParams , void* pUserData)
3452{
3453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3454 tWDA_CbContext *pWDA;
3455 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003457 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 if (NULL == pWdaParams)
3459 {
3460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003461 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 VOS_ASSERT(0);
3463 return;
3464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3466 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003468 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003469
3470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3471 vos_mem_free(pWdaParams) ;
3472
3473 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 return ;
3475}
Jeff Johnson295189b2012-06-20 16:38:30 -07003476/*
3477 * FUNCTION: WDA_DelSTASelfReqCallback
3478 *
3479 */
3480void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3481 void* pUserData)
3482{
3483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3484 tWDA_CbContext *pWDA;
3485 tDelStaSelfParams *delStaSelfParams;
3486
3487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3488 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003489 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490
3491 if (NULL == pWdaParams)
3492 {
3493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003494 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 VOS_ASSERT(0);
3496 return;
3497 }
3498
3499 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3500 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3501
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003502 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503
3504 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3505 {
3506 VOS_ASSERT(0);
3507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3508 vos_mem_free(pWdaParams) ;
3509 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3510 }
3511
3512 return ;
3513}
3514
3515/*
3516 * FUNCTION: WDA_DelSTASelfReq
3517 * Trigger Config STA processing in WDI
3518 */
3519VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3520 tDelStaSelfParams* pDelStaSelfReqParam)
3521{
3522 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003523 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 tWDA_ReqParams *pWdaParams = NULL;
3525 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3526 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3527 sizeof(WDI_DelSTASelfReqParamsType)) ;
3528
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003530 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 if( NULL == wdiDelStaSelfReq )
3532 {
3533 VOS_ASSERT( 0 );
3534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003535 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 return( VOS_STATUS_E_NOMEM );
3537 }
3538
3539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3540 if( NULL == pWdaParams )
3541 {
3542 VOS_ASSERT( 0 );
3543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003544 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 vos_mem_free(wdiDelStaSelfReq) ;
3546 return( VOS_STATUS_E_NOMEM );
3547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 pWdaParams->pWdaContext = pWDA;
3549 /* Store param pointer as passed in by caller */
3550 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3551 /* store Params pass it to WDI */
3552 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3554 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3555
3556 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3557 wdiDelStaSelfReq->pUserData = pWdaParams;
3558
Jeff Johnson43971f52012-07-17 12:26:56 -07003559 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3561
Jeff Johnson43971f52012-07-17 12:26:56 -07003562 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 {
3564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3565 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3566 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003567 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3569 vos_mem_free(pWdaParams) ;
3570 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3571 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3572 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003573 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574}
3575
Jeff Johnson295189b2012-06-20 16:38:30 -07003576/*
3577 * FUNCTION: WDA_SendMsg
3578 * Send Message back to PE
3579 */
3580void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3581 void *pBodyptr, tANI_U32 bodyVal)
3582{
3583 tSirMsgQ msg = {0} ;
3584 tANI_U32 status = VOS_STATUS_SUCCESS ;
3585 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 msg.type = msgType;
3587 msg.bodyval = bodyVal;
3588 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 if (VOS_STATUS_SUCCESS != status)
3591 {
3592 if(NULL != pBodyptr)
3593 {
3594 vos_mem_free(pBodyptr);
3595 }
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_ASSERT(0) ;
3599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 return ;
3601}
Jeff Johnson295189b2012-06-20 16:38:30 -07003602/*
3603 * FUNCTION: WDA_UpdateBSSParams
3604 * Translated WDA/PE BSS info into WDI BSS info..
3605 */
3606void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3607 WDI_ConfigBSSReqInfoType *wdiBssParams,
3608 tAddBssParams *wdaBssParams)
3609{
3610 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 /* copy bssReq Params to WDI structure */
3612 vos_mem_copy(wdiBssParams->macBSSID,
3613 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3614 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3615 sizeof(tSirMacAddr)) ;
3616 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3617 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3618 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 wdiBssParams->ucShortSlotTimeSupported =
3620 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3622 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3623 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3624 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3625 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3626
3627 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3628 wdiBssParams->ucTXOPProtectionFullSupport =
3629 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3631 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3634 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3635 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3636 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3637
Chet Lanctot186b5732013-03-18 10:26:30 -07003638 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3639
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 /* copy SSID into WDI structure */
3641 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3642 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3643 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3645 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647#ifdef WLAN_FEATURE_VOWIFI
3648 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3649#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652#ifdef WLAN_FEATURE_VOWIFI_11R
3653 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 if(wdiBssParams->bExtSetStaKeyParamValid)
3655 {
3656 /* copy set STA key params to WDI structure */
3657 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3658 wdaBssParams->extSetStaKeyParam.staIdx;
3659 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3660 wdaBssParams->extSetStaKeyParam.encType;
3661 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3662 wdaBssParams->extSetStaKeyParam.wepType;
3663 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3664 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3666 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003667 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3669 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3670 {
3671 WDA_GetWepKeysFromCfg( pWDA,
3672 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3673 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3674 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3675 }
3676 else
3677 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3679 keyIndex++)
3680 {
3681 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3682 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3683 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3684 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3685 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3686 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3688 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3689 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3690 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3691 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3692 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3693 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3694 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3697 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 }
3699 }
3700 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3701 }
3702 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3703 {
3704 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3705 sizeof(wdaBssParams->extSetStaKeyParam) );
3706 }
3707#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003708#ifdef WLAN_FEATURE_11AC
3709 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3710 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3711#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003712
3713 return ;
3714}
Jeff Johnson295189b2012-06-20 16:38:30 -07003715/*
3716 * FUNCTION: WDA_UpdateSTAParams
3717 * Translated WDA/PE BSS info into WDI BSS info..
3718 */
3719void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3720 WDI_ConfigStaReqInfoType *wdiStaParams,
3721 tAddStaParams *wdaStaParams)
3722{
3723 tANI_U8 i = 0;
3724 /* Update STA params */
3725 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3726 sizeof(tSirMacAddr)) ;
3727 wdiStaParams->usAssocId = wdaStaParams->assocId;
3728 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003729 wdiStaParams->staIdx = wdaStaParams->staIdx;
3730
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 wdiStaParams->ucShortPreambleSupported =
3732 wdaStaParams->shortPreambleSupported;
3733 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3734 sizeof(tSirMacAddr)) ;
3735 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3736
3737 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3738
3739 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3740 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3741 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3742 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3743 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3744 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3745 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3746
3747 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3748 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 wdiStaParams->wdiSupportedRates.opRateMode =
3750 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3752 {
3753 wdiStaParams->wdiSupportedRates.llbRates[i] =
3754 wdaStaParams->supportedRates.llbRates[i];
3755 }
3756 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3757 {
3758 wdiStaParams->wdiSupportedRates.llaRates[i] =
3759 wdaStaParams->supportedRates.llaRates[i];
3760 }
3761 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3762 {
3763 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3764 wdaStaParams->supportedRates.aniLegacyRates[i];
3765 }
3766 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3767 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003768#ifdef WLAN_FEATURE_11AC
3769 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3770 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3771 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3772 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3773#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3775 {
3776 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3777 wdaStaParams->supportedRates.supportedMCSSet[i];
3778 }
3779 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3780 wdaStaParams->supportedRates.rxHighestDataRate;
3781
3782 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3783
3784 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3785
3786 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3787 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3788 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3789
3790 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3791 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3792 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3793 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003795#ifdef WLAN_FEATURE_11AC
3796 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3797 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003798 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003799#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003800 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3801 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 return ;
3803}
Jeff Johnson295189b2012-06-20 16:38:30 -07003804/*
3805 * -------------------------------------------------------------------------
3806 * CFG update to WDI
3807 * -------------------------------------------------------------------------
3808 */
3809
3810 /*
3811 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3812 * Convert the WNI CFG ID to HAL CFG ID
3813 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003814static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003815{
3816 switch(wniCfgId)
3817 {
3818 case WNI_CFG_STA_ID:
3819 return QWLAN_HAL_CFG_STA_ID;
3820 case WNI_CFG_CURRENT_TX_ANTENNA:
3821 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3822 case WNI_CFG_CURRENT_RX_ANTENNA:
3823 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3824 case WNI_CFG_LOW_GAIN_OVERRIDE:
3825 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3826 case WNI_CFG_POWER_STATE_PER_CHAIN:
3827 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3828 case WNI_CFG_CAL_PERIOD:
3829 return QWLAN_HAL_CFG_CAL_PERIOD;
3830 case WNI_CFG_CAL_CONTROL:
3831 return QWLAN_HAL_CFG_CAL_CONTROL;
3832 case WNI_CFG_PROXIMITY:
3833 return QWLAN_HAL_CFG_PROXIMITY;
3834 case WNI_CFG_NETWORK_DENSITY:
3835 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3836 case WNI_CFG_MAX_MEDIUM_TIME:
3837 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3838 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3839 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3840 case WNI_CFG_RTS_THRESHOLD:
3841 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3842 case WNI_CFG_SHORT_RETRY_LIMIT:
3843 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3844 case WNI_CFG_LONG_RETRY_LIMIT:
3845 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3846 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3847 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3848 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3849 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3850 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3851 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3852 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3853 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3854 case WNI_CFG_FIXED_RATE:
3855 return QWLAN_HAL_CFG_FIXED_RATE;
3856 case WNI_CFG_RETRYRATE_POLICY:
3857 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3858 case WNI_CFG_RETRYRATE_SECONDARY:
3859 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3860 case WNI_CFG_RETRYRATE_TERTIARY:
3861 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3862 case WNI_CFG_FORCE_POLICY_PROTECTION:
3863 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3864 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3865 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3866 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3867 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3868 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3869 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3870 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3871 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3872 case WNI_CFG_MAX_BA_SESSIONS:
3873 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3874 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3875 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3876 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3877 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3878 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3879 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3880 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3881 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3882 case WNI_CFG_STATS_PERIOD:
3883 return QWLAN_HAL_CFG_STATS_PERIOD;
3884 case WNI_CFG_CFP_MAX_DURATION:
3885 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3886#if 0 /*This is not part of CFG*/
3887 case WNI_CFG_FRAME_TRANS_ENABLED:
3888 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3889#endif
3890 case WNI_CFG_DTIM_PERIOD:
3891 return QWLAN_HAL_CFG_DTIM_PERIOD;
3892 case WNI_CFG_EDCA_WME_ACBK:
3893 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3894 case WNI_CFG_EDCA_WME_ACBE:
3895 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3896 case WNI_CFG_EDCA_WME_ACVI:
3897 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3898 case WNI_CFG_EDCA_WME_ACVO:
3899 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3900#if 0
3901 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3902 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3903 case WNI_CFG_TELE_BCN_TRANS_LI:
3904 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3905 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3906 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3907 case WNI_CFG_TELE_BCN_MAX_LI:
3908 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3909 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3910 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3911#endif
3912 case WNI_CFG_ENABLE_CLOSE_LOOP:
3913 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003914 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3915 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 default:
3917 {
3918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3919 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3920 wniCfgId);
3921 return VOS_STATUS_E_INVAL;
3922 }
3923 }
3924}
Jeff Johnson295189b2012-06-20 16:38:30 -07003925/*
3926 * FUNCTION: WDA_UpdateCfgCallback
3927 *
3928 */
3929void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3930{
3931 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3932 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3933 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003935 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 /*
3937 * currently there is no response message is expected between PE and
3938 * WDA, Failure return from WDI is a ASSERT condition
3939 */
3940 if(WDI_STATUS_SUCCESS != wdiStatus)
3941 {
3942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003943 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3945 }
3946
3947 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3948 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3949 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 return ;
3951}
Jeff Johnson295189b2012-06-20 16:38:30 -07003952/*
3953 * FUNCTION: WDA_UpdateCfg
3954 *
3955 */
3956VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3957{
3958
3959 WDI_Status status = WDI_STATUS_SUCCESS ;
3960 tANI_U32 val =0;
3961 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3962 tHalCfg *configData;
3963 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3964 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003966 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 if (NULL == pMac )
3968 {
3969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003970 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 return VOS_STATUS_E_FAILURE;
3972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 if(WDA_START_STATE != pWDA->wdaState)
3974 {
3975 return VOS_STATUS_E_FAILURE;
3976 }
3977
3978 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3979 {
3980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003981 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 VOS_ASSERT(0);
3983 return VOS_STATUS_E_FAILURE;
3984 }
3985
3986 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3987 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 if(NULL == wdiCfgReqParam)
3989 {
3990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 VOS_ASSERT(0);
3993 return VOS_STATUS_E_NOMEM;
3994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3996 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 if(NULL == wdiCfgReqParam->pConfigBuffer)
3998 {
3999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004000 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 vos_mem_free(wdiCfgReqParam);
4002 VOS_ASSERT(0);
4003 return VOS_STATUS_E_NOMEM;
4004 }
4005
4006 /*convert the WNI CFG Id to HAL CFG Id*/
4007 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4008 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4009
4010 /*TODO: revisit this for handling string parameters */
4011 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4012 &val) != eSIR_SUCCESS)
4013 {
4014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4015 "Failed to cfg get id %d\n", cfgParam->bodyval);
4016 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4017 vos_mem_free(wdiCfgReqParam);
4018 return eSIR_FAILURE;
4019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4021 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4022 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4023 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4024 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4025
4026 /* store Params pass it to WDI */
4027 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4029 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4030 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 if(IS_WDI_STATUS_FAILURE(status))
4032 {
4033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4034 "Failure in Update CFG WDI API, free all the memory " );
4035 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4036 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4037 pWDA->wdaWdiCfgApiMsgParam = NULL;
4038 /* Failure is not expected */
4039 VOS_ASSERT(0) ;
4040 }
4041#else
4042 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4043 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4044 pWDA->wdaWdiCfgApiMsgParam = NULL;
4045#endif
4046 return CONVERT_WDI2VOS_STATUS(status) ;
4047}
4048
Jeff Johnson295189b2012-06-20 16:38:30 -07004049VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4050 v_U8_t *pDefaultKeyId,
4051 v_U8_t *pNumKeys,
4052 WDI_KeysType *pWdiKeys )
4053{
4054 v_U32_t i, j, defKeyId = 0;
4055 v_U32_t val = SIR_MAC_KEY_LENGTH;
4056 VOS_STATUS status = WDI_STATUS_SUCCESS;
4057 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 if (NULL == pMac )
4059 {
4060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004061 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 return VOS_STATUS_E_FAILURE;
4063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4065 &defKeyId ))
4066 {
4067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4068 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4069 }
4070
4071 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 /* Need to extract ALL of the configured WEP Keys */
4073 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4074 {
4075 val = SIR_MAC_KEY_LENGTH;
4076 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4077 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4078 pWdiKeys[j].key,
4079 &val ))
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4082 "WEP Key index [%d] may not configured in CFG\n",i);
4083 }
4084 else
4085 {
4086 pWdiKeys[j].keyId = (tANI_U8) i;
4087 /*
4088 * Actually, a DC (Don't Care) because
4089 * this is determined (and set) by PE/MLME
4090 */
4091 pWdiKeys[j].unicast = 0;
4092 /*
4093 * Another DC (Don't Care)
4094 */
4095 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4096 /* Another DC (Don't Care). Unused for WEP */
4097 pWdiKeys[j].paeRole = 0;
4098 /* Determined from wlan_cfgGetStr() above.*/
4099 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 j++;
4101 *pNumKeys = (tANI_U8) j;
4102 }
4103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 return status;
4105}
Jeff Johnson295189b2012-06-20 16:38:30 -07004106/*
4107 * FUNCTION: WDA_SetBssKeyReqCallback
4108 * send SET BSS key RSP back to PE
4109 */
4110void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4111{
4112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4113 tWDA_CbContext *pWDA;
4114 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 if(NULL == pWdaParams)
4118 {
4119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 VOS_ASSERT(0) ;
4122 return ;
4123 }
4124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4125 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4127 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004128 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 return ;
4131}
Jeff Johnson295189b2012-06-20 16:38:30 -07004132/*
4133 * FUNCTION: WDA_ProcessSetBssKeyReq
4134 * Request to WDI for programming the BSS key( key for
4135 * broadcast/multicast frames Encryption)
4136 */
4137VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4138 tSetBssKeyParams *setBssKeyParams )
4139{
4140 WDI_Status status = WDI_STATUS_SUCCESS ;
4141 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4142 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4143 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4144 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 if(NULL == wdiSetBssKeyParam)
4149 {
4150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 VOS_ASSERT(0);
4153 return VOS_STATUS_E_NOMEM;
4154 }
4155 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4156 if(NULL == pWdaParams)
4157 {
4158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_ASSERT(0);
4161 vos_mem_free(wdiSetBssKeyParam);
4162 return VOS_STATUS_E_NOMEM;
4163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 /* copy set BSS params to WDI structure */
4166 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4167 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4168 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 if(setBssKeyParams->encType != eSIR_ED_NONE)
4170 {
4171 if( setBssKeyParams->numKeys == 0 &&
4172 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4173 setBssKeyParams->encType == eSIR_ED_WEP104))
4174 {
4175 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4177 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4178 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4179 }
4180 else
4181 {
4182 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4183 {
4184 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4185 setBssKeyParams->key[keyIndex].keyId;
4186 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4187 setBssKeyParams->key[keyIndex].unicast;
4188 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4189 setBssKeyParams->key[keyIndex].keyDirection;
4190 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4191 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4192 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4193 setBssKeyParams->key[keyIndex].paeRole;
4194 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4195 setBssKeyParams->key[keyIndex].keyLength;
4196 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4197 setBssKeyParams->key[keyIndex].key,
4198 SIR_MAC_MAX_KEY_LENGTH);
4199 }
4200 }
4201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4203 setBssKeyParams->singleTidRc;
4204 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 /* Store set key pointer, as this will be used for response */
4206 /* store Params pass it to WDI */
4207 pWdaParams->pWdaContext = pWDA;
4208 pWdaParams->wdaMsgParam = setBssKeyParams;
4209 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4211 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4212
4213 if(IS_WDI_STATUS_FAILURE(status))
4214 {
4215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4216 "Failure in Set BSS Key Req WDI API, free all the memory " );
4217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4218 vos_mem_free(pWdaParams) ;
4219 setBssKeyParams->status = eSIR_FAILURE ;
4220 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 return CONVERT_WDI2VOS_STATUS(status) ;
4223}
Jeff Johnson295189b2012-06-20 16:38:30 -07004224/*
4225 * FUNCTION: WDA_RemoveBssKeyReqCallback
4226 * send SET BSS key RSP back to PE
4227 */
4228void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4229{
4230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4231 tWDA_CbContext *pWDA;
4232 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 if(NULL == pWdaParams)
4236 {
4237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004238 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 VOS_ASSERT(0) ;
4240 return ;
4241 }
4242 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4243 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4245 vos_mem_free(pWdaParams) ;
4246
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004247 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 return ;
4250}
Jeff Johnson295189b2012-06-20 16:38:30 -07004251/*
4252 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4253 * Request to WDI to remove the BSS key( key for broadcast/multicast
4254 * frames Encryption)
4255 */
4256VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4257 tRemoveBssKeyParams *removeBssKeyParams )
4258{
4259 WDI_Status status = WDI_STATUS_SUCCESS ;
4260 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4261 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4262 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4263 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 if(NULL == wdiRemoveBssKeyParam)
4267 {
4268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 VOS_ASSERT(0);
4271 return VOS_STATUS_E_NOMEM;
4272 }
4273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4274 if(NULL == pWdaParams)
4275 {
4276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_ASSERT(0);
4279 vos_mem_free(wdiRemoveBssKeyParam);
4280 return VOS_STATUS_E_NOMEM;
4281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 /* copy Remove BSS key params to WDI structure*/
4283 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4284 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4285 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4286 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4287 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 /* Store remove key pointer, as this will be used for response */
4289 /* store Params pass it to WDI */
4290 pWdaParams->pWdaContext = pWDA;
4291 pWdaParams->wdaMsgParam = removeBssKeyParams;
4292 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4294 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 if(IS_WDI_STATUS_FAILURE(status))
4296 {
4297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4298 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4300 vos_mem_free(pWdaParams) ;
4301 removeBssKeyParams->status = eSIR_FAILURE ;
4302 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 return CONVERT_WDI2VOS_STATUS(status) ;
4305}
Jeff Johnson295189b2012-06-20 16:38:30 -07004306/*
4307 * FUNCTION: WDA_SetBssKeyReqCallback
4308 * send SET BSS key RSP back to PE
4309 */
4310void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4311{
4312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4313 tWDA_CbContext *pWDA;
4314 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 if(NULL == pWdaParams)
4318 {
4319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004320 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 VOS_ASSERT(0) ;
4322 return ;
4323 }
4324 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4325 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4327 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004328 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 return ;
4331}
Jeff Johnson295189b2012-06-20 16:38:30 -07004332/*
4333 * FUNCTION: WDA_ProcessSetStaKeyReq
4334 * Request to WDI for programming the STA key( key for Unicast frames
4335 * Encryption)
4336 */
4337VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4338 tSetStaKeyParams *setStaKeyParams )
4339{
4340 WDI_Status status = WDI_STATUS_SUCCESS ;
4341 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4342 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4343 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4344 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 if(NULL == wdiSetStaKeyParam)
4349 {
4350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 VOS_ASSERT(0);
4353 return VOS_STATUS_E_NOMEM;
4354 }
4355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4356 if(NULL == pWdaParams)
4357 {
4358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_ASSERT(0);
4361 vos_mem_free(wdiSetStaKeyParam);
4362 return VOS_STATUS_E_NOMEM;
4363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 /* copy set STA key params to WDI structure */
4367 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4368 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4369 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4370 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 if(setStaKeyParams->encType != eSIR_ED_NONE)
4372 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004373 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4375 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4376 {
4377 WDA_GetWepKeysFromCfg( pWDA,
4378 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4379 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4380 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4381 }
4382 else
4383 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4385 keyIndex++)
4386 {
4387 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4388 setStaKeyParams->key[keyIndex].keyId;
4389 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4390 setStaKeyParams->key[keyIndex].unicast;
4391 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4392 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4394 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4395 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4396 setStaKeyParams->key[keyIndex].paeRole;
4397 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4398 setStaKeyParams->key[keyIndex].keyLength;
4399 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4400 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4401 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4402 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4403 {
4404 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4405 }
4406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4408 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 }
4410 }
4411 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4412 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 /* Store set key pointer, as this will be used for response */
4414 /* store Params pass it to WDI */
4415 pWdaParams->pWdaContext = pWDA;
4416 pWdaParams->wdaMsgParam = setStaKeyParams;
4417 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4419 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 if(IS_WDI_STATUS_FAILURE(status))
4421 {
4422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4423 "Failure in set STA Key Req WDI API, free all the memory " );
4424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4425 vos_mem_free(pWdaParams) ;
4426 setStaKeyParams->status = eSIR_FAILURE ;
4427 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 return CONVERT_WDI2VOS_STATUS(status) ;
4430}
Jeff Johnson295189b2012-06-20 16:38:30 -07004431/*
4432 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4433 * send SET Bcast STA key RSP back to PE
4434 */
4435void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4436{
4437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4438 tWDA_CbContext *pWDA;
4439 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004441 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 if(NULL == pWdaParams)
4443 {
4444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004445 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_ASSERT(0) ;
4447 return ;
4448 }
4449 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4450 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4452 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004453 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 return ;
4456}
4457
Jeff Johnson295189b2012-06-20 16:38:30 -07004458/*
4459 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4460 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4461 * Encryption)
4462 */
4463VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4464 tSetStaKeyParams *setStaKeyParams )
4465{
4466 WDI_Status status = WDI_STATUS_SUCCESS ;
4467 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4468 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4469 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 if(NULL == wdiSetStaKeyParam)
4475 {
4476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 VOS_ASSERT(0);
4479 return VOS_STATUS_E_NOMEM;
4480 }
4481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4482 if(NULL == pWdaParams)
4483 {
4484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_ASSERT(0);
4487 vos_mem_free(wdiSetStaKeyParam);
4488 return VOS_STATUS_E_NOMEM;
4489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 /* copy set STA key params to WDI structure */
4493 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4494 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4495 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4496 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 if(setStaKeyParams->encType != eSIR_ED_NONE)
4498 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4500 keyIndex++)
4501 {
4502 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4503 setStaKeyParams->key[keyIndex].keyId;
4504 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4505 setStaKeyParams->key[keyIndex].unicast;
4506 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4507 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4509 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4510 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4511 setStaKeyParams->key[keyIndex].paeRole;
4512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4513 setStaKeyParams->key[keyIndex].keyLength;
4514 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4515 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4518 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 }
4520 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 /* Store set key pointer, as this will be used for response */
4522 /* store Params pass it to WDI */
4523 pWdaParams->pWdaContext = pWDA;
4524 pWdaParams->wdaMsgParam = setStaKeyParams;
4525 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4527 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if(IS_WDI_STATUS_FAILURE(status))
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4531 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4533 vos_mem_free(pWdaParams) ;
4534 setStaKeyParams->status = eSIR_FAILURE ;
4535 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 return CONVERT_WDI2VOS_STATUS(status) ;
4538}
Jeff Johnson295189b2012-06-20 16:38:30 -07004539/*
4540 * FUNCTION: WDA_RemoveStaKeyReqCallback
4541 * send SET BSS key RSP back to PE
4542 */
4543void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4544{
4545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4546 tWDA_CbContext *pWDA;
4547 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004549 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 if(NULL == pWdaParams)
4551 {
4552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004553 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 VOS_ASSERT(0) ;
4555 return ;
4556 }
4557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4558 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4560 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004561 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 return ;
4564}
4565
Jeff Johnson295189b2012-06-20 16:38:30 -07004566/*
4567 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4568 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4569 */
4570VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4571 tRemoveStaKeyParams *removeStaKeyParams )
4572{
4573 WDI_Status status = WDI_STATUS_SUCCESS ;
4574 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4575 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4576 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4577 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004579 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 if(NULL == wdiRemoveStaKeyParam)
4581 {
4582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 VOS_ASSERT(0);
4585 return VOS_STATUS_E_NOMEM;
4586 }
4587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4588 if(NULL == pWdaParams)
4589 {
4590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 VOS_ASSERT(0);
4593 vos_mem_free(wdiRemoveStaKeyParam);
4594 return VOS_STATUS_E_NOMEM;
4595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 /* copy remove STA key params to WDI structure*/
4597 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4598 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4599 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4600 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4601 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 /* Store remove key pointer, as this will be used for response */
4603 /* store Params pass it to WDI */
4604 pWdaParams->pWdaContext = pWDA;
4605 pWdaParams->wdaMsgParam = removeStaKeyParams;
4606 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4608 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 if(IS_WDI_STATUS_FAILURE(status))
4610 {
4611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4612 "Failure in remove STA Key Req WDI API, free all the memory " );
4613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4614 vos_mem_free(pWdaParams) ;
4615 removeStaKeyParams->status = eSIR_FAILURE ;
4616 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 return CONVERT_WDI2VOS_STATUS(status) ;
4619}
Jeff Johnson295189b2012-06-20 16:38:30 -07004620/*
4621 * FUNCTION: WDA_IsHandleSetLinkStateReq
4622 * Update the WDA state and return the status to handle this message or not
4623 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004624WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4625 tWDA_CbContext *pWDA,
4626 tLinkStateParams *linkStateParams)
4627{
4628 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 switch(linkStateParams->state)
4630 {
4631 case eSIR_LINK_PREASSOC_STATE:
4632 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4633 /*
4634 * set the WDA state to PRE ASSOC
4635 * copy the BSSID into pWDA to use it in join request and return,
4636 * No need to handle these messages.
4637 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004638 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4639 {
4640 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004641 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004642 }
4643 else
4644 {
4645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004646 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004647 VOS_ASSERT(0);
4648 }
4649
4650 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4651 {
4652 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004653 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004654 }
4655 else
4656 {
4657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004658 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004659 VOS_ASSERT(0);
4660 }
4661
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4663 *channel and after ) so reset the WDA state to ready when the second
4664 * time UMAC issue the link state with PREASSOC
4665 */
4666 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4667 {
4668 /* RESET WDA state back to WDA_READY_STATE */
4669 pWDA->wdaState = WDA_READY_STATE;
4670 }
4671 else
4672 {
4673 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4674 }
4675 //populate linkState info in WDACbCtxt
4676 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 default:
4679 if(pWDA->wdaState != WDA_READY_STATE)
4680 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004681 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4682 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4683 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4684 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4685 *the ASSERT in WDA_Stop during module unload.*/
4686 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4687 {
4688 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004689 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004690 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004691 else
4692 {
4693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004694 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004695 status = WDA_IGNORE_SET_LINK_STATE;
4696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 }
4698 break;
4699 }
4700
4701 return status;
4702}
Jeff Johnson295189b2012-06-20 16:38:30 -07004703/*
4704 * FUNCTION: WDA_SetLinkStateCallback
4705 * call back function for set link state from WDI
4706 */
4707void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4708{
4709 tWDA_CbContext *pWDA;
4710 tLinkStateParams *linkStateParams;
4711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004713 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 if(NULL == pWdaParams)
4715 {
4716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004717 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 VOS_ASSERT(0) ;
4719 return ;
4720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 /*
4724 * In STA mode start the BA activity check timer after association
4725 * and in AP mode start BA activity check timer after BSS start */
4726 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4727 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4728 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4729 {
4730 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 /*
4734 * No respone required for WDA_SET_LINK_STATE so free the request
4735 * param here
4736 */
4737 if( pWdaParams != NULL )
4738 {
4739 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4740 {
4741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4742 }
4743 vos_mem_free(pWdaParams);
4744 }
4745 return ;
4746}
Jeff Johnson295189b2012-06-20 16:38:30 -07004747/*
4748 * FUNCTION: WDA_ProcessSetLinkState
4749 * Request to WDI to set the link status.
4750 */
4751VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4752 tLinkStateParams *linkStateParams)
4753{
4754 WDI_Status status = WDI_STATUS_SUCCESS ;
4755 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4756 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4757 sizeof(WDI_SetLinkReqParamsType)) ;
4758 tWDA_ReqParams *pWdaParams ;
4759 tpAniSirGlobal pMac;
4760 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4761
4762 if(NULL == pMac)
4763 {
4764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004765 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004767 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 return VOS_STATUS_E_FAILURE;
4769 }
4770
4771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004773 if(NULL == wdiSetLinkStateParam)
4774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 VOS_ASSERT(0);
4778 return VOS_STATUS_E_NOMEM;
4779 }
4780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4781 if(NULL == pWdaParams)
4782 {
4783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 VOS_ASSERT(0);
4786 vos_mem_free(wdiSetLinkStateParam);
4787 return VOS_STATUS_E_NOMEM;
4788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 if(WDA_IGNORE_SET_LINK_STATE ==
4790 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4791 {
4792 status = WDI_STATUS_E_FAILURE;
4793 }
4794 else
4795 {
4796 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4797 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4799 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4801 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004802 pWdaParams->pWdaContext = pWDA;
4803 /* Store remove key pointer, as this will be used for response */
4804 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 /* store Params pass it to WDI */
4806 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4807 /* Stop Timer only other than GO role and concurrent session */
4808 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4809 && !vos_concurrent_sessions_running() &&
4810 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4811 {
4812 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4815 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 if(IS_WDI_STATUS_FAILURE(status))
4817 {
4818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4819 "Failure in set link state Req WDI API, free all the memory " );
4820 }
4821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 if(IS_WDI_STATUS_FAILURE(status))
4823 {
4824 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004825 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 vos_mem_free(pWdaParams);
4827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 return CONVERT_WDI2VOS_STATUS(status) ;
4829}
Jeff Johnson295189b2012-06-20 16:38:30 -07004830/*
4831 * FUNCTION: WDA_GetStatsReqParamsCallback
4832 * send the response to PE with Stats received from WDI
4833 */
4834void WDA_GetStatsReqParamsCallback(
4835 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4836 void* pUserData)
4837{
4838 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4839 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4840
4841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 pGetPEStatsRspParams =
4844 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4845 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4846
4847 if(NULL == pGetPEStatsRspParams)
4848 {
4849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_ASSERT(0);
4852 return;
4853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4855 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4856 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4857 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4858 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4859
4860 //Fill the Session Id Properly in PE
4861 pGetPEStatsRspParams->sessionId = 0;
4862 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004863 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4865 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 vos_mem_copy( pGetPEStatsRspParams + 1,
4867 wdiGetStatsRsp + 1,
4868 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 /* send response to UMAC*/
4870 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4871
4872 return;
4873}
4874
Jeff Johnson295189b2012-06-20 16:38:30 -07004875/*
4876 * FUNCTION: WDA_ProcessGetStatsReq
4877 * Request to WDI to get the statistics
4878 */
4879VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4880 tAniGetPEStatsReq *pGetStatsParams)
4881{
4882 WDI_Status status = WDI_STATUS_SUCCESS ;
4883 WDI_GetStatsReqParamsType wdiGetStatsParam;
4884 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4888 pGetStatsParams->staId;
4889 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4890 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 status = WDI_GetStatsReq(&wdiGetStatsParam,
4893 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 if(IS_WDI_STATUS_FAILURE(status))
4895 {
4896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4897 "Failure in Get Stats Req WDI API, free all the memory " );
4898 pGetPEStatsRspParams =
4899 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4900 if(NULL == pGetPEStatsRspParams)
4901 {
4902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004905 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 return VOS_STATUS_E_NOMEM;
4907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4909 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4910 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4911 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4912 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4913 (void *)pGetPEStatsRspParams, 0) ;
4914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 /* Free the request message */
4916 vos_mem_free(pGetStatsParams);
4917 return CONVERT_WDI2VOS_STATUS(status);
4918}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004919
4920#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4921/*
4922 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4923 * send the response to PE with roam Rssi received from WDI
4924 */
4925void WDA_GetRoamRssiReqParamsCallback(
4926 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4927 void* pUserData)
4928{
4929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4930 tWDA_CbContext *pWDA = NULL;
4931 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4932 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4934 "<------ %s " ,__func__);
4935 if(NULL == pWdaParams)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4938 "%s: pWdaParams received NULL", __func__);
4939 VOS_ASSERT(0) ;
4940 return ;
4941 }
4942 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4943 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
4944
4945 if(NULL == pGetRoamRssiReqParams)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4948 "%s: pGetRoamRssiReqParams received NULL", __func__);
4949 VOS_ASSERT(0);
4950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4951 vos_mem_free(pWdaParams);
4952 return ;
4953 }
4954 pGetRoamRssiRspParams =
4955 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
4956
4957 if(NULL == pGetRoamRssiRspParams)
4958 {
4959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4960 "%s: VOS MEM Alloc Failure", __func__);
4961 VOS_ASSERT(0);
4962 return;
4963 }
4964 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
4965 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004966 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004967 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
4968 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
4969
4970 /* Assign get roam rssi req (backup) in to the response */
4971 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
4972
4973 /* free WDI command buffer */
4974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4975 vos_mem_free(pWdaParams) ;
4976
4977 /* send response to UMAC*/
4978 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
4979
4980 return;
4981}
4982
4983
4984
4985/*
4986 * FUNCTION: WDA_ProcessGetRoamRssiReq
4987 * Request to WDI to get the statistics
4988 */
4989VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
4990 tAniGetRssiReq *pGetRoamRssiParams)
4991{
4992 WDI_Status status = WDI_STATUS_SUCCESS ;
4993 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
4994 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4995 tWDA_ReqParams *pWdaParams = NULL;
4996
4997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4998 "------> %s " ,__func__);
4999 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5000 pGetRoamRssiParams->staId;
5001 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5002
5003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5004 if(NULL == pWdaParams)
5005 {
5006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5007 "%s: VOS MEM Alloc Failure", __func__);
5008 VOS_ASSERT(0);
5009 return VOS_STATUS_E_NOMEM;
5010 }
5011
5012 /* Store Init Req pointer, as this will be used for response */
5013 pWdaParams->pWdaContext = pWDA;
5014
5015 /* Take Get roam Rssi req backup as it stores the callback to be called after
5016 receiving the response */
5017 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5018 pWdaParams->wdaWdiApiMsgParam = NULL;
5019
5020 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5021 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5022 if(IS_WDI_STATUS_FAILURE(status))
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5025 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5026 pGetRoamRssiRspParams =
5027 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5028 if(NULL == pGetRoamRssiRspParams)
5029 {
5030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5031 "%s: VOS MEM Alloc Failure", __func__);
5032 VOS_ASSERT(0);
5033 vos_mem_free(pGetRoamRssiParams);
5034 vos_mem_free(pWdaParams);
5035 return VOS_STATUS_E_NOMEM;
5036 }
5037 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5038 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5039 pGetRoamRssiRspParams->rssi = 0;
5040 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5041 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5042 (void *)pGetRoamRssiRspParams, 0) ;
5043 }
5044 return CONVERT_WDI2VOS_STATUS(status);
5045}
5046#endif
5047
5048
Jeff Johnson295189b2012-06-20 16:38:30 -07005049/*
5050 * FUNCTION: WDA_UpdateEDCAParamCallback
5051 * call back function for Update EDCA params from WDI
5052 */
5053void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5054{
5055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5056 tEdcaParams *pEdcaParams;
5057
5058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005059 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 if(NULL == pWdaParams)
5061 {
5062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005064 VOS_ASSERT(0) ;
5065 return ;
5066 }
5067 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5069 vos_mem_free(pWdaParams);
5070 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 return ;
5072}
Jeff Johnson295189b2012-06-20 16:38:30 -07005073/*
5074 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5075 * Request to WDI to Update the EDCA params.
5076 */
5077VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5078 tEdcaParams *pEdcaParams)
5079{
5080 WDI_Status status = WDI_STATUS_SUCCESS ;
5081 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5082 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5083 sizeof(WDI_UpdateEDCAParamsType)) ;
5084 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005086 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 if(NULL == wdiEdcaParam)
5088 {
5089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005092 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 return VOS_STATUS_E_NOMEM;
5094 }
5095 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5096 if(NULL == pWdaParams)
5097 {
5098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 VOS_ASSERT(0);
5101 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005102 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 return VOS_STATUS_E_NOMEM;
5104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5106 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5107 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5108 &pEdcaParams->acbe);
5109 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5110 &pEdcaParams->acbk);
5111 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5112 &pEdcaParams->acvi);
5113 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5114 &pEdcaParams->acvo);
5115 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 pWdaParams->pWdaContext = pWDA;
5117 /* Store remove key pointer, as this will be used for response */
5118 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 /* store Params pass it to WDI */
5120 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5122 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 if(IS_WDI_STATUS_FAILURE(status))
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5126 "Failure in Update EDCA Params WDI API, free all the memory " );
5127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5128 vos_mem_free(pWdaParams);
5129 vos_mem_free(pEdcaParams);
5130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 return CONVERT_WDI2VOS_STATUS(status) ;
5132}
Jeff Johnson295189b2012-06-20 16:38:30 -07005133/*
5134 * FUNCTION: WDA_AddBAReqCallback
5135 * send ADD BA RSP back to PE
5136 */
5137void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5138 void* pUserData)
5139{
5140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5141 tWDA_CbContext *pWDA;
5142 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 if(NULL == pWdaParams)
5146 {
5147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005148 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_ASSERT(0) ;
5150 return ;
5151 }
5152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5153 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5155 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005156 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 return ;
5159}
5160
Jeff Johnson295189b2012-06-20 16:38:30 -07005161/*
5162 * FUNCTION: WDA_ProcessAddBAReq
5163 * Request to WDI to Update the ADDBA REQ params.
5164 */
5165VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5166 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5167{
Jeff Johnson43971f52012-07-17 12:26:56 -07005168 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5170 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5171 sizeof(WDI_AddBAReqParamsType)) ;
5172 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 if(NULL == wdiAddBAReqParam)
5176 {
5177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 VOS_ASSERT(0);
5180 return VOS_STATUS_E_NOMEM;
5181 }
5182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5183 if(NULL == pWdaParams)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 vos_mem_free(wdiAddBAReqParam);
5189 return VOS_STATUS_E_NOMEM;
5190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 do
5192 {
5193 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 wdiAddBaInfo->ucSTAIdx = staIdx ;
5195 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5196 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 } while(0) ;
5198 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 pWdaParams->pWdaContext = pWDA;
5200 /* store Params pass it to WDI */
5201 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5202 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005203 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5204 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005205
Jeff Johnson43971f52012-07-17 12:26:56 -07005206 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 {
5208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005209 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5210 status = CONVERT_WDI2VOS_STATUS(wstatus);
5211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 vos_mem_free(pWdaParams);
5213 pAddBAReqParams->status = eSIR_FAILURE;
5214 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5215 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005216 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005217}
Jeff Johnson295189b2012-06-20 16:38:30 -07005218/*
5219 * FUNCTION: WDA_AddBASessionReqCallback
5220 * send ADD BA SESSION RSP back to PE/(or TL)
5221 */
5222void WDA_AddBASessionReqCallback(
5223 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5224{
5225 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5227 tWDA_CbContext *pWDA;
5228 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005230 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 if(NULL == pWdaParams)
5232 {
5233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005234 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 VOS_ASSERT(0) ;
5236 return ;
5237 }
5238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5239 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if( NULL == pAddBAReqParams )
5241 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5246 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 return ;
5248 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5250 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 /*
5252 * if WDA in update TL state, update TL with BA session parama and send
5253 * another request to HAL(/WDI) (ADD_BA_REQ)
5254 */
5255
5256 if((VOS_STATUS_SUCCESS ==
5257 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5258 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5259 {
5260 /* Update TL with BA info received from HAL/WDI */
5261 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5262 wdiAddBaSession->usBaSessionID,
5263 wdiAddBaSession->ucSTAIdx,
5264 wdiAddBaSession->ucBaTID,
5265 wdiAddBaSession->ucBaBufferSize,
5266 wdiAddBaSession->ucWinSize,
5267 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005268 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5269 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5270 }
5271 else
5272 {
5273 pAddBAReqParams->status =
5274 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5275
5276 /* Setting Flag to indicate that Set BA is success */
5277 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5278 {
5279 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5280 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5281 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 /*Reset the WDA state to READY */
5286 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 return ;
5288}
5289
Jeff Johnson295189b2012-06-20 16:38:30 -07005290/*
5291 * FUNCTION: WDA_ProcessAddBASessionReq
5292 * Request to WDI to Update the ADDBA REQ params.
5293 */
5294VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5295 tAddBAParams *pAddBAReqParams)
5296{
5297 WDI_Status status = WDI_STATUS_SUCCESS ;
5298 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5299 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5300 sizeof(WDI_AddBASessionReqParamsType)) ;
5301 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005302 WLANTL_STAStateType tlSTAState = 0;
5303
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 if(NULL == wdiAddBASessionReqParam)
5307 {
5308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 VOS_ASSERT(0);
5311 return VOS_STATUS_E_NOMEM;
5312 }
5313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5314 if(NULL == pWdaParams)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_ASSERT(0);
5319 vos_mem_free(wdiAddBASessionReqParam);
5320 return VOS_STATUS_E_NOMEM;
5321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 /*
5323 * Populate ADD BA parameters and pass these paarmeters to WDI.
5324 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5325 * the state to track if these is BA recipient case or BA initiator
5326 * case.
5327 */
5328 do
5329 {
5330 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5331 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5332 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5333 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5334 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5335 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5336 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5339 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5340 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5341 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5342 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 /* check the BA direction and update state accordingly */
5344 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5345 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5346 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5347
5348 }while(0) ;
5349 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 pWdaParams->pWdaContext = pWDA;
5351 /* Store ADD BA pointer, as this will be used for response */
5352 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5353 /* store Params pass it to WDI */
5354 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005355
5356 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5357 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5358 */
5359 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5360 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5361 {
5362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5363 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5364 status = WDI_STATUS_E_NOT_ALLOWED;
5365 pAddBAReqParams->status =
5366 CONVERT_WDI2SIR_STATUS(status) ;
5367 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5368 /*Reset the WDA state to READY */
5369 pWDA->wdaState = WDA_READY_STATE;
5370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5371 vos_mem_free(pWdaParams);
5372
5373 return CONVERT_WDI2VOS_STATUS(status) ;
5374 }
5375
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5377 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 if(IS_WDI_STATUS_FAILURE(status))
5379 {
5380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005381 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5383 "Send ADD BA failure response to PE\n");
5384 pAddBAReqParams->status =
5385 CONVERT_WDI2SIR_STATUS(status) ;
5386 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005387 /*Reset the WDA state to READY */
5388 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 vos_mem_free(pWdaParams);
5391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005393}
Jeff Johnson295189b2012-06-20 16:38:30 -07005394/*
5395 * FUNCTION: WDA_DelBANotifyTL
5396 * send DEL BA IND to TL
5397 */
5398void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5399 tDelBAParams *pDelBAReqParams)
5400{
5401 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5402 //tSirMsgQ msg;
5403 vos_msg_t vosMsg;
5404 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 if(NULL == pDelBAInd)
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 VOS_ASSERT(0) ;
5410 return;
5411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5413 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5414 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5415 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005416
Jeff Johnson295189b2012-06-20 16:38:30 -07005417
5418 vosMsg.type = WDA_DELETEBA_IND;
5419 vosMsg.bodyptr = pDelBAInd;
5420 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5421 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5422 {
5423 vosStatus = VOS_STATUS_E_BADMSG;
5424 }
5425}
Jeff Johnson295189b2012-06-20 16:38:30 -07005426/*
5427 * FUNCTION: WDA_DelBAReqCallback
5428 * send DEL BA RSP back to PE
5429 */
5430void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5431{
5432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5433 tWDA_CbContext *pWDA;
5434 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005436 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 if(NULL == pWdaParams)
5438 {
5439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005440 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 VOS_ASSERT(0) ;
5442 return ;
5443 }
5444 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5445 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 /* Notify TL about DEL BA in case of recipinet */
5447 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5448 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5449 {
5450 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 /*
5453 * No respone required for WDA_DELBA_IND so just free the request
5454 * param here
5455 */
5456 vos_mem_free(pDelBAReqParams);
5457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5458 vos_mem_free(pWdaParams);
5459 return ;
5460}
5461
Jeff Johnson295189b2012-06-20 16:38:30 -07005462/*
5463 * FUNCTION: WDA_ProcessDelBAReq
5464 * Request to WDI to Update the DELBA REQ params.
5465 */
5466VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5467 tDelBAParams *pDelBAReqParams)
5468{
5469 WDI_Status status = WDI_STATUS_SUCCESS ;
5470 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5471 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5472 sizeof(WDI_DelBAReqParamsType)) ;
5473 tWDA_ReqParams *pWdaParams ;
5474 tANI_U16 staIdx = 0;
5475 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005477 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 if(NULL == wdiDelBAReqParam)
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 VOS_ASSERT(0);
5483 return VOS_STATUS_E_NOMEM;
5484 }
5485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5486 if(NULL == pWdaParams)
5487 {
5488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 VOS_ASSERT(0);
5491 vos_mem_free(wdiDelBAReqParam);
5492 return VOS_STATUS_E_NOMEM;
5493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5495 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5496 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5497 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 pWdaParams->pWdaContext = pWDA;
5499 /* Store DEL BA pointer, as this will be used for response */
5500 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 /* store Params pass it to WDI */
5502 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5504 * maintained in WDA, so that WDA can retry for another BA session
5505 */
5506 staIdx = pDelBAReqParams->staIdx;
5507 tid = pDelBAReqParams->baTID;
5508 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 status = WDI_DelBAReq(wdiDelBAReqParam,
5510 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 if(IS_WDI_STATUS_FAILURE(status))
5512 {
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5514 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5516 vos_mem_free(pWdaParams->wdaMsgParam);
5517 vos_mem_free(pWdaParams);
5518 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520}
Jeff Johnson295189b2012-06-20 16:38:30 -07005521/*
5522 * FUNCTION: WDA_AddTSReqCallback
5523 * send ADD TS RSP back to PE
5524 */
5525void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5526{
5527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5528 tWDA_CbContext *pWDA;
5529 tAddTsParams *pAddTsReqParams;
5530
5531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005532 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 if(NULL == pWdaParams)
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 VOS_ASSERT(0) ;
5538 return ;
5539 }
5540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5541 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5543 vos_mem_free(pWdaParams);
5544
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005545 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 return ;
5548}
5549
Jeff Johnson295189b2012-06-20 16:38:30 -07005550/*
5551 * FUNCTION: WDA_ProcessAddTSReq
5552 * Request to WDI to Update the ADD TS REQ params.
5553 */
5554VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5555 tAddTsParams *pAddTsReqParams)
5556{
5557 WDI_Status status = WDI_STATUS_SUCCESS ;
5558 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5559 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5560 sizeof(WDI_AddTSReqParamsType)) ;
5561 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005563 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 if(NULL == wdiAddTSReqParam)
5565 {
5566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 VOS_ASSERT(0);
5569 return VOS_STATUS_E_NOMEM;
5570 }
5571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5572 if(NULL == pWdaParams)
5573 {
5574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 VOS_ASSERT(0);
5577 vos_mem_free(wdiAddTSReqParam);
5578 return VOS_STATUS_E_NOMEM;
5579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5581 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 //TS IE
5583 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5585 pAddTsReqParams->tspec.length;
5586
5587 //TS IE : TS INFO : TRAFFIC
5588 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5589 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5591 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5593 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5595 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5597 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5599 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5601 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5602 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5603 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5604
5605 //TS IE : TS INFO : SCHEDULE
5606 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5607 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5608 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5609 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 //TS IE
5611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5612 pAddTsReqParams->tspec.nomMsduSz;
5613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5614 pAddTsReqParams->tspec.maxMsduSz;
5615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5616 pAddTsReqParams->tspec.minSvcInterval;
5617 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5618 pAddTsReqParams->tspec.maxSvcInterval;
5619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5620 pAddTsReqParams->tspec.inactInterval;
5621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5622 pAddTsReqParams->tspec.suspendInterval;
5623 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5624 pAddTsReqParams->tspec.svcStartTime;
5625 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5626 pAddTsReqParams->tspec.minDataRate;
5627 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5628 pAddTsReqParams->tspec.meanDataRate;
5629 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5630 pAddTsReqParams->tspec.peakDataRate;
5631 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5632 pAddTsReqParams->tspec.maxBurstSz;
5633 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5634 pAddTsReqParams->tspec.delayBound;
5635 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5636 pAddTsReqParams->tspec.minPhyRate;
5637 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5638 pAddTsReqParams->tspec.surplusBw;
5639 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5640 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 /* TODO: tAddTsParams doesn't have the following fields */
5642#if 0
5643 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5644 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5645 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5646 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5647#endif
5648 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5649
5650 pWdaParams->pWdaContext = pWDA;
5651 /* Store ADD TS pointer, as this will be used for response */
5652 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 /* store Params pass it to WDI */
5654 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 status = WDI_AddTSReq(wdiAddTSReqParam,
5656 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 if(IS_WDI_STATUS_FAILURE(status))
5658 {
5659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5660 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5662 vos_mem_free(pWdaParams);
5663 pAddTsReqParams->status = eSIR_FAILURE ;
5664 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005667}
5668
Jeff Johnson295189b2012-06-20 16:38:30 -07005669/*
5670 * FUNCTION: WDA_DelTSReqCallback
5671 * send DEL TS RSP back to PE
5672 */
5673void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5674{
5675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005677 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5679 vos_mem_free(pWdaParams->wdaMsgParam) ;
5680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 /*
5682 * No respone required for WDA_DEL_TS_REQ so just free the request
5683 * param here
5684 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 return ;
5686}
5687
Jeff Johnson295189b2012-06-20 16:38:30 -07005688/*
5689 * FUNCTION: WDA_ProcessDelTSReq
5690 * Request to WDI to Update the DELTS REQ params.
5691 */
5692VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5693 tDelTsParams *pDelTSReqParams)
5694{
5695 WDI_Status status = WDI_STATUS_SUCCESS ;
5696 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5697 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5698 sizeof(WDI_DelTSReqParamsType)) ;
5699 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005701 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 if(NULL == wdiDelTSReqParam)
5703 {
5704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 VOS_ASSERT(0);
5707 return VOS_STATUS_E_NOMEM;
5708 }
5709 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5710 if(NULL == pWdaParams)
5711 {
5712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 VOS_ASSERT(0);
5715 vos_mem_free(wdiDelTSReqParam);
5716 return VOS_STATUS_E_NOMEM;
5717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5719 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5720 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5721 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5722 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 pWdaParams->pWdaContext = pWDA;
5724 /* Store DEL TS pointer, as this will be used for response */
5725 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 /* store Params pass it to WDI */
5727 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_DelTSReq(wdiDelTSReqParam,
5729 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5735 vos_mem_free(pWdaParams->wdaMsgParam);
5736 vos_mem_free(pWdaParams);
5737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005739}
Jeff Johnson295189b2012-06-20 16:38:30 -07005740/*
5741 * FUNCTION: WDA_UpdateBeaconParamsCallback
5742 * Free the memory. No need to send any response to PE in this case
5743 */
5744void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5745{
5746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005748 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 if(NULL == pWdaParams)
5750 {
5751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005752 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005753 VOS_ASSERT(0) ;
5754 return ;
5755 }
5756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5757 vos_mem_free(pWdaParams->wdaMsgParam) ;
5758 vos_mem_free(pWdaParams);
5759 /*
5760 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5761 * param here
5762 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 return ;
5764}
Jeff Johnson295189b2012-06-20 16:38:30 -07005765/*
5766 * FUNCTION: WDA_ProcessUpdateBeaconParams
5767 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5768 */
5769VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5770 tUpdateBeaconParams *pUpdateBeaconParams)
5771{
5772 WDI_Status status = WDI_STATUS_SUCCESS ;
5773 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5774 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5775 sizeof(WDI_UpdateBeaconParamsType)) ;
5776 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005778 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 if(NULL == wdiUpdateBeaconParams)
5780 {
5781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 VOS_ASSERT(0);
5784 return VOS_STATUS_E_NOMEM;
5785 }
5786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5787 if(NULL == pWdaParams)
5788 {
5789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 VOS_ASSERT(0);
5792 vos_mem_free(wdiUpdateBeaconParams);
5793 return VOS_STATUS_E_NOMEM;
5794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005795 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5796 pUpdateBeaconParams->bssIdx;
5797 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5798 pUpdateBeaconParams->fShortPreamble;
5799 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5800 pUpdateBeaconParams->fShortSlotTime;
5801 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5802 pUpdateBeaconParams->beaconInterval;
5803 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5804 pUpdateBeaconParams->llaCoexist;
5805 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5806 pUpdateBeaconParams->llbCoexist;
5807 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5808 pUpdateBeaconParams->llgCoexist;
5809 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5810 pUpdateBeaconParams->ht20MhzCoexist;
5811 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5812 pUpdateBeaconParams->llnNonGFCoexist;
5813 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5814 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5815 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5816 pUpdateBeaconParams->fRIFSMode;
5817 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5818 pUpdateBeaconParams->paramChangeBitmap;
5819 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5820
5821 pWdaParams->pWdaContext = pWDA;
5822 /* Store UpdateBeacon Req pointer, as this will be used for response */
5823 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 /* store Params pass it to WDI */
5825 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5827 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5828 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 if(IS_WDI_STATUS_FAILURE(status))
5830 {
5831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5832 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5834 vos_mem_free(pWdaParams->wdaMsgParam);
5835 vos_mem_free(pWdaParams);
5836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005838}
Jeff Johnson295189b2012-06-20 16:38:30 -07005839#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005840/*
5841 * FUNCTION: WDA_TSMStatsReqCallback
5842 * send TSM Stats RSP back to PE
5843 */
5844void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5845{
5846 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5847 tWDA_CbContext *pWDA = NULL;
5848 tTSMStats *pTsmRspParams = NULL;
5849
5850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005851 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 if(NULL == pWdaParams)
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_ASSERT(0) ;
5857 return ;
5858 }
5859 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5860 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 if( NULL == pTsmRspParams )
5862 {
5863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005864 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 VOS_ASSERT( 0 );
5866 return ;
5867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5869 vos_mem_free(pWdaParams);
5870
5871 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5872 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5873 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5874 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5875 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5876 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5877 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5878 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5879 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5880 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 return ;
5883}
5884
5885
Jeff Johnson295189b2012-06-20 16:38:30 -07005886/*
5887 * FUNCTION: WDA_ProcessTsmStatsReq
5888 * Request to WDI to get the TSM Stats params.
5889 */
5890VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5891 tTSMStats *pTsmStats)
5892{
5893 WDI_Status status = WDI_STATUS_SUCCESS ;
5894 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5895 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005897 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5899 sizeof(WDI_TSMStatsReqParamsType));
5900 if(NULL == wdiTSMReqParam)
5901 {
5902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 VOS_ASSERT(0);
5905 return VOS_STATUS_E_NOMEM;
5906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5908 if(NULL == pWdaParams)
5909 {
5910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 VOS_ASSERT(0);
5913 vos_mem_free(wdiTSMReqParam);
5914 return VOS_STATUS_E_NOMEM;
5915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5917 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5918 pTsmStats->bssId,
5919 sizeof(wpt_macAddr));
5920 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5921
5922 pWdaParams->pWdaContext = pWDA;
5923 /* Store TSM Stats pointer, as this will be used for response */
5924 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 /* store Params pass it to WDI */
5926 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 status = WDI_TSMStatsReq(wdiTSMReqParam,
5928 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 if(IS_WDI_STATUS_FAILURE(status))
5930 {
5931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5932 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5934 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005935 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 return CONVERT_WDI2VOS_STATUS(status) ;
5938}
5939#endif
5940/*
5941 * FUNCTION: WDA_SendBeaconParamsCallback
5942 * No need to send any response to PE in this case
5943 */
5944void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5945{
5946
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005948 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 return ;
5950}
Jeff Johnson295189b2012-06-20 16:38:30 -07005951/*
5952 * FUNCTION: WDA_ProcessSendBeacon
5953 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5954 * start beacon trasmission
5955 */
5956VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5957 tSendbeaconParams *pSendbeaconParams)
5958{
5959 WDI_Status status = WDI_STATUS_SUCCESS ;
5960 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005962 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5964 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5965 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5966 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5968 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05305969 /* p2pIeOffset should be atleast greater than timIeOffset */
5970 if ((pSendbeaconParams->p2pIeOffset != 0) &&
5971 (pSendbeaconParams->p2pIeOffset <
5972 pSendbeaconParams->timIeOffset))
5973 {
5974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5975 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
5976 VOS_ASSERT( 0 );
5977 return WDI_STATUS_E_FAILURE;
5978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005979 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5980 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 /* Copy the beacon template to local buffer */
5982 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5983 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5984 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5985
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5987 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 if(IS_WDI_STATUS_FAILURE(status))
5989 {
5990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5991 "Failure in SEND BEACON REQ Params WDI API" );
5992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 vos_mem_free(pSendbeaconParams);
5994 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005995}
Jeff Johnson295189b2012-06-20 16:38:30 -07005996/*
5997 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5998 * No need to send any response to PE in this case
5999 */
6000void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6001{
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 return ;
6005}
6006
Jeff Johnson295189b2012-06-20 16:38:30 -07006007/*
6008 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6009 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6010 * send probe response
6011 */
6012VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6013 tSendProbeRespParams *pSendProbeRspParams)
6014{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006015 WDI_Status status = WDI_STATUS_SUCCESS;
6016 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6017 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006019 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006020
6021 if (!wdiSendProbeRspParam)
6022 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6023
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006025 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006027 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 /* Copy the Probe Response template to local buffer */
6030 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006031 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 pSendProbeRspParams->pProbeRespTemplate,
6033 pSendProbeRspParams->probeRespTemplateLen);
6034 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006035 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6037 WDI_PROBE_REQ_BITMAP_IE_LEN);
6038
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006039 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006040
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006041 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 if(IS_WDI_STATUS_FAILURE(status))
6044 {
6045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6046 "Failure in SEND Probe RSP Params WDI API" );
6047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006049 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006051}
Jeff Johnson295189b2012-06-20 16:38:30 -07006052#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6053/*
6054 * FUNCTION: WDA_SetMaxTxPowerCallBack
6055 * send the response to PE with power value received from WDI
6056 */
6057void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6058 void* pUserData)
6059{
6060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6061 tWDA_CbContext *pWDA = NULL;
6062 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6063
6064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 if(NULL == pWdaParams)
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 VOS_ASSERT(0) ;
6071 return ;
6072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6074 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 if( NULL == pMaxTxPowerParams )
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006078 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006079 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6081 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 return ;
6083 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006084
Jeff Johnson295189b2012-06-20 16:38:30 -07006085
6086 /*need to free memory for the pointers used in the
6087 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6089 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006091
Jeff Johnson295189b2012-06-20 16:38:30 -07006092
6093 /* send response to UMAC*/
6094 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6095
6096 return;
6097}
Jeff Johnson295189b2012-06-20 16:38:30 -07006098/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006099 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 * Request to WDI to send set Max Tx Power Request
6101 */
6102 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6103 tMaxTxPowerParams *MaxTxPowerParams)
6104{
6105 WDI_Status status = WDI_STATUS_SUCCESS;
6106 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6107 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006108
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006111
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6113 sizeof(WDI_SetMaxTxPowerParamsType));
6114 if(NULL == wdiSetMaxTxPowerParams)
6115 {
6116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 VOS_ASSERT(0);
6119 return VOS_STATUS_E_NOMEM;
6120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6122 if(NULL == pWdaParams)
6123 {
6124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 vos_mem_free(wdiSetMaxTxPowerParams);
6127 VOS_ASSERT(0);
6128 return VOS_STATUS_E_NOMEM;
6129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 /* Copy.Max.Tx.Power Params to WDI structure */
6131 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6132 MaxTxPowerParams->bssId,
6133 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6135 MaxTxPowerParams->selfStaMacAddr,
6136 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6138 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 pWdaParams->pWdaContext = pWDA;
6141 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 /* store Params pass it to WDI */
6143 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6145 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 if(IS_WDI_STATUS_FAILURE(status))
6147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6149 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6151 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006152 /* send response to UMAC*/
6153 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 }
6155 return CONVERT_WDI2VOS_STATUS(status);
6156
6157}
Jeff Johnson295189b2012-06-20 16:38:30 -07006158#endif
schang86c22c42013-03-13 18:41:24 -07006159
6160/*
6161 * FUNCTION: WDA_SetTxPowerCallBack
6162 * send the response to PE with power value received from WDI
6163 */
6164void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6165 void* pUserData)
6166{
6167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6168 tWDA_CbContext *pWDA = NULL;
6169 tSirSetTxPowerReq *pTxPowerParams = NULL;
6170
6171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6172 "<------ %s ", __func__);
6173 if(NULL == pWdaParams)
6174 {
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6176 "%s: pWdaParams received NULL", __func__);
6177 VOS_ASSERT(0) ;
6178 return ;
6179 }
6180 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6181 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6182 if(NULL == pTxPowerParams)
6183 {
6184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6185 "%s: pTxPowerParams received NULL " ,__func__);
6186 VOS_ASSERT(0);
6187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6188 vos_mem_free(pWdaParams);
6189 return ;
6190 }
6191
6192 /*need to free memory for the pointers used in the
6193 WDA Process.Set Max Tx Power Req function*/
6194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6195 vos_mem_free(pWdaParams);
6196
6197 /* send response to UMAC*/
6198 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6199 return;
6200}
6201
6202/*
6203 * FUNCTION: WDA_ProcessSetTxPowerReq
6204 * Request to WDI to send set Tx Power Request
6205 */
6206 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6207 tSirSetTxPowerReq *txPowerParams)
6208{
6209 WDI_Status status = WDI_STATUS_SUCCESS;
6210 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6211 tWDA_ReqParams *pWdaParams = NULL;
6212
6213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6214 "------> %s ", __func__);
6215
6216 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6217 sizeof(WDI_SetTxPowerParamsType));
6218 if(NULL == wdiSetTxPowerParams)
6219 {
6220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6221 "%s: VOS MEM Alloc Failure", __func__);
6222 VOS_ASSERT(0);
6223 return VOS_STATUS_E_NOMEM;
6224 }
6225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6226 if(NULL == pWdaParams)
6227 {
6228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6229 "%s: VOS MEM Alloc Failure", __func__);
6230 vos_mem_free(wdiSetTxPowerParams);
6231 VOS_ASSERT(0);
6232 return VOS_STATUS_E_NOMEM;
6233 }
6234 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6235 txPowerParams->bssIdx;
6236 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6237 txPowerParams->mwPower;
6238 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6239 pWdaParams->pWdaContext = pWDA;
6240 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6241 /* store Params pass it to WDI */
6242 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6243 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6244 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6245 if(IS_WDI_STATUS_FAILURE(status))
6246 {
6247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6248 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6250 vos_mem_free(pWdaParams);
6251 /* send response to UMAC*/
6252 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6253 }
6254 return CONVERT_WDI2VOS_STATUS(status);
6255}
6256
Jeff Johnson295189b2012-06-20 16:38:30 -07006257/*
6258 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6259 * Free the memory. No need to send any response to PE in this case
6260 */
6261void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6262{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006263 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6264
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006267
6268 if(NULL == pWdaParams)
6269 {
6270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006271 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006272 VOS_ASSERT(0) ;
6273 return ;
6274 }
6275
6276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6277 vos_mem_free(pWdaParams->wdaMsgParam) ;
6278 vos_mem_free(pWdaParams);
6279
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 /*
6281 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6282 * so just free the request param here
6283 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 return ;
6285}
6286
Jeff Johnson295189b2012-06-20 16:38:30 -07006287/*
6288 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6289 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6290 */
6291VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6292 tP2pPsParams *pP2pPsConfigParams)
6293{
6294 WDI_Status status = WDI_STATUS_SUCCESS ;
6295 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6296 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6297 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006298 tWDA_ReqParams *pWdaParams = NULL;
6299
Jeff Johnson295189b2012-06-20 16:38:30 -07006300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 if(NULL == wdiSetP2PGONOAReqParam)
6303 {
6304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 VOS_ASSERT(0);
6307 return VOS_STATUS_E_NOMEM;
6308 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006309
6310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6311 if(NULL == pWdaParams)
6312 {
6313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006314 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006315 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006316 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006317 VOS_ASSERT(0);
6318 return VOS_STATUS_E_NOMEM;
6319 }
6320
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6322 pP2pPsConfigParams->opp_ps;
6323 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6324 pP2pPsConfigParams->ctWindow;
6325 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6326 pP2pPsConfigParams->count;
6327 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6328 pP2pPsConfigParams->duration;
6329 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6330 pP2pPsConfigParams->interval;
6331 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6332 pP2pPsConfigParams->single_noa_duration;
6333 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6334 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006335
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6337 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006338 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6339
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006341 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6342 pWdaParams->pWdaContext = pWDA;
6343
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006345 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6346
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 if(IS_WDI_STATUS_FAILURE(status))
6348 {
6349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6350 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6352 vos_mem_free(pWdaParams->wdaMsgParam);
6353 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 return CONVERT_WDI2VOS_STATUS(status);
6356
Jeff Johnson295189b2012-06-20 16:38:30 -07006357}
Jeff Johnson295189b2012-06-20 16:38:30 -07006358#ifdef WLAN_FEATURE_VOWIFI_11R
6359/*
6360 * FUNCTION: WDA_AggrAddTSReqCallback
6361 * send ADD AGGREGATED TS RSP back to PE
6362 */
6363void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6364{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6366 tWDA_CbContext *pWDA;
6367 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006370 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006371 if(NULL == pWdaParams)
6372 {
6373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006374 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006375 VOS_ASSERT(0) ;
6376 return ;
6377 }
6378
6379 pWDA = pWdaParams->pWdaContext;
6380 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006381
6382 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6383 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006384 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006387
6388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6389 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 return ;
6391}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006392/*
6393 * FUNCTION: WDA_ProcessAddTSReq
6394 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6395 */
6396VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6397 tAggrAddTsParams *pAggrAddTsReqParams)
6398{
6399 WDI_Status status = WDI_STATUS_SUCCESS ;
6400 int i;
6401 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006402 tWDA_ReqParams *pWdaParams = NULL;
6403
6404
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6408 sizeof(WDI_AggrAddTSReqParamsType)) ;
6409 if(NULL == wdiAggrAddTSReqParam)
6410 {
6411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 VOS_ASSERT(0);
6414 return VOS_STATUS_E_NOMEM;
6415 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006416
6417
6418 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6419 if(NULL == pWdaParams)
6420 {
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006422 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006423 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006424 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006425 VOS_ASSERT(0);
6426 return VOS_STATUS_E_NOMEM;
6427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6429 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6430 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6432 {
6433 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6434 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6435 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6437 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6438 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6439 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6440 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6441 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6442 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6443 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6444 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6445 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6447 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6449 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6450 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6451 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6453 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6455 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6456 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6457 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6458 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6459 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6460 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6461 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6462 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6463 pAggrAddTsReqParams->tspec[i].inactInterval;
6464 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6465 pAggrAddTsReqParams->tspec[i].suspendInterval;
6466 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6467 pAggrAddTsReqParams->tspec[i].svcStartTime;
6468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6469 pAggrAddTsReqParams->tspec[i].minDataRate;
6470 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6471 pAggrAddTsReqParams->tspec[i].meanDataRate;
6472 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6473 pAggrAddTsReqParams->tspec[i].peakDataRate;
6474 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6475 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6476 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6477 pAggrAddTsReqParams->tspec[i].delayBound;
6478 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6479 pAggrAddTsReqParams->tspec[i].minPhyRate;
6480 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6481 pAggrAddTsReqParams->tspec[i].surplusBw;
6482 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6483 pAggrAddTsReqParams->tspec[i].mediumTime;
6484 }
6485
6486 /* TODO: tAggrAddTsParams doesn't have the following fields */
6487#if 0
6488 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6489 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6490 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6491 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6492#endif
6493 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6494
6495 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006496 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006498 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6499
6500 pWdaParams->pWdaContext = pWDA;
6501
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006503 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6504
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 if(IS_WDI_STATUS_FAILURE(status))
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6508 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6510 vos_mem_free(pWdaParams);
6511
6512 /* send the failure response back to PE*/
6513 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6514 {
6515 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6516 }
6517
6518 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6519 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006521 return CONVERT_WDI2VOS_STATUS(status) ;
6522}
6523#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006524/*
6525 * FUNCTION: WDA_EnterImpsReqCallback
6526 * send Enter IMPS RSP back to PE
6527 */
6528void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6529{
6530 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006533 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 return ;
6535}
Jeff Johnson295189b2012-06-20 16:38:30 -07006536/*
6537 * FUNCTION: WDA_ProcessEnterImpsReq
6538 * Request to WDI to Enter IMPS power state.
6539 */
6540VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6541{
6542 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 if(IS_WDI_STATUS_FAILURE(status))
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6549 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006550 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 return CONVERT_WDI2VOS_STATUS(status) ;
6553}
Jeff Johnson295189b2012-06-20 16:38:30 -07006554/*
6555 * FUNCTION: WDA_ExitImpsReqCallback
6556 * send Exit IMPS RSP back to PE
6557 */
6558void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6559{
6560 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006562 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006563 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 return ;
6565}
Jeff Johnson295189b2012-06-20 16:38:30 -07006566/*
6567 * FUNCTION: WDA_ProcessExitImpsReq
6568 * Request to WDI to Exit IMPS power state.
6569 */
6570VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6571{
6572 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 if(IS_WDI_STATUS_FAILURE(status))
6577 {
6578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6579 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006580 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 return CONVERT_WDI2VOS_STATUS(status) ;
6583}
Jeff Johnson295189b2012-06-20 16:38:30 -07006584/*
6585 * FUNCTION: WDA_EnterBmpsReqCallback
6586 * send Enter BMPS RSP back to PE
6587 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006588void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006589{
6590 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6591 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006592 tEnterBmpsParams *pEnterBmpsRspParams;
6593
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006595 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 if(NULL == pWdaParams)
6597 {
6598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006599 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 VOS_ASSERT(0) ;
6601 return ;
6602 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006603
6604 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6605 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6606
6607 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006608 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006609
6610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006612 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6613
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 return ;
6615}
Jeff Johnson295189b2012-06-20 16:38:30 -07006616/*
6617 * FUNCTION: WDA_ProcessEnterBmpsReq
6618 * Request to WDI to Enter BMPS power state.
6619 */
6620VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6621 tEnterBmpsParams *pEnterBmpsReqParams)
6622{
6623 WDI_Status status = WDI_STATUS_SUCCESS;
6624 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6625 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006627 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006628 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006631 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 VOS_ASSERT(0);
6633 return VOS_STATUS_E_FAILURE;
6634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6636 if (NULL == wdiEnterBmpsReqParams)
6637 {
6638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006640 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006641 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6642 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 return VOS_STATUS_E_NOMEM;
6644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6646 if (NULL == pWdaParams)
6647 {
6648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 VOS_ASSERT(0);
6651 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006652 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6653 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 return VOS_STATUS_E_NOMEM;
6655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6657 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6658 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6659 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 // For CCX and 11R Roaming
6661 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6662 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6663 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6664 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006665
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 /* Store param pointer as passed in by caller */
6667 /* store Params pass it to WDI */
6668 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006669 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6672 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006673 if (IS_WDI_STATUS_FAILURE(status))
6674 {
6675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6676 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006678 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006680 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 return CONVERT_WDI2VOS_STATUS(status);
6683}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006684
6685
6686static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6687 WDI_Status wdiStatus,
6688 tExitBmpsParams *pExitBmpsReqParams)
6689{
6690 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6691
6692 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6693}
6694
6695
Jeff Johnson295189b2012-06-20 16:38:30 -07006696/*
6697 * FUNCTION: WDA_ExitBmpsReqCallback
6698 * send Exit BMPS RSP back to PE
6699 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006700void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006701{
6702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6703 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006704 tExitBmpsParams *pExitBmpsRspParams;
6705
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006707 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 if(NULL == pWdaParams)
6709 {
6710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006711 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 VOS_ASSERT(0) ;
6713 return ;
6714 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006715
6716 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6717 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6718
6719 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006720 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6723 vos_mem_free(pWdaParams) ;
6724
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006725 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 return ;
6727}
Jeff Johnson295189b2012-06-20 16:38:30 -07006728/*
6729 * FUNCTION: WDA_ProcessExitBmpsReq
6730 * Request to WDI to Exit BMPS power state.
6731 */
6732VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6733 tExitBmpsParams *pExitBmpsReqParams)
6734{
6735 WDI_Status status = WDI_STATUS_SUCCESS ;
6736 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6737 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6738 sizeof(WDI_ExitBmpsReqParamsType)) ;
6739 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006742 if(NULL == wdiExitBmpsReqParams)
6743 {
6744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006747 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 return VOS_STATUS_E_NOMEM;
6749 }
6750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6751 if(NULL == pWdaParams)
6752 {
6753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 VOS_ASSERT(0);
6756 vos_mem_free(wdiExitBmpsReqParams);
6757 return VOS_STATUS_E_NOMEM;
6758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006760
6761 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6762
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6764
6765 /* Store param pointer as passed in by caller */
6766 /* store Params pass it to WDI */
6767 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6768 pWdaParams->pWdaContext = pWDA;
6769 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6771 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 if(IS_WDI_STATUS_FAILURE(status))
6773 {
6774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6775 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6777 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006778 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 return CONVERT_WDI2VOS_STATUS(status) ;
6781}
Jeff Johnson295189b2012-06-20 16:38:30 -07006782/*
6783 * FUNCTION: WDA_EnterUapsdReqCallback
6784 * send Enter UAPSD RSP back to PE
6785 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006786void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006787{
6788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6789 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006790 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 if(NULL == pWdaParams)
6794 {
6795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 VOS_ASSERT(0) ;
6798 return ;
6799 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006800
6801 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6802 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6803
6804 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006805 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006806
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6808 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006809 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 return ;
6811}
Jeff Johnson295189b2012-06-20 16:38:30 -07006812/*
6813 * FUNCTION: WDA_ProcessEnterUapsdReq
6814 * Request to WDI to Enter UAPSD power state.
6815 */
6816VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6817 tUapsdParams *pEnterUapsdReqParams)
6818{
6819 WDI_Status status = WDI_STATUS_SUCCESS ;
6820 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6821 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6822 sizeof(WDI_EnterUapsdReqParamsType)) ;
6823 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 if(NULL == wdiEnterUapsdReqParams)
6827 {
6828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 VOS_ASSERT(0);
6831 return VOS_STATUS_E_NOMEM;
6832 }
6833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6834 if(NULL == pWdaParams)
6835 {
6836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 VOS_ASSERT(0);
6839 vos_mem_free(wdiEnterUapsdReqParams);
6840 return VOS_STATUS_E_NOMEM;
6841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6843 pEnterUapsdReqParams->beDeliveryEnabled;
6844 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6845 pEnterUapsdReqParams->beTriggerEnabled;
6846 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6847 pEnterUapsdReqParams->bkDeliveryEnabled;
6848 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6849 pEnterUapsdReqParams->bkTriggerEnabled;
6850 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6851 pEnterUapsdReqParams->viDeliveryEnabled;
6852 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6853 pEnterUapsdReqParams->viTriggerEnabled;
6854 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6855 pEnterUapsdReqParams->voDeliveryEnabled;
6856 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6857 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006858 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859
6860 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6861
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 /* Store param pointer as passed in by caller */
6863 /* store Params pass it to WDI */
6864 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6865 pWdaParams->pWdaContext = pWDA;
6866 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6868 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 if(IS_WDI_STATUS_FAILURE(status))
6870 {
6871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6872 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6873 vos_mem_free(pWdaParams->wdaMsgParam) ;
6874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6875 vos_mem_free(pWdaParams) ;
6876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 return CONVERT_WDI2VOS_STATUS(status) ;
6878}
Jeff Johnson295189b2012-06-20 16:38:30 -07006879/*
6880 * FUNCTION: WDA_ExitUapsdReqCallback
6881 * send Exit UAPSD RSP back to PE
6882 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006883void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006884{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006885
6886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6887 tWDA_CbContext *pWDA;
6888 tExitUapsdParams *pExitUapsdRspParams;
6889
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006892 if(NULL == pWdaParams)
6893 {
6894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006895 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006896 VOS_ASSERT(0);
6897 return;
6898 }
6899
6900 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6901 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6902
6903 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006904 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006905
6906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6907 vos_mem_free(pWdaParams) ;
6908
6909 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 return ;
6911}
Jeff Johnson295189b2012-06-20 16:38:30 -07006912/*
6913 * FUNCTION: WDA_ProcessExitUapsdReq
6914 * Request to WDI to Exit UAPSD power state.
6915 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006916VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6917 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006918{
6919 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006920 tWDA_ReqParams *pWdaParams ;
6921 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6922 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6923 sizeof(WDI_ExitUapsdReqParamsType)) ;
6924
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006927
6928 if(NULL == wdiExitUapsdReqParams)
6929 {
6930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006931 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006932 VOS_ASSERT(0);
6933 return VOS_STATUS_E_NOMEM;
6934 }
6935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6936 if(NULL == pWdaParams)
6937 {
6938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006939 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006940 VOS_ASSERT(0);
6941 vos_mem_free(wdiExitUapsdReqParams);
6942 return VOS_STATUS_E_NOMEM;
6943 }
6944
6945 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6946 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6947
6948 /* Store param pointer as passed in by caller */
6949 /* store Params pass it to WDI */
6950 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6951 pWdaParams->pWdaContext = pWDA;
6952 pWdaParams->wdaMsgParam = pExitUapsdParams;
6953
6954 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 if(IS_WDI_STATUS_FAILURE(status))
6956 {
6957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6958 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006959 vos_mem_free(pWdaParams->wdaMsgParam) ;
6960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6961 vos_mem_free(pWdaParams) ;
6962
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 return CONVERT_WDI2VOS_STATUS(status) ;
6965}
6966
Jeff Johnson295189b2012-06-20 16:38:30 -07006967/*
6968 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6969 *
6970 */
6971void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6972{
6973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006975 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 if(NULL == pWdaParams)
6977 {
6978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006979 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 VOS_ASSERT(0) ;
6981 return ;
6982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 if( pWdaParams != NULL )
6984 {
6985 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6986 {
6987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6988 }
6989 if( pWdaParams->wdaMsgParam != NULL )
6990 {
6991 vos_mem_free(pWdaParams->wdaMsgParam) ;
6992 }
6993 vos_mem_free(pWdaParams) ;
6994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 return ;
6996}
Jeff Johnson295189b2012-06-20 16:38:30 -07006997/*
6998 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6999 * Request to WDI to set the power save params at start.
7000 */
7001VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7002 tSirPowerSaveCfg *pPowerSaveCfg)
7003{
7004 WDI_Status status = WDI_STATUS_SUCCESS ;
7005 tHalCfg *tlvStruct = NULL ;
7006 tANI_U8 *tlvStructStart = NULL ;
7007 v_PVOID_t *configParam;
7008 tANI_U32 configParamSize;
7009 tANI_U32 *configDataValue;
7010 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7011 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7015 {
7016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007017 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007019 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 return VOS_STATUS_E_FAILURE;
7021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7023 if (NULL == wdiPowerSaveCfg)
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007027 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007028 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 return VOS_STATUS_E_NOMEM;
7030 }
7031 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7032 if(NULL == pWdaParams)
7033 {
7034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007035 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 VOS_ASSERT(0);
7037 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007038 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 return VOS_STATUS_E_NOMEM;
7040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7042 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 if(NULL == configParam)
7044 {
7045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007046 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007047 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 vos_mem_free(pWdaParams);
7049 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007050 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 return VOS_STATUS_E_NOMEM;
7052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 vos_mem_set(configParam, configParamSize, 0);
7054 wdiPowerSaveCfg->pConfigBuffer = configParam;
7055 tlvStruct = (tHalCfg *)configParam;
7056 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7058 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7059 tlvStruct->length = sizeof(tANI_U32);
7060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7061 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7063 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7065 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7066 tlvStruct->length = sizeof(tANI_U32);
7067 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7068 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7070 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7072 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7073 tlvStruct->length = sizeof(tANI_U32);
7074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7075 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7077 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7079 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7080 tlvStruct->length = sizeof(tANI_U32);
7081 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7082 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7084 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7086 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7087 tlvStruct->length = sizeof(tANI_U32);
7088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7089 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7091 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7093 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7094 tlvStruct->length = sizeof(tANI_U32);
7095 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7096 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7098 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7100 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7101 tlvStruct->length = sizeof(tANI_U32);
7102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7103 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7105 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7107 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7108 tlvStruct->length = sizeof(tANI_U32);
7109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7110 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7111 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7112 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7114 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7115 tlvStruct->length = sizeof(tANI_U32);
7116 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7117 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7118 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7119 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7121 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7122 tlvStruct->length = sizeof(tANI_U32);
7123 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7124 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7126 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7128 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7129 tlvStruct->length = sizeof(tANI_U32);
7130 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7131 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7133 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 /* store Params pass it to WDI */
7137 pWdaParams->wdaMsgParam = configParam;
7138 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7139 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7141 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 if(IS_WDI_STATUS_FAILURE(status))
7143 {
7144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7145 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7146 vos_mem_free(pWdaParams->wdaMsgParam);
7147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7148 vos_mem_free(pWdaParams);
7149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 return CONVERT_WDI2VOS_STATUS(status);
7152}
Jeff Johnson295189b2012-06-20 16:38:30 -07007153/*
7154 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7155 *
7156 */
7157void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
7158{
7159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007161 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7163 vos_mem_free(pWdaParams);
7164
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 return ;
7166}
Jeff Johnson295189b2012-06-20 16:38:30 -07007167/*
7168 * FUNCTION: WDA_SetUapsdAcParamsReq
7169 * Request to WDI to set the UAPSD params for an ac (sta mode).
7170 */
7171VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7172 tUapsdInfo *pUapsdInfo)
7173{
7174 WDI_Status status = WDI_STATUS_SUCCESS;
7175 tWDA_CbContext *pWDA = NULL ;
7176 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7177 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7178 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 if(NULL == wdiUapsdParams)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_ASSERT(0);
7187 return VOS_STATUS_E_NOMEM;
7188 }
7189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7190 if(NULL == pWdaParams)
7191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 VOS_ASSERT(0);
7195 vos_mem_free(wdiUapsdParams);
7196 return VOS_STATUS_E_NOMEM;
7197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7199 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7200 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7201 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7202 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7203 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 pWdaParams->pWdaContext = pWDA;
7207 /* Store param pointer as passed in by caller */
7208 pWdaParams->wdaMsgParam = pUapsdInfo;
7209 /* store Params pass it to WDI */
7210 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7212 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7213 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 if(IS_WDI_STATUS_FAILURE(status))
7215 {
7216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7217 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7219 vos_mem_free(pWdaParams);
7220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7222 return VOS_STATUS_SUCCESS;
7223 else
7224 return VOS_STATUS_E_FAILURE;
7225
Jeff Johnson295189b2012-06-20 16:38:30 -07007226}
7227/*
7228 * FUNCTION: WDA_ClearUapsdAcParamsReq
7229 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7230 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7231 * and again enter the UPASD with the modified params. Hence the disable
7232 * function was kept empty.
7233 *
7234 */
7235VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7236{
7237 /* do nothing */
7238 return VOS_STATUS_SUCCESS;
7239}
Jeff Johnson295189b2012-06-20 16:38:30 -07007240/*
7241 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7242 *
7243 */
7244void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7245{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7247
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007250
7251 if(NULL == pWdaParams)
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007255 VOS_ASSERT(0) ;
7256 return ;
7257 }
7258
7259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7260 vos_mem_free(pWdaParams->wdaMsgParam);
7261 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 //print a msg, nothing else to do
7264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7265 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 return ;
7267}
Jeff Johnson295189b2012-06-20 16:38:30 -07007268/*
7269 * FUNCTION: WDA_UpdateUapsdParamsReq
7270 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7271 */
7272VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7273 tUpdateUapsdParams* pUpdateUapsdInfo)
7274{
7275 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007276 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7278 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7279 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007280 tWDA_ReqParams *pWdaParams = NULL;
7281
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 if(NULL == wdiUpdateUapsdParams)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7292 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7293 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007294
7295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7296 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 {
7298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007300 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007301 vos_mem_free(pUpdateUapsdInfo);
7302 vos_mem_free(wdiUpdateUapsdParams);
7303 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007306 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007308 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7309 pWdaParams->pWdaContext = pWDA;
7310
Jeff Johnson43971f52012-07-17 12:26:56 -07007311 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007312 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7313 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007314
Jeff Johnson43971f52012-07-17 12:26:56 -07007315 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 {
7317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7318 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007319 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7321 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007322 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007324 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007325}
Jeff Johnson295189b2012-06-20 16:38:30 -07007326/*
7327 * FUNCTION: WDA_ConfigureRxpFilterCallback
7328 *
7329 */
7330void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7331{
7332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007334 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007335 if(WDI_STATUS_SUCCESS != wdiStatus)
7336 {
7337 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007338 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007340 if(NULL == pWdaParams)
7341 {
7342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 VOS_ASSERT(0) ;
7345 return ;
7346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7348 vos_mem_free(pWdaParams->wdaMsgParam);
7349 vos_mem_free(pWdaParams);
7350 return ;
7351}
Jeff Johnson295189b2012-06-20 16:38:30 -07007352/*
7353 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7354 *
7355 */
7356VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7357 tSirWlanSetRxpFilters *pWlanSuspendParam)
7358{
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007360 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7362 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7363 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7364 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 if(NULL == wdiRxpFilterParams)
7368 {
7369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 VOS_ASSERT(0);
7372 vos_mem_free(pWlanSuspendParam);
7373 return VOS_STATUS_E_NOMEM;
7374 }
7375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7376 if(NULL == pWdaParams)
7377 {
7378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 VOS_ASSERT(0);
7381 vos_mem_free(wdiRxpFilterParams);
7382 vos_mem_free(pWlanSuspendParam);
7383 return VOS_STATUS_E_NOMEM;
7384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7386 pWlanSuspendParam->setMcstBcstFilter;
7387 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7388 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7389
7390 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 pWdaParams->pWdaContext = pWDA;
7392 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7393 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007394 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7396 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007397 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 {
7399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7400 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007401 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7403 vos_mem_free(pWdaParams->wdaMsgParam);
7404 vos_mem_free(pWdaParams);
7405 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007406 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007407}
Jeff Johnson295189b2012-06-20 16:38:30 -07007408/*
7409 * FUNCTION: WDA_WdiIndicationCallback
7410 *
7411 */
7412void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7413 void* pUserData)
7414{
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417}
Jeff Johnson295189b2012-06-20 16:38:30 -07007418/*
7419 * FUNCTION: WDA_ProcessWlanSuspendInd
7420 *
7421 */
7422VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7423 tSirWlanSuspendParam *pWlanSuspendParam)
7424{
7425 WDI_Status wdiStatus;
7426 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7430 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7431 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7432 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7435 if(WDI_STATUS_PENDING == wdiStatus)
7436 {
7437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007438 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 }
7440 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7441 {
7442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007443 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 vos_mem_free(pWlanSuspendParam);
7446 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7447}
7448
Chet Lanctot186b5732013-03-18 10:26:30 -07007449#ifdef WLAN_FEATURE_11W
7450/*
7451 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7452 *
7453 */
7454VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7455 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7456{
7457 WDI_Status wdiStatus;
7458 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7460 "------> %s ", __func__);
7461
7462 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7463 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7464 sizeof(tSirMacAddr));
7465
7466 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7467 wdiExclUnencryptParams.pUserData = pWDA;
7468
7469 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7470 if(WDI_STATUS_PENDING == wdiStatus)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7473 "Pending received for %s:%d ", __func__, __LINE__ );
7474 }
7475 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7476 {
7477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7478 "Failure in %s:%d ", __func__, __LINE__ );
7479 }
7480 vos_mem_free(pExclUnencryptParam);
7481 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7482}
7483#endif
7484
Jeff Johnson295189b2012-06-20 16:38:30 -07007485/*
7486 * FUNCTION: WDA_ProcessWlanResumeCallback
7487 *
7488 */
7489void WDA_ProcessWlanResumeCallback(
7490 WDI_SuspendResumeRspParamsType *resumeRspParams,
7491 void* pUserData)
7492{
7493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007495 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 if(NULL == pWdaParams)
7497 {
7498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007499 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 VOS_ASSERT(0) ;
7501 return ;
7502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7504 {
7505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007506 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7509 vos_mem_free(pWdaParams->wdaMsgParam);
7510 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 return ;
7512}
Jeff Johnson295189b2012-06-20 16:38:30 -07007513/*
7514 * FUNCTION: WDA_ProcessWlanResumeReq
7515 *
7516 */
7517VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7518 tSirWlanResumeParam *pWlanResumeParam)
7519{
7520 WDI_Status wdiStatus;
7521 WDI_ResumeParamsType *wdiResumeParams =
7522 (WDI_ResumeParamsType *)vos_mem_malloc(
7523 sizeof(WDI_ResumeParamsType) ) ;
7524 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 if(NULL == wdiResumeParams)
7528 {
7529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 VOS_ASSERT(0);
7532 return VOS_STATUS_E_NOMEM;
7533 }
7534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7535 if(NULL == pWdaParams)
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 VOS_ASSERT(0);
7540 vos_mem_free(wdiResumeParams);
7541 return VOS_STATUS_E_NOMEM;
7542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7544 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 wdiResumeParams->wdiReqStatusCB = NULL;
7547 pWdaParams->wdaMsgParam = pWlanResumeParam;
7548 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7549 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7551 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7552 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7554 {
7555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7556 "Failure in Host Resume REQ WDI API, free all the memory " );
7557 VOS_ASSERT(0);
7558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7559 vos_mem_free(pWdaParams->wdaMsgParam);
7560 vos_mem_free(pWdaParams);
7561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7563}
7564
Jeff Johnson295189b2012-06-20 16:38:30 -07007565/*
7566 * FUNCTION: WDA_SetBeaconFilterReqCallback
7567 *
7568 */
7569void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7570{
7571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007573 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 if(NULL == pWdaParams)
7575 {
7576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007577 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 VOS_ASSERT(0) ;
7579 return ;
7580 }
7581
7582 vos_mem_free(pWdaParams->wdaMsgParam) ;
7583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7584 vos_mem_free(pWdaParams) ;
7585 /*
7586 * No respone required for SetBeaconFilter req so just free the request
7587 * param here
7588 */
7589
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 return ;
7591}
Jeff Johnson295189b2012-06-20 16:38:30 -07007592/*
7593 * FUNCTION: WDA_SetBeaconFilterReq
7594 * Request to WDI to send the beacon filtering related information.
7595 */
7596VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7597 tBeaconFilterMsg* pBeaconFilterInfo)
7598{
7599 WDI_Status status = WDI_STATUS_SUCCESS;
7600 tANI_U8 *dstPtr, *srcPtr;
7601 tANI_U8 filterLength;
7602 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7603 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7604 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7605 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 if(NULL == wdiBeaconFilterInfo)
7609 {
7610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 VOS_ASSERT(0);
7613 return VOS_STATUS_E_NOMEM;
7614 }
7615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7616 if(NULL == pWdaParams)
7617 {
7618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 VOS_ASSERT(0);
7621 vos_mem_free(wdiBeaconFilterInfo);
7622 return VOS_STATUS_E_NOMEM;
7623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7625 pBeaconFilterInfo->beaconInterval;
7626 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7627 pBeaconFilterInfo->capabilityInfo;
7628 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7629 pBeaconFilterInfo->capabilityMask;
7630 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007631
7632 //Fill the BssIdx
7633 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7634
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 //Fill structure with info contained in the beaconFilterTable
7636 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7637 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7638 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7639 if(WDI_BEACON_FILTER_LEN < filterLength)
7640 {
7641 filterLength = WDI_BEACON_FILTER_LEN;
7642 }
7643 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7645 /* Store param pointer as passed in by caller */
7646 /* store Params pass it to WDI */
7647 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7648 pWdaParams->pWdaContext = pWDA;
7649 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7650
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7652 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 if(IS_WDI_STATUS_FAILURE(status))
7654 {
7655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7656 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7657 vos_mem_free(pWdaParams->wdaMsgParam) ;
7658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7659 vos_mem_free(pWdaParams) ;
7660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 return CONVERT_WDI2VOS_STATUS(status) ;
7662}
Jeff Johnson295189b2012-06-20 16:38:30 -07007663/*
7664 * FUNCTION: WDA_RemBeaconFilterReqCallback
7665 *
7666 */
7667void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7668{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7670
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007672 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007673
7674 if(NULL == pWdaParams)
7675 {
7676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007677 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007678 VOS_ASSERT(0) ;
7679 return ;
7680 }
7681
7682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7683 vos_mem_free(pWdaParams->wdaMsgParam);
7684 vos_mem_free(pWdaParams);
7685
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 //print a msg, nothing else to do
7687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7688 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 return ;
7690}
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 // TODO: PE does not have this feature for now implemented,
7692 // but the support for removing beacon filter exists between
7693 // HAL and FW. This function can be called whenever PE defines
7694 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007695/*
7696 * FUNCTION: WDA_RemBeaconFilterReq
7697 * Request to WDI to send the removal of beacon filtering related information.
7698 */
7699VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7700 tRemBeaconFilterMsg* pBeaconFilterInfo)
7701{
7702 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007703 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7705 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7706 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007707 tWDA_ReqParams *pWdaParams ;
7708
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007710 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 if(NULL == wdiBeaconFilterInfo)
7712 {
7713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 VOS_ASSERT(0);
7716 return VOS_STATUS_E_NOMEM;
7717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7719 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 //Fill structure with info contained in the ucRemIeId
7721 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7722 pBeaconFilterInfo->ucRemIeId,
7723 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7724 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007725
7726 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7727 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 {
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007732 vos_mem_free(wdiBeaconFilterInfo);
7733 vos_mem_free(pBeaconFilterInfo);
7734 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 }
7736
7737 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007738 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7741
7742 pWdaParams->pWdaContext = pWDA;
7743
Jeff Johnson43971f52012-07-17 12:26:56 -07007744 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007745 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007746 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 {
7748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7749 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007750 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7752 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007753 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007755 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007756}
Jeff Johnson295189b2012-06-20 16:38:30 -07007757/*
7758 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7759 *
7760 */
7761void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7762{
7763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007765 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 if(NULL == pWdaParams)
7767 {
7768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007769 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 VOS_ASSERT(0) ;
7771 return ;
7772 }
7773
7774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7775 vos_mem_free(pWdaParams) ;
7776
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 return ;
7778}
Jeff Johnson295189b2012-06-20 16:38:30 -07007779/*
7780 * FUNCTION: WDA_SetRSSIThresholdsReq
7781 * Request to WDI to set the RSSI thresholds (sta mode).
7782 */
7783VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7784{
7785 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007786 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 tWDA_CbContext *pWDA = NULL ;
7788 v_PVOID_t pVosContext = NULL;
7789 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7790 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7791 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7792 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007794 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 if(NULL == wdiRSSIThresholdsInfo)
7796 {
7797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 VOS_ASSERT(0);
7800 return VOS_STATUS_E_NOMEM;
7801 }
7802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7803 if(NULL == pWdaParams)
7804 {
7805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 VOS_ASSERT(0);
7808 vos_mem_free(wdiRSSIThresholdsInfo);
7809 return VOS_STATUS_E_NOMEM;
7810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7813 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7814 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7816 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7817 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7819 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7820 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7823 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7824
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 /* Store param pointer as passed in by caller */
7826 /* store Params pass it to WDI */
7827 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7828 pWdaParams->pWdaContext = pWDA;
7829 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007830 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007832 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 {
7834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7835 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007836 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7838 vos_mem_free(pWdaParams) ;
7839 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007840 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007841
7842}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007843/*
Yue Madb90ac12013-04-04 13:39:13 -07007844 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 *
7846 */
Yue Madb90ac12013-04-04 13:39:13 -07007847void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007848{
7849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7850
7851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007852 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 if(NULL == pWdaParams)
7854 {
7855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007856 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 VOS_ASSERT(0) ;
7858 return ;
7859 }
7860
7861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7862 vos_mem_free(pWdaParams->wdaMsgParam);
7863 vos_mem_free(pWdaParams) ;
7864
7865 //print a msg, nothing else to do
7866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07007867 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 return ;
7869}
Jeff Johnson295189b2012-06-20 16:38:30 -07007870/*
Yue Madb90ac12013-04-04 13:39:13 -07007871 * FUNCTION: WDA_HostOffloadReqCallback
7872 *
7873 */
7874void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
7875{
7876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7877
7878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7879 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7880
7881 if(NULL == pWdaParams)
7882 {
7883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7884 "%s: Invalid pWdaParams pointer", __func__);
7885 VOS_ASSERT(0);
7886 return;
7887 }
7888
7889 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7890 {
7891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7892 vos_mem_free(pWdaParams->wdaMsgParam);
7893 vos_mem_free(pWdaParams);
7894 }
7895
7896 return;
7897}
7898/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 * FUNCTION: WDA_ProcessHostOffloadReq
7900 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7901 * to broadcast traffic (sta mode).
7902 */
7903VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7904 tSirHostOffloadReq *pHostOffloadParams)
7905{
7906 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007907 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7909 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7910 sizeof(WDI_HostOffloadReqParamsType)) ;
7911 tWDA_ReqParams *pWdaParams ;
7912
7913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007914 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007915
7916 if(NULL == wdiHostOffloadInfo)
7917 {
7918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 VOS_ASSERT(0);
7921 return VOS_STATUS_E_NOMEM;
7922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7924 if(NULL == pWdaParams)
7925 {
7926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 VOS_ASSERT(0);
7929 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007930 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 return VOS_STATUS_E_NOMEM;
7932 }
7933
7934 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7935 pHostOffloadParams->offloadType;
7936 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7937 pHostOffloadParams->enableOrDisable;
7938
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007939 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7940 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7941
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7943 {
7944 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7945 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7946 pHostOffloadParams->params.hostIpv4Addr,
7947 4);
7948 break;
7949 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7950 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7951 pHostOffloadParams->params.hostIpv6Addr,
7952 16);
7953 break;
7954 case SIR_IPV6_NS_OFFLOAD:
7955 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7956 pHostOffloadParams->params.hostIpv6Addr,
7957 16);
7958
7959#ifdef WLAN_NS_OFFLOAD
7960 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7961 {
7962 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7963 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7964 16);
7965 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7966 }
7967 else
7968 {
7969 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7970 }
7971
7972 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7973 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7974 16);
7975 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7976 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7977 6);
7978
7979 //Only two are supported so let's go through them without a loop
7980 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7981 {
7982 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7983 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7984 16);
7985 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7986 }
7987 else
7988 {
7989 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7990 }
7991
7992 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7993 {
7994 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7995 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7996 16);
7997 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7998 }
7999 else
8000 {
8001 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8002 }
8003 break;
8004#endif //WLAN_NS_OFFLOAD
8005 default:
8006 {
8007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8008 "No Handling for Offload Type %x in WDA "
8009 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8010 //WDA_VOS_ASSERT(0) ;
8011 }
8012 }
Yue Madb90ac12013-04-04 13:39:13 -07008013 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8014 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008015
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008017 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 /* store Params pass it to WDI */
8019 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8020 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008021
Jeff Johnson295189b2012-06-20 16:38:30 -07008022
Jeff Johnson43971f52012-07-17 12:26:56 -07008023 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008024 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008025
Jeff Johnson43971f52012-07-17 12:26:56 -07008026 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8029 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008030 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8032 vos_mem_free(pWdaParams->wdaMsgParam);
8033 vos_mem_free(pWdaParams) ;
8034 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008035 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008036
8037}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008038/*
8039 * FUNCTION: WDA_KeepAliveReqCallback
8040 *
8041 */
8042void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
8043{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8045
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008047 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008048
8049 if(NULL == pWdaParams)
8050 {
8051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008052 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008053 VOS_ASSERT(0) ;
8054 return ;
8055 }
8056
8057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8058 vos_mem_free(pWdaParams->wdaMsgParam);
8059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 //print a msg, nothing else to do
8062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8063 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 return ;
8065}
Jeff Johnson295189b2012-06-20 16:38:30 -07008066/*
8067 * FUNCTION: WDA_ProcessKeepAliveReq
8068 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8069 * wakeup due to broadcast traffic (sta mode).
8070 */
8071VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8072 tSirKeepAliveReq *pKeepAliveParams)
8073{
8074 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008075 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8077 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8078 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008079 tWDA_ReqParams *pWdaParams;
8080
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008082 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 if(NULL == wdiKeepAliveInfo)
8084 {
8085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008088 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 return VOS_STATUS_E_NOMEM;
8090 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008091
8092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8093 if(NULL == pWdaParams)
8094 {
8095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008096 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008097 VOS_ASSERT(0);
8098 vos_mem_free(wdiKeepAliveInfo);
8099 vos_mem_free(pKeepAliveParams);
8100 return VOS_STATUS_E_NOMEM;
8101 }
8102
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8104 pKeepAliveParams->packetType;
8105 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8106 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008107
8108 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8109 pKeepAliveParams->bssId,
8110 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008111
8112 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8113 {
8114 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8115 pKeepAliveParams->hostIpv4Addr,
8116 SIR_IPV4_ADDR_LEN);
8117 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8118 pKeepAliveParams->destIpv4Addr,
8119 SIR_IPV4_ADDR_LEN);
8120 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8121 pKeepAliveParams->destMacAddr,
8122 SIR_MAC_ADDR_LEN);
8123 }
8124 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8125 {
8126 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8127 SIR_IPV4_ADDR_LEN,
8128 0);
8129 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8130 SIR_IPV4_ADDR_LEN,
8131 0);
8132 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8133 SIR_MAC_ADDR_LEN,
8134 0);
8135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008137
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008139 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008141 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8142 pWdaParams->pWdaContext = pWDA;
8143
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8145 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8146 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8147 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8148 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8150 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8151 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8152 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8153 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8155 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8156 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8157 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8158 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8159 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8160 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8161 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8163 "TimePeriod %d PacketType %d",
8164 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8165 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008166 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008167 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
8168
Jeff Johnson43971f52012-07-17 12:26:56 -07008169 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 {
8171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8172 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008173 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8175 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008176 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008178 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008179
8180}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008181/*
8182 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8183 *
8184 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008185void WDA_WowlAddBcPtrnReqCallback(
8186 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8187 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008188{
8189 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008191 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 if(NULL == pWdaParams)
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 VOS_ASSERT(0) ;
8197 return ;
8198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8200 vos_mem_free(pWdaParams->wdaMsgParam);
8201 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008202 return ;
8203}
Jeff Johnson295189b2012-06-20 16:38:30 -07008204/*
8205 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8206 * Request to WDI to add WOWL Bcast pattern
8207 */
8208VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8209 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8210{
8211 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008212 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8214 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8215 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8216 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 if(NULL == wdiWowlAddBcPtrnInfo)
8220 {
8221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 VOS_ASSERT(0);
8224 return VOS_STATUS_E_NOMEM;
8225 }
8226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8227 if(NULL == pWdaParams)
8228 {
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 VOS_ASSERT(0);
8232 vos_mem_free(wdiWowlAddBcPtrnInfo);
8233 return VOS_STATUS_E_NOMEM;
8234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8236 pWowlAddBcPtrnParams->ucPatternId;
8237 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8238 pWowlAddBcPtrnParams->ucPatternByteOffset;
8239 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8240 pWowlAddBcPtrnParams->ucPatternMaskSize;
8241 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8242 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8244 {
8245 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8246 pWowlAddBcPtrnParams->ucPattern,
8247 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8248 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8249 pWowlAddBcPtrnParams->ucPatternMask,
8250 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8251 }
8252 else
8253 {
8254 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8255 pWowlAddBcPtrnParams->ucPattern,
8256 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8257 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8258 pWowlAddBcPtrnParams->ucPatternMask,
8259 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8260
8261 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8262 pWowlAddBcPtrnParams->ucPatternExt,
8263 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8264 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8265 pWowlAddBcPtrnParams->ucPatternMaskExt,
8266 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8267 }
8268
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008269 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8270 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8271
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 /* Store param pointer as passed in by caller */
8274 /* store Params pass it to WDI */
8275 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8276 pWdaParams->pWdaContext = pWDA;
8277 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008278 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008280 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 {
8282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8283 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008284 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 vos_mem_free(pWdaParams->wdaMsgParam) ;
8286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8287 vos_mem_free(pWdaParams) ;
8288 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008289 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008290
8291}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008292/*
8293 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8294 *
8295 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008296void WDA_WowlDelBcPtrnReqCallback(
8297 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8298 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008299{
8300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008302 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 if(NULL == pWdaParams)
8304 {
8305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 VOS_ASSERT(0) ;
8308 return ;
8309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8311 vos_mem_free(pWdaParams->wdaMsgParam);
8312 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 return ;
8314}
Jeff Johnson295189b2012-06-20 16:38:30 -07008315/*
8316 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8317 * Request to WDI to delete WOWL Bcast pattern
8318 */
8319VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8320 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8321{
8322 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008323 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8325 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8326 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8327 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008329 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 if(NULL == wdiWowlDelBcPtrnInfo)
8331 {
8332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 VOS_ASSERT(0);
8335 return VOS_STATUS_E_NOMEM;
8336 }
8337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8338 if(NULL == pWdaParams)
8339 {
8340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 VOS_ASSERT(0);
8343 vos_mem_free(wdiWowlDelBcPtrnInfo);
8344 return VOS_STATUS_E_NOMEM;
8345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8347 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008348
8349 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8350 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8351
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 /* Store param pointer as passed in by caller */
8354 /* store Params pass it to WDI */
8355 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8356 pWdaParams->pWdaContext = pWDA;
8357 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008358 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008360 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 {
8362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8363 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008364 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 vos_mem_free(pWdaParams->wdaMsgParam) ;
8366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8367 vos_mem_free(pWdaParams) ;
8368 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008369 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008370
8371}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008372/*
8373 * FUNCTION: WDA_WowlEnterReqCallback
8374 *
8375 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008376void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008377{
8378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8379 tWDA_CbContext *pWDA;
8380 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 if(NULL == pWdaParams)
8384 {
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 VOS_ASSERT(0) ;
8388 return ;
8389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8391 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8392
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008393 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8394
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8396 vos_mem_free(pWdaParams) ;
8397
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008398 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008399 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 return ;
8402}
Jeff Johnson295189b2012-06-20 16:38:30 -07008403/*
8404 * FUNCTION: WDA_ProcessWowlEnterReq
8405 * Request to WDI to enter WOWL
8406 */
8407VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8408 tSirHalWowlEnterParams *pWowlEnterParams)
8409{
8410 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008411 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8413 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8414 sizeof(WDI_WowlEnterReqParamsType)) ;
8415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 if(NULL == wdiWowlEnterInfo)
8419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 VOS_ASSERT(0);
8423 return VOS_STATUS_E_NOMEM;
8424 }
8425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8426 if(NULL == pWdaParams)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_ASSERT(0);
8431 vos_mem_free(wdiWowlEnterInfo);
8432 return VOS_STATUS_E_NOMEM;
8433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8435 pWowlEnterParams->magicPtrn,
8436 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8438 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8440 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8442 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8444 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8446 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8448 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8450 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8452 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008453#ifdef WLAN_WAKEUP_EVENTS
8454 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8455 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8456
8457 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8458 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8459
8460 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8461 pWowlEnterParams->ucWowNetScanOffloadMatch;
8462
8463 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8464 pWowlEnterParams->ucWowGTKRekeyError;
8465
8466 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8467 pWowlEnterParams->ucWoWBSSConnLoss;
8468#endif // WLAN_WAKEUP_EVENTS
8469
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008470 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8471 pWowlEnterParams->bssIdx;
8472
Jeff Johnson295189b2012-06-20 16:38:30 -07008473 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008474 /* Store param pointer as passed in by caller */
8475 /* store Params pass it to WDI */
8476 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8477 pWdaParams->pWdaContext = pWDA;
8478 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008479 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008481 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8484 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008485 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008486 vos_mem_free(pWdaParams->wdaMsgParam) ;
8487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8488 vos_mem_free(pWdaParams) ;
8489 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008490 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008491
8492}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008493/*
8494 * FUNCTION: WDA_WowlExitReqCallback
8495 *
8496 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008497void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008498{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8500 tWDA_CbContext *pWDA;
8501 tSirHalWowlExitParams *pWowlExitParams;
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008503 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008504 if(NULL == pWdaParams)
8505 {
8506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008507 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008508 VOS_ASSERT(0) ;
8509 return ;
8510 }
8511 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8512 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8513
8514 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008515 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008516
8517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8518 vos_mem_free(pWdaParams) ;
8519
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008521 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008522 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008523 return ;
8524}
Jeff Johnson295189b2012-06-20 16:38:30 -07008525/*
8526 * FUNCTION: WDA_ProcessWowlExitReq
8527 * Request to WDI to add WOWL Bcast pattern
8528 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008529VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8530 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008531{
8532 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008533 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008534 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8535 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8536 sizeof(WDI_WowlExitReqParamsType)) ;
8537 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008539 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008540 if(NULL == wdiWowlExitInfo)
8541 {
8542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008543 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008544 VOS_ASSERT(0);
8545 return VOS_STATUS_E_NOMEM;
8546 }
8547 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8548 if(NULL == pWdaParams)
8549 {
8550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008551 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008552 VOS_ASSERT(0);
8553 vos_mem_free(wdiWowlExitInfo);
8554 return VOS_STATUS_E_NOMEM;
8555 }
8556
8557 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8558 pWowlExitParams->bssIdx;
8559
8560 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8561
8562 /* Store param pointer as passed in by caller */
8563 /* store Params pass it to WDI */
8564 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8565 pWdaParams->pWdaContext = pWDA;
8566 pWdaParams->wdaMsgParam = pWowlExitParams;
8567
8568 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8569 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008570
Jeff Johnson43971f52012-07-17 12:26:56 -07008571 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 {
8573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8574 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008575 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8577 vos_mem_free(pWdaParams->wdaMsgParam);
8578 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008580 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008581}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008582/*
8583 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8584 * Request to WDI to determine whether a given station is capable of
8585 * using HW-based frame translation
8586 */
8587v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8588 tANI_U8 staIdx)
8589{
8590 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8591}
Jeff Johnson295189b2012-06-20 16:38:30 -07008592/*
8593 * FUNCTION: WDA_NvDownloadReqCallback
8594 * send NV Download RSP back to PE
8595 */
8596void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8597 void* pUserData)
8598{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008599
8600 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8601 tWDA_CbContext *pWDA;
8602
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008604 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008605
8606 if(NULL == pWdaParams)
8607 {
8608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008609 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008610 VOS_ASSERT(0) ;
8611 return ;
8612 }
8613
8614 pWDA = pWdaParams->pWdaContext;
8615
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8618 vos_mem_free(pWdaParams);
8619
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 return ;
8622}
Jeff Johnson295189b2012-06-20 16:38:30 -07008623/*
8624 * FUNCTION: WDA_ProcessNvDownloadReq
8625 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8626 */
8627VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8628{
8629 /* Initialize the local Variables*/
8630 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8631 v_VOID_t *pNvBuffer=NULL;
8632 v_SIZE_t bufferSize = 0;
8633 WDI_Status status = WDI_STATUS_E_FAILURE;
8634 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008635 tWDA_ReqParams *pWdaParams ;
8636
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008638 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 if(NULL == pWDA)
8640 {
8641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008642 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008643 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 return VOS_STATUS_E_FAILURE;
8645 }
8646
8647 /* Get the NV structure base address and size from VOS */
8648 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8650 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 if(NULL == wdiNvDownloadReqParam)
8652 {
8653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 VOS_ASSERT(0);
8656 return VOS_STATUS_E_NOMEM;
8657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 /* Copy Params to wdiNvDownloadReqParam*/
8659 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8660 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008661
8662 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8663 if(NULL == pWdaParams)
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008666 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008667 VOS_ASSERT(0);
8668 vos_mem_free(wdiNvDownloadReqParam);
8669 return VOS_STATUS_E_NOMEM;
8670 }
8671
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008673 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8674 pWdaParams->wdaMsgParam = NULL;
8675 pWdaParams->pWdaContext = pWDA;
8676
8677
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008679
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008681 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8682
Jeff Johnson295189b2012-06-20 16:38:30 -07008683 if(IS_WDI_STATUS_FAILURE(status))
8684 {
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8686 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8688 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691}
8692/*
8693 * FUNCTION: WDA_FlushAcReqCallback
8694 * send Flush AC RSP back to TL
8695 */
8696void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8697{
8698 vos_msg_t wdaMsg = {0} ;
8699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8700 tFlushACReq *pFlushACReqParams;
8701 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 if(NULL == pWdaParams)
8705 {
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008707 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 VOS_ASSERT(0) ;
8709 return ;
8710 }
8711
8712 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8713 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8714 if(NULL == pFlushACRspParams)
8715 {
8716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008719 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 return ;
8721 }
8722 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8723 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8724 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8725 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8726 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008727 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 vos_mem_free(pWdaParams->wdaMsgParam) ;
8729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8730 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8732 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8733 // POST message to TL
8734 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8735
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 return ;
8737}
Jeff Johnson295189b2012-06-20 16:38:30 -07008738/*
8739 * FUNCTION: WDA_ProcessFlushAcReq
8740 * Request to WDI to Update the DELBA REQ params.
8741 */
8742VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8743 tFlushACReq *pFlushAcReqParams)
8744{
8745 WDI_Status status = WDI_STATUS_SUCCESS ;
8746 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8747 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8748 sizeof(WDI_FlushAcReqParamsType)) ;
8749 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 if(NULL == wdiFlushAcReqParam)
8751 {
8752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008754 VOS_ASSERT(0);
8755 return VOS_STATUS_E_NOMEM;
8756 }
8757 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8758 if(NULL == pWdaParams)
8759 {
8760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 VOS_ASSERT(0);
8763 vos_mem_free(wdiFlushAcReqParam);
8764 return VOS_STATUS_E_NOMEM;
8765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8769 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8770 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8771 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 /* Store Flush AC pointer, as this will be used for response */
8773 /* store Params pass it to WDI */
8774 pWdaParams->pWdaContext = pWDA;
8775 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8776 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8778 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 if(IS_WDI_STATUS_FAILURE(status))
8780 {
8781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8782 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8783 vos_mem_free(pWdaParams->wdaMsgParam) ;
8784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8785 vos_mem_free(pWdaParams) ;
8786 //TODO: respond to TL with failure
8787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008789}
Jeff Johnson295189b2012-06-20 16:38:30 -07008790/*
8791 * FUNCTION: WDA_BtAmpEventReqCallback
8792 *
8793 */
8794void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8795{
8796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8797 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008798 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008799
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 if(NULL == pWdaParams)
8803 {
8804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 VOS_ASSERT(0) ;
8807 return ;
8808 }
8809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8810 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8811 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8812 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8813 {
8814 pWDA->wdaAmpSessionOn = VOS_FALSE;
8815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 vos_mem_free(pWdaParams->wdaMsgParam) ;
8817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8818 vos_mem_free(pWdaParams) ;
8819 /*
8820 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8821 * param here
8822 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 return ;
8824}
8825
Jeff Johnson295189b2012-06-20 16:38:30 -07008826/*
8827 * FUNCTION: WDA_ProcessBtAmpEventReq
8828 * Request to WDI to Update with BT AMP events.
8829 */
8830VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8831 tSmeBtAmpEvent *pBtAmpEventParams)
8832{
8833 WDI_Status status = WDI_STATUS_SUCCESS ;
8834 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8835 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8836 sizeof(WDI_BtAmpEventParamsType)) ;
8837 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008839 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 if(NULL == wdiBtAmpEventParam)
8841 {
8842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 VOS_ASSERT(0);
8845 return VOS_STATUS_E_NOMEM;
8846 }
8847 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8848 if(NULL == pWdaParams)
8849 {
8850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 VOS_ASSERT(0);
8853 vos_mem_free(wdiBtAmpEventParam);
8854 return VOS_STATUS_E_NOMEM;
8855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8857 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 /* Store BT AMP event pointer, as this will be used for response */
8860 /* store Params pass it to WDI */
8861 pWdaParams->pWdaContext = pWDA;
8862 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8863 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8865 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 if(IS_WDI_STATUS_FAILURE(status))
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8870 vos_mem_free(pWdaParams->wdaMsgParam) ;
8871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8872 vos_mem_free(pWdaParams) ;
8873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8875 {
8876 pWDA->wdaAmpSessionOn = VOS_TRUE;
8877 }
8878 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008879}
8880
Jeff Johnson295189b2012-06-20 16:38:30 -07008881/*
8882 * FUNCTION: WDA_FTMCommandReqCallback
8883 * Handle FTM CMD response came from HAL
8884 * Route responce to HDD FTM
8885 */
8886void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8887 void *usrData)
8888{
8889 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8891 {
8892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008893 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 return;
8895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 /* Release Current FTM Command Request */
8897 vos_mem_free(pWDA->wdaFTMCmdReq);
8898 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 /* Post FTM Responce to HDD FTM */
8900 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 return;
8902}
Jeff Johnson295189b2012-06-20 16:38:30 -07008903/*
8904 * FUNCTION: WDA_ProcessFTMCommand
8905 * Send FTM command to WDI
8906 */
8907VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8908 tPttMsgbuffer *pPTTFtmCmd)
8909{
8910 WDI_Status status = WDI_STATUS_SUCCESS;
8911 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 ftmCMDReq = (WDI_FTMCommandReqType *)
8913 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8914 if(NULL == ftmCMDReq)
8915 {
8916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8917 "WDA FTM Command buffer alloc fail");
8918 return VOS_STATUS_E_NOMEM;
8919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8921 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 /* Send command to WDI */
8924 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 return status;
8926}
Jeff Johnsone7245742012-09-05 17:12:55 -07008927#ifdef FEATURE_OEM_DATA_SUPPORT
8928/*
8929 * FUNCTION: WDA_StartOemDataReqCallback
8930 *
8931 */
8932void WDA_StartOemDataReqCallback(
8933 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8934 void* pUserData)
8935{
8936 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8938 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008939 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008940
Jeff Johnsone7245742012-09-05 17:12:55 -07008941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008942 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008943
8944 if(NULL == pWdaParams)
8945 {
8946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008947 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008948 VOS_ASSERT(0) ;
8949 return ;
8950 }
8951 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8952
Jeff Johnsone7245742012-09-05 17:12:55 -07008953 if(NULL == pWDA)
8954 {
8955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008956 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008957 VOS_ASSERT(0);
8958 return ;
8959 }
8960
8961 /*
8962 * Allocate memory for response params sent to PE
8963 */
8964 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8965
8966 // Check if memory is allocated for OemdataMeasRsp Params.
8967 if(NULL == pOemDataRspParams)
8968 {
8969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8970 "OEM DATA WDA callback alloc fail");
8971 VOS_ASSERT(0) ;
8972 return;
8973 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008974
Jeff Johnsone7245742012-09-05 17:12:55 -07008975 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8977 vos_mem_free(pWdaParams->wdaMsgParam);
8978 vos_mem_free(pWdaParams) ;
8979
Jeff Johnsone7245742012-09-05 17:12:55 -07008980 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008981 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008982 * Also, here success always means that we have atleast one BSSID.
8983 */
8984 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8985
8986 //enable Tx
8987 status = WDA_ResumeDataTx(pWDA);
8988 if(status != VOS_STATUS_SUCCESS)
8989 {
8990 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8991 }
8992 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8993 return ;
8994}
8995/*
8996 * FUNCTION: WDA_ProcessStartOemDataReq
8997 * Send Start Oem Data Req to WDI
8998 */
8999VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9000 tStartOemDataReq *pOemDataReqParams)
9001{
9002 WDI_Status status = WDI_STATUS_SUCCESS;
9003 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009004 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009005
9006 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9007
9008 if(NULL == wdiOemDataReqParams)
9009 {
9010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009012 VOS_ASSERT(0);
9013 return VOS_STATUS_E_NOMEM;
9014 }
9015
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009016 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9017 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9018 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9019 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009020
9021 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9022
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9024 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009025 {
9026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009028 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009029 vos_mem_free(pOemDataReqParams);
9030 VOS_ASSERT(0);
9031 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009032 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009033
Bernald44a1ae2013-01-09 08:30:39 -08009034 pWdaParams->pWdaContext = (void*)pWDA;
9035 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9036 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009037
9038 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9039 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009040
9041 if(IS_WDI_STATUS_FAILURE(status))
9042 {
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9044 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9046 vos_mem_free(pWdaParams->wdaMsgParam);
9047 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009048 }
9049 return CONVERT_WDI2VOS_STATUS(status) ;
9050}
9051#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009052/*
9053 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9054 *
9055 */
9056void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
9057{
9058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 if(NULL == pWdaParams)
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 VOS_ASSERT(0) ;
9066 return ;
9067 }
9068
9069 if(NULL != pWdaParams->wdaMsgParam)
9070 {
9071 vos_mem_free(pWdaParams->wdaMsgParam);
9072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 if(NULL != pWdaParams->wdaWdiApiMsgParam)
9074 {
9075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9076 }
9077
9078 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 return ;
9080}
Jeff Johnson295189b2012-06-20 16:38:30 -07009081#ifdef WLAN_FEATURE_GTK_OFFLOAD
9082/*
9083 * FUNCTION: WDA_HostOffloadReqCallback
9084 *
9085 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009086void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
9087 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009088{
9089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9090
9091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009092 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009093
9094 VOS_ASSERT(NULL != pWdaParams);
9095
9096 vos_mem_free(pWdaParams->wdaMsgParam) ;
9097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9098 vos_mem_free(pWdaParams) ;
9099
9100 //print a msg, nothing else to do
9101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9102 "WDA_GTKOffloadReqCallback invoked " );
9103
9104 return ;
9105}
9106
9107/*
9108 * FUNCTION: WDA_ProcessGTKOffloadReq
9109 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9110 * to broadcast traffic (sta mode).
9111 */
9112VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9113 tpSirGtkOffloadParams pGtkOffloadParams)
9114{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309115 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9117 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9118 sizeof(WDI_GtkOffloadReqMsg)) ;
9119 tWDA_ReqParams *pWdaParams ;
9120
9121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009122 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009123
9124 if(NULL == wdiGtkOffloadReqMsg)
9125 {
9126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 VOS_ASSERT(0);
9129 return VOS_STATUS_E_NOMEM;
9130 }
9131
9132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9133 if(NULL == pWdaParams)
9134 {
9135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 VOS_ASSERT(0);
9138 vos_mem_free(wdiGtkOffloadReqMsg);
9139 return VOS_STATUS_E_NOMEM;
9140 }
9141
9142 //
9143 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9144 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009145
9146 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309147 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009148
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9150 // Copy KCK
9151 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9152 // Copy KEK
9153 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9154 // Copy KeyReplayCounter
9155 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9156 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9157
9158 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
9159
Jeff Johnson295189b2012-06-20 16:38:30 -07009160
9161 /* Store Params pass it to WDI */
9162 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9163 pWdaParams->pWdaContext = pWDA;
9164 /* Store param pointer as passed in by caller */
9165 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9166
9167 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
9168
9169 if(IS_WDI_STATUS_FAILURE(status))
9170 {
9171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9172 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9174 vos_mem_free(pWdaParams->wdaMsgParam);
9175 vos_mem_free(pWdaParams);
9176 }
9177
9178 return CONVERT_WDI2VOS_STATUS(status) ;
9179}
9180
9181/*
9182 * FUNCTION: WDA_GtkOffloadGetInfoCallback
9183 *
9184 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009185void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
9186 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009187{
9188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9189 tWDA_CbContext *pWDA;
9190 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9191 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 vos_msg_t vosMsg;
9193
9194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009195 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009196
9197 VOS_ASSERT(NULL != pWdaParams);
9198
9199 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9200 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9201
9202 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9203 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9204
9205 /* Message Header */
9206 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9207 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9208
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009209 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9210 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9211 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9212 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9213 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009214
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309215 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9216 pwdiGtkOffloadGetInfoRsparams->bssId,
9217 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 /* VOS message wrapper */
9219 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9220 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9221 vosMsg.bodyval = 0;
9222
9223 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9224 {
9225 /* free the mem and return */
9226 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9227 }
9228
9229 vos_mem_free(pWdaParams->wdaMsgParam) ;
9230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9231 vos_mem_free(pWdaParams) ;
9232}
9233#endif
9234
9235/*
9236 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
9237 * Request to WDI to set Tx Per Tracking configurations
9238 */
9239VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
9240{
9241 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009242 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
9244 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
9245 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
9246 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 if(NULL == pwdiSetTxPerTrackingReqParams)
9250 {
9251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 vos_mem_free(pTxPerTrackingParams);
9254 VOS_ASSERT(0);
9255 return VOS_STATUS_E_NOMEM;
9256 }
9257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9258 if(NULL == pWdaParams)
9259 {
9260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 vos_mem_free(pwdiSetTxPerTrackingReqParams);
9263 vos_mem_free(pTxPerTrackingParams);
9264 VOS_ASSERT(0);
9265 return VOS_STATUS_E_NOMEM;
9266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9268 pTxPerTrackingParams->ucTxPerTrackingEnable;
9269 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9270 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9271 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9272 pTxPerTrackingParams->ucTxPerTrackingRatio;
9273 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9274 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 /* Store param pointer as passed in by caller */
9277 /* store Params pass it to WDI
9278 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9279 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9280 pWdaParams->pWdaContext = pWDA;
9281 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009282 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009284 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 {
9286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9287 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009288 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 vos_mem_free(pWdaParams->wdaMsgParam) ;
9290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9291 vos_mem_free(pWdaParams) ;
9292 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009293 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009294
9295}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009296/*
9297 * FUNCTION: WDA_HALDumpCmdCallback
9298 * Send the VOS complete .
9299 */
9300void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9301 void* pUserData)
9302{
9303 tANI_U8 *buffer = NULL;
9304 tWDA_CbContext *pWDA = NULL;
9305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 if(NULL == pWdaParams)
9307 {
9308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009309 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 VOS_ASSERT(0) ;
9311 return ;
9312 }
9313
9314 pWDA = pWdaParams->pWdaContext;
9315 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 if(wdiRspParams->usBufferLen > 0)
9317 {
9318 /*Copy the Resp data to UMAC supplied buffer*/
9319 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9322 vos_mem_free(pWdaParams);
9323
9324 /* Indicate VOSS about the start complete */
9325 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 return ;
9327}
9328
Jeff Johnson295189b2012-06-20 16:38:30 -07009329/*
9330 * FUNCTION: WDA_ProcessHALDumpCmdReq
9331 * Send Dump command to WDI
9332 */
9333VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9334 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9335 tANI_U32 arg4, tANI_U8 *pBuffer)
9336{
9337 WDI_Status status = WDI_STATUS_SUCCESS;
9338 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9339 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9340 tWDA_ReqParams *pWdaParams ;
9341 pVosContextType pVosContext = NULL;
9342 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9344 (void *)pMac);
9345
9346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9347 if(NULL == pWdaParams)
9348 {
9349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 return VOS_STATUS_E_NOMEM;
9352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 /* Allocate memory WDI request structure*/
9354 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9355 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9356 if(NULL == wdiHALDumpCmdReqParam)
9357 {
9358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9359 "WDA HAL DUMP Command buffer alloc fail");
9360 vos_mem_free(pWdaParams);
9361 return WDI_STATUS_E_FAILURE;
9362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 /* Extract the arguments */
9365 wdiHalDumpCmdInfo->command = cmd;
9366 wdiHalDumpCmdInfo->argument1 = arg1;
9367 wdiHalDumpCmdInfo->argument2 = arg2;
9368 wdiHalDumpCmdInfo->argument3 = arg3;
9369 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9372
9373 /* Response message will be passed through the buffer */
9374 pWdaParams->wdaMsgParam = (void *)pBuffer;
9375
9376 /* store Params pass it to WDI */
9377 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009378 /* Send command to WDI */
9379 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009380 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 if ( vStatus != VOS_STATUS_SUCCESS )
9382 {
9383 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9384 {
9385 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009386 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 }
9388 else
9389 {
9390 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009391 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 }
9393 VOS_ASSERT(0);
9394 }
9395 return status;
9396}
Jeff Johnson295189b2012-06-20 16:38:30 -07009397#ifdef WLAN_FEATURE_GTK_OFFLOAD
9398/*
9399 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9400 * Request to WDI to get GTK Offload Information
9401 */
9402VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9403 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9404{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309405 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9407 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9408 tWDA_ReqParams *pWdaParams ;
9409
9410 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9411 {
9412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 VOS_ASSERT(0);
9415 return VOS_STATUS_E_NOMEM;
9416 }
9417
9418 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9419 if(NULL == pWdaParams)
9420 {
9421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 VOS_ASSERT(0);
9424 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9425 return VOS_STATUS_E_NOMEM;
9426 }
9427
9428 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9429
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 /* Store Params pass it to WDI */
9431 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9432 pWdaParams->pWdaContext = pWDA;
9433 /* Store param pointer as passed in by caller */
9434 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9435
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009436 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309437 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009438
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9440
9441 if(IS_WDI_STATUS_FAILURE(status))
9442 {
9443 /* failure returned by WDI API */
9444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9445 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9447 vos_mem_free(pWdaParams) ;
9448 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9449 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9450 }
9451
9452 return CONVERT_WDI2VOS_STATUS(status) ;
9453}
9454#endif // WLAN_FEATURE_GTK_OFFLOAD
9455
9456/*
9457 * -------------------------------------------------------------------------
9458 * DATA interface with WDI for Mgmt Frames
9459 * -------------------------------------------------------------------------
9460 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009461/*
9462 * FUNCTION: WDA_TxComplete
9463 * Callback function for the WDA_TxPacket
9464 */
9465VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9466 VOS_STATUS status )
9467{
9468
9469 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9470 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009471 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009472
9473 if(NULL == wdaContext)
9474 {
9475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9476 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009477 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 VOS_ASSERT(0);
9479 return VOS_STATUS_E_FAILURE;
9480 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009481
9482 /*Check if frame was timed out or not*/
9483 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9484 (v_PVOID_t)&uUserData);
9485
9486 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9487 {
9488 /*Discard frame - no further processing is needed*/
9489 vos_pkt_return_packet(pData);
9490 return VOS_STATUS_SUCCESS;
9491 }
9492
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9494 if( NULL!=wdaContext->pTxCbFunc)
9495 {
9496 /*check if packet is freed already*/
9497 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9498 {
9499 wdaContext->pTxCbFunc(pMac, pData);
9500 }
9501 else
9502 {
9503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9504 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009505 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 //Return from here since we reaching here because the packet already timeout
9507 return status;
9508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 }
9510
9511 /*
9512 * Trigger the event to bring the HAL TL Tx complete function to come
9513 * out of wait
9514 * Let the coe above to complete the packet first. When this event is set,
9515 * the thread waiting for the event may run and set Vospacket_freed causing the original
9516 * packet not being freed.
9517 */
9518 status = vos_event_set(&wdaContext->txFrameEvent);
9519 if(!VOS_IS_STATUS_SUCCESS(status))
9520 {
9521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9522 "NEW VOS Event Set failed - status = %d \n", status);
9523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 return status;
9525}
Jeff Johnson295189b2012-06-20 16:38:30 -07009526/*
9527 * FUNCTION: WDA_TxPacket
9528 * Forward TX management frame to WDI
9529 */
9530VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9531 void *pFrmBuf,
9532 tANI_U16 frmLen,
9533 eFrameType frmType,
9534 eFrameTxDir txDir,
9535 tANI_U8 tid,
9536 pWDATxRxCompFunc pCompFunc,
9537 void *pData,
9538 pWDAAckFnTxComp pAckTxComp,
9539 tANI_U8 txFlag)
9540{
9541 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9542 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9543 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9544 tANI_U8 eventIdx = 0;
9545 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9546 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 if((NULL == pWDA)||(NULL == pFrmBuf))
9548 {
9549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9550 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009551 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 VOS_ASSERT(0);
9553 return VOS_STATUS_E_FAILURE;
9554 }
9555
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9557 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9559 if(NULL == pMac)
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009562 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 VOS_ASSERT(0);
9564 return VOS_STATUS_E_FAILURE;
9565 }
9566
9567
9568
9569 /* store the call back function in WDA context */
9570 pWDA->pTxCbFunc = pCompFunc;
9571 /* store the call back for the function of ackTxComplete */
9572 if( pAckTxComp )
9573 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009574 if( NULL != pWDA->pAckTxCbFunc )
9575 {
9576 /* Already TxComp is active no need to active again */
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9578 "There is already one request pending for tx complete\n");
9579 pWDA->pAckTxCbFunc( pMac, 0);
9580 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009581
Jeff Johnsone7245742012-09-05 17:12:55 -07009582 if( VOS_STATUS_SUCCESS !=
9583 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9584 {
9585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9586 "Tx Complete timeout Timer Stop Failed ");
9587 }
9588 else
9589 {
9590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009591 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009592 }
9593 }
9594
9595 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9596 pWDA->pAckTxCbFunc = pAckTxComp;
9597 if( VOS_STATUS_SUCCESS !=
9598 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9601 "Tx Complete Timer Start Failed ");
9602 pWDA->pAckTxCbFunc = NULL;
9603 return eHAL_STATUS_FAILURE;
9604 }
9605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 /* Reset the event to be not signalled */
9607 status = vos_event_reset(&pWDA->txFrameEvent);
9608 if(!VOS_IS_STATUS_SUCCESS(status))
9609 {
9610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9611 "VOS Event reset failed - status = %d\n",status);
9612 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9613 if( pAckTxComp )
9614 {
9615 pWDA->pAckTxCbFunc = NULL;
9616 if( VOS_STATUS_SUCCESS !=
9617 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9618 {
9619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9620 "Tx Complete timeout Timer Stop Failed ");
9621 }
9622 }
9623 return VOS_STATUS_E_FAILURE;
9624 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009625
9626 /* If Peer Sta mask is set don't overwrite to self sta */
9627 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009629 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009631 else
9632 {
Ganesh K08bce952012-12-13 15:04:41 -08009633 /* Get system role, use the self station if in unknown role or STA role */
9634 systemRole = wdaGetGlobalSystemRole(pMac);
9635 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9636 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009637#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009638 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009639#endif
Ganesh K08bce952012-12-13 15:04:41 -08009640 ))
9641 {
9642 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9643 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009645
Jeff Johnsone7245742012-09-05 17:12:55 -07009646 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9647 disassoc frame reaches the HW, HAL has already deleted the peer station */
9648 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009650 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009651 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 /*Send Probe request frames on self sta idx*/
9654 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 /* Since we donot want probe responses to be retried, send probe responses
9657 through the NO_ACK queues */
9658 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9659 {
9660 //probe response is sent out using self station and no retries options.
9661 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9662 }
9663 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9664 {
9665 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9666 }
9667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009668 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9669
9670 /*Set frame tag to 0
9671 We will use the WDA user data in order to tag a frame as expired*/
9672 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9673 (v_PVOID_t)0);
9674
9675
9676 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9677 frmLen, ucTypeSubType, tid,
9678 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9681 "Sending Mgmt Frame failed - status = %d\n", status);
9682 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9683 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9684 if( pAckTxComp )
9685 {
9686 pWDA->pAckTxCbFunc = NULL;
9687 if( VOS_STATUS_SUCCESS !=
9688 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9691 "Tx Complete timeout Timer Stop Failed ");
9692 }
9693 }
9694 return VOS_STATUS_E_FAILURE;
9695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 /*
9697 * Wait for the event to be set by the TL, to get the response of TX
9698 * complete, this event should be set by the Callback function called by TL
9699 */
9700 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9701 &eventIdx);
9702 if(!VOS_IS_STATUS_SUCCESS(status))
9703 {
9704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9705 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009706 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9708 after the packet gets completed(packet freed once)*/
9709
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009710 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -07009711 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009712
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009713 /*Tag Frame as timed out for later deletion*/
9714 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9715 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9716
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 /* check whether the packet was freed already,so need not free again when
9718 * TL calls the WDA_Txcomplete routine
9719 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009720 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9721 /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 {
9723 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009724 } */
9725
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 if( pAckTxComp )
9727 {
9728 pWDA->pAckTxCbFunc = NULL;
9729 if( VOS_STATUS_SUCCESS !=
9730 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9731 {
9732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9733 "Tx Complete timeout Timer Stop Failed ");
9734 }
9735 }
9736 status = VOS_STATUS_E_FAILURE;
9737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 return status;
9739}
Jeff Johnson295189b2012-06-20 16:38:30 -07009740/*
9741 * FUNCTION: WDA_McProcessMsg
9742 * Trigger DAL-AL to start CFG download
9743 */
9744VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9745{
9746 VOS_STATUS status = VOS_STATUS_SUCCESS;
9747 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009748 if(NULL == pMsg)
9749 {
9750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009751 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 VOS_ASSERT(0);
9753 return VOS_STATUS_E_FAILURE;
9754 }
9755
9756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009757 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009758
9759 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9760 if(NULL == pWDA )
9761 {
9762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009763 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009765 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 return VOS_STATUS_E_FAILURE;
9767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 /* Process all the WDA messages.. */
9769 switch( pMsg->type )
9770 {
9771 case WNI_CFG_DNLD_REQ:
9772 {
9773 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009774 /* call WDA complete event if config download success */
9775 if( VOS_IS_STATUS_SUCCESS(status) )
9776 {
9777 vos_WDAComplete_cback(pVosContext);
9778 }
9779 else
9780 {
9781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9782 "WDA Config Download failure" );
9783 }
9784 break ;
9785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 /*
9787 * Init SCAN request from PE, convert it into DAL format
9788 * and send it to DAL
9789 */
9790 case WDA_INIT_SCAN_REQ:
9791 {
9792 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9793 break ;
9794 }
9795 /* start SCAN request from PE */
9796 case WDA_START_SCAN_REQ:
9797 {
9798 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9799 break ;
9800 }
9801 /* end SCAN request from PE */
9802 case WDA_END_SCAN_REQ:
9803 {
9804 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9805 break ;
9806 }
9807 /* end SCAN request from PE */
9808 case WDA_FINISH_SCAN_REQ:
9809 {
9810 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9811 break ;
9812 }
9813 /* join request from PE */
9814 case WDA_CHNL_SWITCH_REQ:
9815 {
9816 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9817 {
9818 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9819 }
9820 else
9821 {
9822 WDA_ProcessChannelSwitchReq(pWDA,
9823 (tSwitchChannelParams*)pMsg->bodyptr) ;
9824 }
9825 break ;
9826 }
9827 /* ADD BSS request from PE */
9828 case WDA_ADD_BSS_REQ:
9829 {
9830 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9831 break ;
9832 }
9833 case WDA_ADD_STA_REQ:
9834 {
9835 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9836 break ;
9837 }
9838 case WDA_DELETE_BSS_REQ:
9839 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9841 break ;
9842 }
9843 case WDA_DELETE_STA_REQ:
9844 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9846 break ;
9847 }
9848 case WDA_CONFIG_PARAM_UPDATE_REQ:
9849 {
9850 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9851 break ;
9852 }
9853 case WDA_SET_BSSKEY_REQ:
9854 {
9855 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9856 break ;
9857 }
9858 case WDA_SET_STAKEY_REQ:
9859 {
9860 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9861 break ;
9862 }
9863 case WDA_SET_STA_BCASTKEY_REQ:
9864 {
9865 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9866 break ;
9867 }
9868 case WDA_REMOVE_BSSKEY_REQ:
9869 {
9870 WDA_ProcessRemoveBssKeyReq(pWDA,
9871 (tRemoveBssKeyParams *)pMsg->bodyptr);
9872 break ;
9873 }
9874 case WDA_REMOVE_STAKEY_REQ:
9875 {
9876 WDA_ProcessRemoveStaKeyReq(pWDA,
9877 (tRemoveStaKeyParams *)pMsg->bodyptr);
9878 break ;
9879 }
9880 case WDA_REMOVE_STA_BCASTKEY_REQ:
9881 {
9882 /* TODO: currently UMAC is not sending this request, Add the code for
9883 handling this request when UMAC supports */
9884 break;
9885 }
9886#ifdef FEATURE_WLAN_CCX
9887 case WDA_TSM_STATS_REQ:
9888 {
9889 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9890 break;
9891 }
9892#endif
9893 case WDA_UPDATE_EDCA_PROFILE_IND:
9894 {
9895 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9896 break;
9897 }
9898 case WDA_ADD_TS_REQ:
9899 {
9900 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9901 break;
9902 }
9903 case WDA_DEL_TS_REQ:
9904 {
9905 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9906 break;
9907 }
9908 case WDA_ADDBA_REQ:
9909 {
9910 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9911 break;
9912 }
9913 case WDA_DELBA_IND:
9914 {
9915 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9916 break;
9917 }
9918 case WDA_SET_LINK_STATE:
9919 {
9920 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9921 break;
9922 }
9923 case WDA_GET_STATISTICS_REQ:
9924 {
9925 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9926 break;
9927 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08009928#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
9929 case WDA_GET_ROAM_RSSI_REQ:
9930 {
9931 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
9932 break;
9933 }
9934#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 case WDA_PWR_SAVE_CFG:
9936 {
9937 if(pWDA->wdaState == WDA_READY_STATE)
9938 {
9939 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9940 }
9941 else
9942 {
9943 if(NULL != pMsg->bodyptr)
9944 {
9945 vos_mem_free(pMsg->bodyptr);
9946 }
9947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9948 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9949 }
9950 break;
9951 }
9952 case WDA_ENTER_IMPS_REQ:
9953 {
9954 if(pWDA->wdaState == WDA_READY_STATE)
9955 {
9956 WDA_ProcessEnterImpsReq(pWDA);
9957 }
9958 else
9959 {
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9961 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9962 }
9963 break;
9964 }
9965 case WDA_EXIT_IMPS_REQ:
9966 {
9967 if(pWDA->wdaState == WDA_READY_STATE)
9968 {
9969 WDA_ProcessExitImpsReq(pWDA);
9970 }
9971 else
9972 {
9973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9974 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9975 }
9976 break;
9977 }
9978 case WDA_ENTER_BMPS_REQ:
9979 {
9980 if(pWDA->wdaState == WDA_READY_STATE)
9981 {
9982 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9983 }
9984 else
9985 {
9986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9987 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9988 }
9989 break;
9990 }
9991 case WDA_EXIT_BMPS_REQ:
9992 {
9993 if(pWDA->wdaState == WDA_READY_STATE)
9994 {
9995 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9996 }
9997 else
9998 {
9999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10000 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10001 }
10002 break;
10003 }
10004 case WDA_ENTER_UAPSD_REQ:
10005 {
10006 if(pWDA->wdaState == WDA_READY_STATE)
10007 {
10008 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10009 }
10010 else
10011 {
10012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10013 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10014 }
10015 break;
10016 }
10017 case WDA_EXIT_UAPSD_REQ:
10018 {
10019 if(pWDA->wdaState == WDA_READY_STATE)
10020 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010021 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 }
10023 else
10024 {
10025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10026 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10027 }
10028 break;
10029 }
10030 case WDA_UPDATE_UAPSD_IND:
10031 {
10032 if(pWDA->wdaState == WDA_READY_STATE)
10033 {
10034 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10035 }
10036 else
10037 {
10038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10039 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10040 }
10041 break;
10042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 case WDA_REGISTER_PE_CALLBACK :
10044 {
10045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10046 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10047 /*TODO: store the PE callback */
10048 /* Do Nothing? MSG Body should be freed at here */
10049 if(NULL != pMsg->bodyptr)
10050 {
10051 vos_mem_free(pMsg->bodyptr);
10052 }
10053 break;
10054 }
10055 case WDA_SYS_READY_IND :
10056 {
10057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10058 "Handling msg type WDA_SYS_READY_IND " );
10059 pWDA->wdaState = WDA_READY_STATE;
10060 if(NULL != pMsg->bodyptr)
10061 {
10062 vos_mem_free(pMsg->bodyptr);
10063 }
10064 break;
10065 }
10066 case WDA_BEACON_FILTER_IND :
10067 {
10068 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10069 break;
10070 }
10071 case WDA_BTC_SET_CFG:
10072 {
10073 /*TODO: handle this while dealing with BTC */
10074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10075 "Handling msg type WDA_BTC_SET_CFG " );
10076 /* Do Nothing? MSG Body should be freed at here */
10077 if(NULL != pMsg->bodyptr)
10078 {
10079 vos_mem_free(pMsg->bodyptr);
10080 }
10081 break;
10082 }
10083 case WDA_SIGNAL_BT_EVENT:
10084 {
10085 /*TODO: handle this while dealing with BTC */
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10087 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10088 /* Do Nothing? MSG Body should be freed at here */
10089 if(NULL != pMsg->bodyptr)
10090 {
10091 vos_mem_free(pMsg->bodyptr);
10092 }
10093 break;
10094 }
10095 case WDA_CFG_RXP_FILTER_REQ:
10096 {
10097 WDA_ProcessConfigureRxpFilterReq(pWDA,
10098 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10099 break;
10100 }
10101 case WDA_SET_HOST_OFFLOAD:
10102 {
10103 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10104 break;
10105 }
10106 case WDA_SET_KEEP_ALIVE:
10107 {
10108 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10109 break;
10110 }
10111#ifdef WLAN_NS_OFFLOAD
10112 case WDA_SET_NS_OFFLOAD:
10113 {
10114 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10115 break;
10116 }
10117#endif //WLAN_NS_OFFLOAD
10118 case WDA_ADD_STA_SELF_REQ:
10119 {
10120 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10121 break;
10122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 case WDA_DEL_STA_SELF_REQ:
10124 {
10125 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10126 break;
10127 }
10128 case WDA_WOWL_ADD_BCAST_PTRN:
10129 {
10130 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10131 break;
10132 }
10133 case WDA_WOWL_DEL_BCAST_PTRN:
10134 {
10135 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10136 break;
10137 }
10138 case WDA_WOWL_ENTER_REQ:
10139 {
10140 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10141 break;
10142 }
10143 case WDA_WOWL_EXIT_REQ:
10144 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010145 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 break;
10147 }
10148 case WDA_TL_FLUSH_AC_REQ:
10149 {
10150 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10151 break;
10152 }
10153 case WDA_SIGNAL_BTAMP_EVENT:
10154 {
10155 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10156 break;
10157 }
10158#ifdef WDA_UT
10159 case WDA_WDI_EVENT_MSG:
10160 {
10161 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10162 break ;
10163 }
10164#endif
10165 case WDA_UPDATE_BEACON_IND:
10166 {
10167 WDA_ProcessUpdateBeaconParams(pWDA,
10168 (tUpdateBeaconParams *)pMsg->bodyptr);
10169 break;
10170 }
10171 case WDA_SEND_BEACON_REQ:
10172 {
10173 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10174 break;
10175 }
10176 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10177 {
10178 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10179 (tSendProbeRespParams *)pMsg->bodyptr);
10180 break;
10181 }
10182#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10183 case WDA_SET_MAX_TX_POWER_REQ:
10184 {
10185 WDA_ProcessSetMaxTxPowerReq(pWDA,
10186 (tMaxTxPowerParams *)pMsg->bodyptr);
10187 break;
10188 }
10189#endif
schang86c22c42013-03-13 18:41:24 -070010190 case WDA_SET_TX_POWER_REQ:
10191 {
10192 WDA_ProcessSetTxPowerReq(pWDA,
10193 (tSirSetTxPowerReq *)pMsg->bodyptr);
10194 break;
10195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 case WDA_SET_P2P_GO_NOA_REQ:
10197 {
10198 WDA_ProcessSetP2PGONOAReq(pWDA,
10199 (tP2pPsParams *)pMsg->bodyptr);
10200 break;
10201 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 /* timer related messages */
10203 case WDA_TIMER_BA_ACTIVITY_REQ:
10204 {
10205 WDA_BaCheckActivity(pWDA) ;
10206 break ;
10207 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010208
10209 /* timer related messages */
10210 case WDA_TIMER_TRAFFIC_STATS_IND:
10211 {
10212 WDA_TimerTrafficStatsInd(pWDA);
10213 break;
10214 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010215#ifdef WLAN_FEATURE_VOWIFI_11R
10216 case WDA_AGGR_QOS_REQ:
10217 {
10218 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
10219 break;
10220 }
10221#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 case WDA_FTM_CMD_REQ:
10223 {
10224 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
10225 break ;
10226 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010227#ifdef FEATURE_OEM_DATA_SUPPORT
10228 case WDA_START_OEM_DATA_REQ:
10229 {
10230 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
10231 break;
10232 }
10233#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 /* Tx Complete Time out Indication */
10235 case WDA_TX_COMPLETE_TIMEOUT_IND:
10236 {
10237 WDA_ProcessTxCompleteTimeOutInd(pWDA);
10238 break;
10239 }
10240 case WDA_WLAN_SUSPEND_IND:
10241 {
10242 WDA_ProcessWlanSuspendInd(pWDA,
10243 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
10244 break;
10245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 case WDA_WLAN_RESUME_REQ:
10247 {
10248 WDA_ProcessWlanResumeReq(pWDA,
10249 (tSirWlanResumeParam *)pMsg->bodyptr) ;
10250 break;
10251 }
10252
10253 case WDA_UPDATE_CF_IND:
10254 {
10255 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
10256 pMsg->bodyptr = NULL;
10257 break;
10258 }
10259#ifdef FEATURE_WLAN_SCAN_PNO
10260 case WDA_SET_PNO_REQ:
10261 {
10262 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
10263 break;
10264 }
10265 case WDA_UPDATE_SCAN_PARAMS_REQ:
10266 {
10267 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
10268 break;
10269 }
10270 case WDA_SET_RSSI_FILTER_REQ:
10271 {
10272 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10273 break;
10274 }
10275#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 case WDA_SET_TX_PER_TRACKING_REQ:
10277 {
10278 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10279 break;
10280 }
10281
10282#ifdef WLAN_FEATURE_PACKET_FILTERING
10283 case WDA_8023_MULTICAST_LIST_REQ:
10284 {
10285 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10286 break;
10287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10289 {
10290 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10291 break;
10292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10294 {
10295 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10296 break;
10297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10299 {
10300 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10301 break;
10302 }
10303#endif // WLAN_FEATURE_PACKET_FILTERING
10304
10305
10306 case WDA_TRANSMISSION_CONTROL_IND:
10307 {
10308 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10309 break;
10310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 case WDA_SET_POWER_PARAMS_REQ:
10312 {
10313 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10314 break;
10315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010316#ifdef WLAN_FEATURE_GTK_OFFLOAD
10317 case WDA_GTK_OFFLOAD_REQ:
10318 {
10319 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10320 break;
10321 }
10322
10323 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10324 {
10325 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10326 break;
10327 }
10328#endif //WLAN_FEATURE_GTK_OFFLOAD
10329
10330 case WDA_SET_TM_LEVEL_REQ:
10331 {
10332 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10333 break;
10334 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010335#ifdef WLAN_FEATURE_11AC
10336 case WDA_UPDATE_OP_MODE:
10337 {
10338 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10339 {
10340 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10341 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10342 else
10343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10344 " VHT OpMode Feature is Not Supported \n");
10345 }
10346 else
10347 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10348 " 11AC Feature is Not Supported \n");
10349 break;
10350 }
10351#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070010352#ifdef WLAN_FEATURE_11W
10353 case WDA_EXCLUDE_UNENCRYPTED_IND:
10354 {
10355 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
10356 break;
10357 }
10358#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 default:
10360 {
10361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10362 "No Handling for msg type %x in WDA "
10363 ,pMsg->type);
10364 /* Do Nothing? MSG Body should be freed at here */
10365 if(NULL != pMsg->bodyptr)
10366 {
10367 vos_mem_free(pMsg->bodyptr);
10368 }
10369 //WDA_VOS_ASSERT(0) ;
10370 }
10371 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 return status ;
10373}
10374
Jeff Johnson295189b2012-06-20 16:38:30 -070010375/*
10376 * FUNCTION: WDA_LowLevelIndCallback
10377 * IND API callback from WDI, send Ind to PE
10378 */
10379void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10380 void* pUserData )
10381{
10382 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10383#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10384 tSirRSSINotification rssiNotification;
10385#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 if(NULL == pWDA)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010389 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 VOS_ASSERT(0);
10391 return ;
10392 }
10393
10394 switch(wdiLowLevelInd->wdiIndicationType)
10395 {
10396 case WDI_RSSI_NOTIFICATION_IND:
10397 {
10398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10399 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010400#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10401 rssiNotification.bReserved =
10402 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10403 rssiNotification.bRssiThres1NegCross =
10404 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10405 rssiNotification.bRssiThres1PosCross =
10406 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10407 rssiNotification.bRssiThres2NegCross =
10408 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10409 rssiNotification.bRssiThres2PosCross =
10410 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10411 rssiNotification.bRssiThres3NegCross =
10412 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10413 rssiNotification.bRssiThres3PosCross =
10414 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010415 rssiNotification.avgRssi = (v_S7_t)
10416 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 WLANTL_BMPSRSSIRegionChangedNotification(
10418 pWDA->pVosContext,
10419 &rssiNotification);
10420#endif
10421 break ;
10422 }
10423 case WDI_MISSED_BEACON_IND:
10424 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010425 tpSirSmeMissedBeaconInd pMissBeacInd =
10426 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10428 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010430 if(NULL == pMissBeacInd)
10431 {
10432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10433 "%s: VOS MEM Alloc Failure", __func__);
10434 break;
10435 }
10436 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10437 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10438 pMissBeacInd->bssIdx =
10439 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10440 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010441 break ;
10442 }
10443 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10444 {
10445 /* TODO: Decode Ind and send Ind to PE */
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10447 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10448 break ;
10449 }
10450
10451 case WDI_MIC_FAILURE_IND:
10452 {
10453 tpSirSmeMicFailureInd pMicInd =
10454 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10455
10456 if(NULL == pMicInd)
10457 {
10458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 break;
10461 }
10462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10463 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10465 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10466 vos_mem_copy(pMicInd->bssId,
10467 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10468 sizeof(tSirMacAddr));
10469 vos_mem_copy(pMicInd->info.srcMacAddr,
10470 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10471 sizeof(tSirMacAddr));
10472 vos_mem_copy(pMicInd->info.taMacAddr,
10473 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10474 sizeof(tSirMacAddr));
10475 vos_mem_copy(pMicInd->info.dstMacAddr,
10476 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10477 sizeof(tSirMacAddr));
10478 vos_mem_copy(pMicInd->info.rxMacAddr,
10479 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10480 sizeof(tSirMacAddr));
10481 pMicInd->info.multicast =
10482 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10483 pMicInd->info.keyId=
10484 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10485 pMicInd->info.IV1=
10486 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10487 vos_mem_copy(pMicInd->info.TSC,
10488 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10490 (void *)pMicInd , 0) ;
10491 break ;
10492 }
10493 case WDI_FATAL_ERROR_IND:
10494 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010495 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 /* TODO: Decode Ind and send Ind to PE */
10497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10498 "Received WDI_FATAL_ERROR_IND from WDI ");
10499 break ;
10500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 case WDI_DEL_STA_IND:
10502 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 tpDeleteStaContext pDelSTACtx =
10504 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10505
10506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10507 "Received WDI_DEL_STA_IND from WDI ");
10508 if(NULL == pDelSTACtx)
10509 {
10510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 break;
10513 }
10514 vos_mem_copy(pDelSTACtx->addr2,
10515 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10516 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 vos_mem_copy(pDelSTACtx->bssId,
10518 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10519 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 pDelSTACtx->assocId =
10521 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10522 pDelSTACtx->reasonCode =
10523 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10524 pDelSTACtx->staId =
10525 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10527 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010528 break ;
10529 }
10530 case WDI_COEX_IND:
10531 {
10532 tANI_U32 index;
10533 vos_msg_t vosMsg;
10534 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10535 if(NULL == pSmeCoexInd)
10536 {
10537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010538 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 break;
10540 }
10541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10542 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010543 /* Message Header */
10544 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10545 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 /* Info from WDI Indication */
10547 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10548 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10549 {
10550 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 /* VOS message wrapper */
10553 vosMsg.type = eWNI_SME_COEX_IND;
10554 vosMsg.bodyptr = (void *)pSmeCoexInd;
10555 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 /* Send message to SME */
10557 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10558 {
10559 /* free the mem and return */
10560 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10561 }
10562 else
10563 {
10564 /* DEBUG */
10565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10566 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10567 pSmeCoexInd->coexIndType,
10568 pSmeCoexInd->coexIndData[0],
10569 pSmeCoexInd->coexIndData[1],
10570 pSmeCoexInd->coexIndData[2],
10571 pSmeCoexInd->coexIndData[3]);
10572 }
10573 break;
10574 }
10575 case WDI_TX_COMPLETE_IND:
10576 {
10577 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10578 /* Calling TxCompleteAck Indication from wda context*/
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10580 "Complete Indication received from HAL");
10581 if( pWDA->pAckTxCbFunc )
10582 {
10583 if( VOS_STATUS_SUCCESS !=
10584 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10585 {
10586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10587 "Tx Complete timeout Timer Stop Failed ");
10588 }
10589 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10590 pWDA->pAckTxCbFunc = NULL;
10591 }
10592 else
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10595 "Tx Complete Indication is received after timeout ");
10596 }
10597 break;
10598 }
Viral Modid86bde22012-12-10 13:09:21 -080010599 case WDI_P2P_NOA_START_IND :
10600 {
10601 tSirP2PNoaStart *pP2pNoaStart =
10602 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10603
10604 if (NULL == pP2pNoaStart)
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10607 "Memory allocation failure, "
10608 "WDI_P2P_NOA_START_IND not forwarded");
10609 break;
10610 }
10611 pP2pNoaStart->status =
10612 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10613 pP2pNoaStart->bssIdx =
10614 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10615 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10616 (void *)pP2pNoaStart , 0) ;
10617 break;
10618 }
10619
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 case WDI_P2P_NOA_ATTR_IND :
10621 {
10622 tSirP2PNoaAttr *pP2pNoaAttr =
10623 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10625 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010626 if (NULL == pP2pNoaAttr)
10627 {
10628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10629 "Memory allocation failure, "
10630 "WDI_P2P_NOA_ATTR_IND not forwarded");
10631 break;
10632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010633 pP2pNoaAttr->index =
10634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10635 pP2pNoaAttr->oppPsFlag =
10636 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10637 pP2pNoaAttr->ctWin =
10638 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10639
10640 pP2pNoaAttr->uNoa1IntervalCnt =
10641 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10642 pP2pNoaAttr->uNoa1Duration =
10643 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10644 pP2pNoaAttr->uNoa1Interval =
10645 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10646 pP2pNoaAttr->uNoa1StartTime =
10647 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 pP2pNoaAttr->uNoa2IntervalCnt =
10649 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10650 pP2pNoaAttr->uNoa2Duration =
10651 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10652 pP2pNoaAttr->uNoa2Interval =
10653 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10654 pP2pNoaAttr->uNoa2StartTime =
10655 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10657 (void *)pP2pNoaAttr , 0) ;
10658 break;
10659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010660#ifdef FEATURE_WLAN_SCAN_PNO
10661 case WDI_PREF_NETWORK_FOUND_IND:
10662 {
10663 vos_msg_t vosMsg;
10664 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10666 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 if (NULL == pPrefNetworkFoundInd)
10668 {
10669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10670 "Memory allocation failure, "
10671 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10672 break;
10673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 /* Message Header */
10675 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10676 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10677
10678 /* Info from WDI Indication */
10679 pPrefNetworkFoundInd->ssId.length =
10680 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10683 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10684 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 /* VOS message wrapper */
10687 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10688 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10689 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 /* Send message to SME */
10691 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10692 {
10693 /* free the mem and return */
10694 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 break;
10697 }
10698#endif // FEATURE_WLAN_SCAN_PNO
10699
10700#ifdef WLAN_WAKEUP_EVENTS
10701 case WDI_WAKE_REASON_IND:
10702 {
10703 vos_msg_t vosMsg;
10704 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10705 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10706 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10707
10708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10709 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10710 wdiLowLevelInd->wdiIndicationType,
10711 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10712 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10713 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10714
10715 if (NULL == pWakeReasonInd)
10716 {
10717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10718 "Memory allocation failure, "
10719 "WDI_WAKE_REASON_IND not forwarded");
10720 break;
10721 }
10722
10723 vos_mem_zero(pWakeReasonInd, allocSize);
10724
10725 /* Message Header */
10726 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10727 pWakeReasonInd->mesgLen = allocSize;
10728
10729 /* Info from WDI Indication */
10730 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10731 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10732 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10733 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10734 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10735 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10736 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10737 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10738
10739 /* VOS message wrapper */
10740 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10741 vosMsg.bodyptr = (void *) pWakeReasonInd;
10742 vosMsg.bodyval = 0;
10743
10744 /* Send message to SME */
10745 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10746 {
10747 /* free the mem and return */
10748 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10749 }
10750
10751 break;
10752 }
10753#endif // WLAN_WAKEUP_EVENTS
10754
10755 case WDI_TX_PER_HIT_IND:
10756 {
10757 vos_msg_t vosMsg;
10758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10759 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10760 /* VOS message wrapper */
10761 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10762 vosMsg.bodyptr = NULL;
10763 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 /* Send message to SME */
10765 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10766 {
10767 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10768 }
10769 break;
10770 }
10771
10772 default:
10773 {
10774 /* TODO error */
10775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10776 "Received UNKNOWN Indication from WDI ");
10777 }
10778 }
10779 return ;
10780}
10781
Jeff Johnson295189b2012-06-20 16:38:30 -070010782/*
10783 * BA related processing in WDA.
10784 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010785void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10786 void* pUserData)
10787{
10788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10789 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010790 if(NULL == pWdaParams)
10791 {
10792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010793 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 VOS_ASSERT(0) ;
10795 return ;
10796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 vos_mem_free(pWdaParams->wdaMsgParam) ;
10799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10800 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010802 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010803 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10804 {
10805 tANI_U8 i = 0 ;
10806 tBaActivityInd *baActivityInd = NULL ;
10807 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10808 tANI_U8 allocSize = sizeof(tBaActivityInd)
10809 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10810 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10811 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 if(NULL == baActivityInd)
10814 {
10815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010817 VOS_ASSERT(0) ;
10818 return;
10819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010820 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10821 sizeof(tSirMacAddr)) ;
10822 baActivityInd->baCandidateCnt = baCandidateCount ;
10823
10824 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10825 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10826
10827 for(i = 0 ; i < baCandidateCount ; i++)
10828 {
10829 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010830 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10831 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10833 {
10834 baCandidate->baInfo[tid].fBaEnable =
10835 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10836 baCandidate->baInfo[tid].startingSeqNum =
10837 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10838 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010839 wdiBaCandidate++ ;
10840 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10843 }
10844 else
10845 {
10846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10847 "BA Trigger RSP with Failure received ");
10848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010850}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010851
10852
10853/*
10854 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10855 * during MCC
10856 */
10857void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10858{
10859 wpt_uint32 enabled;
10860 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10861 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10862 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10863
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010864 if (NULL == pMac )
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10867 "%s: Invoked with invalid MAC context ", __func__ );
10868 VOS_ASSERT(0);
10869 return;
10870 }
10871
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010872 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10873 != eSIR_SUCCESS)
10874 {
10875 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10876 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10877 return;
10878 }
10879
10880 if(!enabled)
10881 {
10882 return;
10883 }
10884
10885 if(NULL == pWDA)
10886 {
10887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10888 "%s:WDA context is NULL", __func__);
10889 VOS_ASSERT(0);
10890 return;
10891 }
10892
10893 if(activate)
10894 {
10895 if( VOS_STATUS_SUCCESS !=
10896 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10897 {
10898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10899 "Traffic Stats Timer Start Failed ");
10900 return;
10901 }
10902 WDI_DS_ActivateTrafficStats();
10903 }
10904 else
10905 {
10906 WDI_DS_DeactivateTrafficStats();
10907 WDI_DS_ClearTrafficStats();
10908
10909 if( VOS_STATUS_SUCCESS !=
10910 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10911 {
10912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10913 "Traffic Stats Timer Stop Failed ");
10914 return;
10915 }
10916 }
10917}
10918
10919/*
10920 * Traffic Stats Timer handler
10921 */
10922void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10923{
10924 WDI_Status wdiStatus;
10925 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10926 WDI_TrafficStatsIndType trafficStatsIndParams;
10927 wpt_uint32 length, enabled;
10928 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10929
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010930 if (NULL == pMac )
10931 {
10932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10933 "%s: Invoked with invalid MAC context ", __func__ );
10934 VOS_ASSERT(0);
10935 return;
10936 }
10937
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010938 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10939 != eSIR_SUCCESS)
10940 {
10941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10942 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10943 return;
10944 }
10945
10946 if(!enabled)
10947 {
10948 WDI_DS_DeactivateTrafficStats();
10949 return;
10950 }
10951
10952 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10953
10954 if(pWdiTrafficStats != NULL)
10955 {
10956 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10957 trafficStatsIndParams.length = length;
10958 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010959 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010960 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10961 trafficStatsIndParams.pUserData = pWDA;
10962
10963 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10964
10965 if(WDI_STATUS_PENDING == wdiStatus)
10966 {
10967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10968 "Pending received for %s:%d ",__func__,__LINE__ );
10969 }
10970 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10971 {
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10973 "Failure in %s:%d ",__func__,__LINE__ );
10974 }
10975
10976 WDI_DS_ClearTrafficStats();
10977 }
10978 else
10979 {
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10981 "pWdiTrafficStats is Null");
10982 }
10983
10984 if( VOS_STATUS_SUCCESS !=
10985 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10986 {
10987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10988 "Traffic Stats Timer Start Failed ");
10989 return;
10990 }
10991}
10992
Jeff Johnson295189b2012-06-20 16:38:30 -070010993/*
10994 * BA Activity check timer handler
10995 */
10996void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10997{
10998 tANI_U8 curSta = 0 ;
10999 tANI_U8 tid = 0 ;
11000 tANI_U8 size = 0 ;
11001 tANI_U8 baCandidateCount = 0 ;
11002 tANI_U8 newBaCandidate = 0 ;
11003 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11004
11005 if(NULL == pWDA)
11006 {
11007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011008 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 VOS_ASSERT(0);
11010 return ;
11011 }
11012 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11013 {
11014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11015 "Inconsistent STA entries in WDA");
11016 VOS_ASSERT(0) ;
11017 }
11018 /* walk through all STA entries and find out TX packet count */
11019 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11020 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011021#ifdef WLAN_SOFTAP_VSTA_FEATURE
11022 // We can only do BA on "hard" STAs.
11023 if (!(IS_HWSTA_IDX(curSta)))
11024 {
11025 continue;
11026 }
11027#endif //WLAN_SOFTAP_VSTA_FEATURE
11028 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11029 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011030 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 tANI_U32 txPktCount = 0 ;
11032 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011034 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11035 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11037 curSta, tid, &txPktCount)))
11038 {
11039#if 0
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11041 "************* %d:%d, %d ",curSta, txPktCount,
11042 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11043#endif
11044 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011045 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11047 curSta, tid)))
11048 {
11049 /* get prepare for sending message to HAL */
11050 //baCandidate[baCandidateCount].staIdx = curSta ;
11051 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11052 newBaCandidate = WDA_ENABLE_BA ;
11053 }
11054 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11055 }
11056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 /* fill the entry for all the sta with given TID's */
11058 if(WDA_ENABLE_BA == newBaCandidate)
11059 {
11060 /* move to next BA candidate */
11061 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11062 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11063 baCandidateCount++ ;
11064 newBaCandidate = WDA_DISABLE_BA ;
11065 }
11066 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 /* prepare and send message to hal */
11068 if( 0 < baCandidateCount)
11069 {
11070 WDI_Status status = WDI_STATUS_SUCCESS ;
11071 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11072 tWDA_ReqParams *pWdaParams =
11073 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 if(NULL == pWdaParams)
11075 {
11076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 VOS_ASSERT(0) ;
11079 return;
11080 }
11081 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11082 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11083 if(NULL == wdiTriggerBaReq)
11084 {
11085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 VOS_ASSERT(0) ;
11088 vos_mem_free(pWdaParams);
11089 return;
11090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011091 do
11092 {
11093 WDI_TriggerBAReqinfoType *triggerBaInfo =
11094 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11095 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11096 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11097 * for each request */
11098 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11099 triggerBaInfo->ucBASessionID = 0;
11100 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11101 } while(0) ;
11102 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 pWdaParams->pWdaContext = pWDA;
11106 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11107 pWdaParams->wdaMsgParam = NULL;
11108 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11109 WDA_TriggerBaReqCallback, pWdaParams) ;
11110 if(IS_WDI_STATUS_FAILURE(status))
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11113 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11114 vos_mem_free(pWdaParams->wdaMsgParam) ;
11115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11116 vos_mem_free(pWdaParams) ;
11117 }
11118 }
11119 else
11120 {
11121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11122 "There is no TID for initiating BA");
11123 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 if( VOS_STATUS_SUCCESS !=
11125 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11126 {
11127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11128 "BA Activity Timer Stop Failed ");
11129 return ;
11130 }
11131 if( VOS_STATUS_SUCCESS !=
11132 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11133 {
11134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11135 "BA Activity Timer Start Failed ");
11136 return;
11137 }
11138 return ;
11139}
Jeff Johnson295189b2012-06-20 16:38:30 -070011140/*
11141 * WDA common routine to create timer used by WDA.
11142 */
11143static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
11144{
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11146 tANI_U32 val = 0 ;
11147 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11148
11149 if(NULL == pMac)
11150 {
11151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011152 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 VOS_ASSERT(0);
11154 return VOS_STATUS_E_FAILURE;
11155 }
11156 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
11157 != eSIR_SUCCESS)
11158 {
11159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11160 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
11161 return VOS_STATUS_E_FAILURE;
11162 }
11163 val = SYS_MS_TO_TICKS(val) ;
11164
11165 /* BA activity check timer */
11166 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
11167 "BA Activity Check timer", WDA_TimerHandler,
11168 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
11169 if(status != TX_SUCCESS)
11170 {
11171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11172 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011173 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 /* Tx Complete Timeout timer */
11177 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
11178 "Tx Complete Check timer", WDA_TimerHandler,
11179 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 if(status != TX_SUCCESS)
11181 {
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11183 "Unable to create Tx Complete Timeout timer");
11184 /* Destroy timer of BA activity check timer */
11185 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11186 if(status != TX_SUCCESS)
11187 {
11188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11189 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011190 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011192 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011194
11195 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
11196
11197 /* Traffic Stats timer */
11198 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
11199 "Traffic Stats timer", WDA_TimerHandler,
11200 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
11201 if(status != TX_SUCCESS)
11202 {
11203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11204 "Unable to create traffic stats timer");
11205 /* Destroy timer of BA activity check timer */
11206 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11207 if(status != TX_SUCCESS)
11208 {
11209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11210 "Unable to Destroy BA activity timer");
11211 }
11212 /* Destroy timer of tx complete timer */
11213 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11214 if(status != TX_SUCCESS)
11215 {
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11217 "Unable to Tx complete timer");
11218 }
11219 return VOS_STATUS_E_FAILURE ;
11220 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011221 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011222}
Jeff Johnson295189b2012-06-20 16:38:30 -070011223/*
11224 * WDA common routine to destroy timer used by WDA.
11225 */
11226static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
11227{
11228 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11230 if(status != TX_SUCCESS)
11231 {
11232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11233 "Unable to Destroy Tx Complete Timeout timer");
11234 return eSIR_FAILURE ;
11235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11237 if(status != TX_SUCCESS)
11238 {
11239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11240 "Unable to Destroy BA activity timer");
11241 return eSIR_FAILURE ;
11242 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011243 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
11244 if(status != TX_SUCCESS)
11245 {
11246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11247 "Unable to Destroy traffic stats timer");
11248 return eSIR_FAILURE ;
11249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 return eSIR_SUCCESS ;
11251}
Jeff Johnson295189b2012-06-20 16:38:30 -070011252/*
11253 * WDA timer handler.
11254 */
11255void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
11256{
11257 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
11258 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 /*
11260 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
11261 */
11262 wdaMsg.type = timerInfo ;
11263 wdaMsg.bodyptr = NULL;
11264 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 /* post the message.. */
11266 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
11267 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
11268 {
11269 vosStatus = VOS_STATUS_E_BADMSG;
11270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011271}
Jeff Johnson295189b2012-06-20 16:38:30 -070011272/*
11273 * WDA Tx Complete timeout Indication.
11274 */
11275void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
11276{
11277 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 if( pWDA->pAckTxCbFunc )
11279 {
11280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11281 "TxComplete timer expired\n");
11282 pWDA->pAckTxCbFunc( pMac, 0);
11283 pWDA->pAckTxCbFunc = NULL;
11284 }
11285 else
11286 {
11287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11288 "There is no request pending for TxComplete and wait timer expired\n");
11289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011290}
Jeff Johnson295189b2012-06-20 16:38:30 -070011291/*
11292 * WDA Set REG Domain to VOS NV
11293 */
11294eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
11295{
11296 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
11297 {
11298 return eHAL_STATUS_INVALID_PARAMETER;
11299 }
11300 return eHAL_STATUS_SUCCESS;
11301}
Jeff Johnson295189b2012-06-20 16:38:30 -070011302
Jeff Johnson295189b2012-06-20 16:38:30 -070011303#ifdef FEATURE_WLAN_SCAN_PNO
11304/*
11305 * FUNCTION: WDA_PNOScanReqCallback
11306 *
11307 */
11308void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11309{
11310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011313 if(NULL == pWdaParams)
11314 {
11315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 VOS_ASSERT(0) ;
11318 return ;
11319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 if( pWdaParams != NULL )
11321 {
11322 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11323 {
11324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 if( pWdaParams->wdaMsgParam != NULL)
11327 {
11328 vos_mem_free(pWdaParams->wdaMsgParam);
11329 }
11330
11331 vos_mem_free(pWdaParams) ;
11332 }
11333
11334 return ;
11335}
Jeff Johnson295189b2012-06-20 16:38:30 -070011336/*
11337 * FUNCTION: WDA_UpdateScanParamsCallback
11338 *
11339 */
11340void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11341{
11342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011344 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 if(NULL == pWdaParams)
11346 {
11347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011348 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 VOS_ASSERT(0) ;
11350 return ;
11351 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 if( pWdaParams != NULL )
11353 {
11354 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11355 {
11356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 if( pWdaParams->wdaMsgParam != NULL)
11359 {
11360 vos_mem_free(pWdaParams->wdaMsgParam);
11361 }
11362 vos_mem_free(pWdaParams) ;
11363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 return ;
11365}
Jeff Johnson295189b2012-06-20 16:38:30 -070011366/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11368 * Request to WDI to set Preferred Network List.Offload
11369 */
11370VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11371 tSirPNOScanReq *pPNOScanReqParams)
11372{
Jeff Johnson43971f52012-07-17 12:26:56 -070011373 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11375 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11376 tWDA_ReqParams *pWdaParams ;
11377 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011379 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 if(NULL == pwdiPNOScanReqInfo)
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 VOS_ASSERT(0);
11385 return VOS_STATUS_E_NOMEM;
11386 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011387 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11388 if(NULL == pWdaParams)
11389 {
11390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 VOS_ASSERT(0);
11393 vos_mem_free(pwdiPNOScanReqInfo);
11394 return VOS_STATUS_E_NOMEM;
11395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 //
11397 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11398 //
11399 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11400 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11402 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11403 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11405 {
11406 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11407 &pPNOScanReqParams->aNetworks[i],
11408 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 /*Scan timer intervals*/
11411 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11412 &pPNOScanReqParams->scanTimers,
11413 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011414 /*Probe template for 2.4GHz band*/
11415 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11416 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11417 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11419 pPNOScanReqParams->p24GProbeTemplate,
11420 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011421 /*Probe template for 5GHz band*/
11422 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11423 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11424 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11426 pPNOScanReqParams->p5GProbeTemplate,
11427 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011429
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 /* Store Params pass it to WDI */
11431 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11432 pWdaParams->pWdaContext = pWDA;
11433 /* Store param pointer as passed in by caller */
11434 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11436 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011437 if(IS_WDI_STATUS_FAILURE(status))
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11440 "Failure in Set PNO REQ WDI API, free all the memory " );
11441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11442 vos_mem_free(pWdaParams->wdaMsgParam);
11443 pWdaParams->wdaWdiApiMsgParam = NULL;
11444 pWdaParams->wdaMsgParam = NULL;
11445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011446 return CONVERT_WDI2VOS_STATUS(status) ;
11447}
Jeff Johnson295189b2012-06-20 16:38:30 -070011448/*
11449 * FUNCTION: WDA_RssiFilterCallback
11450 *
11451 */
11452void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11453{
11454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11455
11456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011457 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011458
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011459 if(NULL == pWdaParams)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11462 "%s: pWdaParams is NULL", __func__);
11463 VOS_ASSERT(0);
11464 return ;
11465 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 vos_mem_free(pWdaParams->wdaMsgParam) ;
11467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11468 vos_mem_free(pWdaParams) ;
11469
11470 return ;
11471}
11472/*
11473 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11474 * Request to WDI to set Preferred Network List.Offload
11475 */
11476VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11477 tSirSetRSSIFilterReq* pRssiFilterParams)
11478{
Jeff Johnson43971f52012-07-17 12:26:56 -070011479 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11481 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11482 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 if(NULL == pwdiSetRssiFilterReqInfo)
11486 {
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 VOS_ASSERT(0);
11490 return VOS_STATUS_E_NOMEM;
11491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11493 if(NULL == pWdaParams)
11494 {
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011496 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 VOS_ASSERT(0);
11498 vos_mem_free(pwdiSetRssiFilterReqInfo);
11499 return VOS_STATUS_E_NOMEM;
11500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11502 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011503
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 /* Store Params pass it to WDI */
11505 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11506 pWdaParams->pWdaContext = pWDA;
11507 /* Store param pointer as passed in by caller */
11508 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11510 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11511 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 if(IS_WDI_STATUS_FAILURE(status))
11513 {
11514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11515 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11517 vos_mem_free(pWdaParams->wdaMsgParam);
11518 pWdaParams->wdaWdiApiMsgParam = NULL;
11519 pWdaParams->wdaMsgParam = NULL;
11520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 return CONVERT_WDI2VOS_STATUS(status) ;
11522}
11523
Jeff Johnson295189b2012-06-20 16:38:30 -070011524/*
11525 * FUNCTION: WDA_ProcessUpdateScanParams
11526 * Request to WDI to update Scan Parameters
11527 */
11528VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11529 tSirUpdateScanParams *pUpdateScanParams)
11530{
Jeff Johnson43971f52012-07-17 12:26:56 -070011531 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11533 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11534 sizeof(WDI_UpdateScanParamsInfoType)) ;
11535 tWDA_ReqParams *pWdaParams ;
11536 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011538 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 if(NULL == wdiUpdateScanParamsInfoType)
11540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 VOS_ASSERT(0);
11544 return VOS_STATUS_E_NOMEM;
11545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11547 if ( NULL == pWdaParams )
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 VOS_ASSERT(0);
11552 vos_mem_free(wdiUpdateScanParamsInfoType);
11553 return VOS_STATUS_E_NOMEM;
11554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 //
11556 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11557 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11559 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11560 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11561 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11562 "sir struct %d wdi struct %d",
11563 pUpdateScanParams->b11dEnabled,
11564 pUpdateScanParams->b11dResolved,
11565 pUpdateScanParams->ucChannelCount,
11566 pUpdateScanParams->usPassiveMinChTime,
11567 pUpdateScanParams->usPassiveMaxChTime,
11568 pUpdateScanParams->usActiveMinChTime,
11569 pUpdateScanParams->usActiveMaxChTime,
11570 sizeof(tSirUpdateScanParams),
11571 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11572
Jeff Johnson295189b2012-06-20 16:38:30 -070011573 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11574 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011575 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11576 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11578 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11580 pUpdateScanParams->usActiveMaxChTime;
11581 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11582 pUpdateScanParams->usActiveMinChTime;
11583 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11584 pUpdateScanParams->usPassiveMaxChTime;
11585 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11586 pUpdateScanParams->usPassiveMinChTime;
11587
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011589 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11590 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011591
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 for ( i = 0; i <
11593 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11594 i++)
11595 {
11596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11597 "Update Scan Parameters channel: %d",
11598 pUpdateScanParams->aChannels[i]);
11599
11600 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11601 pUpdateScanParams->aChannels[i];
11602 }
11603
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011605
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 /* Store Params pass it to WDI */
11607 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11608 pWdaParams->pWdaContext = pWDA;
11609 /* Store param pointer as passed in by caller */
11610 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011611
Jeff Johnson295189b2012-06-20 16:38:30 -070011612
11613
11614 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11615 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11616 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 if(IS_WDI_STATUS_FAILURE(status))
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11620 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11622 vos_mem_free(pWdaParams->wdaMsgParam);
11623 vos_mem_free(pWdaParams);
11624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 return CONVERT_WDI2VOS_STATUS(status) ;
11626}
11627#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011628/*
11629 * FUNCTION: WDA_SetPowerParamsCallback
11630 *
11631 */
11632void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11633{
11634 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11635
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11637 "<------ %s " ,__func__);
11638
11639 if(NULL == pWdaParams)
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "%s: pWdaParams received NULL", __func__);
11643 VOS_ASSERT(0);
11644 return;
11645 }
11646 if( pWdaParams != NULL )
11647 {
11648 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11649 {
11650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11651 }
11652 if( pWdaParams->wdaMsgParam != NULL)
11653 {
11654 vos_mem_free(pWdaParams->wdaMsgParam);
11655 }
11656 vos_mem_free(pWdaParams);
11657 }
11658 return;
11659}
11660
Jeff Johnson295189b2012-06-20 16:38:30 -070011661#ifdef WLAN_FEATURE_PACKET_FILTERING
11662/*
11663 * FUNCTION: WDA_8023MulticastListReqCallback
11664 *
11665 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011666void WDA_8023MulticastListReqCallback(
11667 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11668 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011669{
11670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 if(NULL == pWdaParams)
11674 {
11675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011676 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 VOS_ASSERT(0) ;
11678 return ;
11679 }
11680
11681 vos_mem_free(pWdaParams->wdaMsgParam) ;
11682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11683 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 //print a msg, nothing else to do
11685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11686 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011687 return ;
11688}
Jeff Johnson295189b2012-06-20 16:38:30 -070011689/*
11690 * FUNCTION: WDA_Process8023MulticastListReq
11691 * Request to WDI to add 8023 Multicast List
11692 */
11693VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11694 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11695{
Jeff Johnson43971f52012-07-17 12:26:56 -070011696 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011697 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11698 tWDA_ReqParams *pWdaParams ;
11699 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011701 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 pwdiFltPktSetMcListReqParamsType =
11703 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11704 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11705 ) ;
11706 if(NULL == pwdiFltPktSetMcListReqParamsType)
11707 {
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 return VOS_STATUS_E_NOMEM;
11711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11713 if(NULL == pWdaParams)
11714 {
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11718 return VOS_STATUS_E_NOMEM;
11719 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011720
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 //
11722 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11723 //
11724 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011725 pRcvFltMcAddrList->ulMulticastAddrCnt;
11726
11727 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11728 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11729 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11730 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11731
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11733 {
11734 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11735 &(pRcvFltMcAddrList->multicastAddr[i]),
11736 sizeof(tSirMacAddr));
11737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011739
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 /* Store Params pass it to WDI */
11741 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11742 pWdaParams->pWdaContext = pWDA;
11743 /* Store param pointer as passed in by caller */
11744 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 status = WDI_8023MulticastListReq(
11746 pwdiFltPktSetMcListReqParamsType,
11747 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11748 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 if(IS_WDI_STATUS_FAILURE(status))
11750 {
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11752 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11754 vos_mem_free(pWdaParams->wdaMsgParam);
11755 vos_mem_free(pWdaParams);
11756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 return CONVERT_WDI2VOS_STATUS(status) ;
11758}
Jeff Johnson295189b2012-06-20 16:38:30 -070011759/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011760 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 *
11762 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011763void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011764 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11765 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011766{
11767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011769 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011771 if(NULL == pWdaParams)
11772 {
11773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 VOS_ASSERT(0) ;
11776 return ;
11777 }
11778
11779 vos_mem_free(pWdaParams->wdaMsgParam) ;
11780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11781 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 //print a msg, nothing else to do
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011784 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 return ;
11786}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011787
11788/*
11789 * FUNCTION: WDA_ReqCallback
11790 *
11791 */
11792void WDA_ReqCallback(WDI_Status wdiStatus,
11793 void* pUserData)
11794{
11795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11796
11797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11798 "<------ %s, wdiStatus: %d",
11799 __func__, wdiStatus);
11800
11801 if (NULL == pWdaParams)
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11804 "%s: Invalid pWdaParams pointer", __func__);
11805 VOS_ASSERT(0);
11806 return;
11807 }
11808
11809 if (IS_WDI_STATUS_FAILURE(wdiStatus))
11810 {
11811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11812 vos_mem_free(pWdaParams->wdaMsgParam);
11813 vos_mem_free(pWdaParams);
11814 }
11815
11816 return;
11817}
11818
Jeff Johnson295189b2012-06-20 16:38:30 -070011819/*
11820 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11821 * Request to WDI to set Receive Filters
11822 */
11823VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11824 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11825{
Jeff Johnson43971f52012-07-17 12:26:56 -070011826 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11828 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11829 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11830 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11831 tWDA_ReqParams *pWdaParams ;
11832 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011834 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11836 {
11837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 VOS_ASSERT(0);
11840 return VOS_STATUS_E_NOMEM;
11841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11843 if(NULL == pWdaParams)
11844 {
11845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 VOS_ASSERT(0);
11848 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11849 return VOS_STATUS_E_NOMEM;
11850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11852 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11853 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11854 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011855 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11856 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11857
11858 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11859 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011860
11861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11862 "FID %d FT %d NParams %d CT %d",
11863 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11864 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11865 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11866 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11868 {
11869 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11870 &pRcvPktFilterCfg->paramsData[i],
11871 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11873 "Proto %d Comp Flag %d \n",
11874 pwdiSetRcvPktFilterReqParamsType->
11875 wdiPktFilterCfg.paramsData[i].protocolLayer,
11876 pwdiSetRcvPktFilterReqParamsType->
11877 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11879 "Data Offset %d Data Len %d\n",
11880 pwdiSetRcvPktFilterReqParamsType->
11881 wdiPktFilterCfg.paramsData[i].dataOffset,
11882 pwdiSetRcvPktFilterReqParamsType->
11883 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11885 "CData: %d:%d:%d:%d:%d:%d\n",
11886 pwdiSetRcvPktFilterReqParamsType->
11887 wdiPktFilterCfg.paramsData[i].compareData[0],
11888 pwdiSetRcvPktFilterReqParamsType->
11889 wdiPktFilterCfg.paramsData[i].compareData[1],
11890 pwdiSetRcvPktFilterReqParamsType->
11891 wdiPktFilterCfg.paramsData[i].compareData[2],
11892 pwdiSetRcvPktFilterReqParamsType->
11893 wdiPktFilterCfg.paramsData[i].compareData[3],
11894 pwdiSetRcvPktFilterReqParamsType->
11895 wdiPktFilterCfg.paramsData[i].compareData[4],
11896 pwdiSetRcvPktFilterReqParamsType->
11897 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11899 "MData: %d:%d:%d:%d:%d:%d\n",
11900 pwdiSetRcvPktFilterReqParamsType->
11901 wdiPktFilterCfg.paramsData[i].dataMask[0],
11902 pwdiSetRcvPktFilterReqParamsType->
11903 wdiPktFilterCfg.paramsData[i].dataMask[1],
11904 pwdiSetRcvPktFilterReqParamsType->
11905 wdiPktFilterCfg.paramsData[i].dataMask[2],
11906 pwdiSetRcvPktFilterReqParamsType->
11907 wdiPktFilterCfg.paramsData[i].dataMask[3],
11908 pwdiSetRcvPktFilterReqParamsType->
11909 wdiPktFilterCfg.paramsData[i].dataMask[4],
11910 pwdiSetRcvPktFilterReqParamsType->
11911 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 }
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011913 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
11914 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011915 /* Store Params pass it to WDI */
11916 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11917 pWdaParams->pWdaContext = pWDA;
11918 /* Store param pointer as passed in by caller */
11919 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011920 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011921 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 if(IS_WDI_STATUS_FAILURE(status))
11924 {
11925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11926 "Failure in SetFilter(),free all the memory,status %d ",status);
11927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11928 vos_mem_free(pWdaParams->wdaMsgParam);
11929 vos_mem_free(pWdaParams);
11930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 return CONVERT_WDI2VOS_STATUS(status) ;
11932}
Jeff Johnson295189b2012-06-20 16:38:30 -070011933/*
11934 * FUNCTION: WDA_FilterMatchCountReqCallback
11935 *
11936 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011937void WDA_FilterMatchCountReqCallback(
11938 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11939 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011940{
11941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11942 tWDA_CbContext *pWDA;
11943 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11944 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11945 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11946 tANI_U8 i;
11947 vos_msg_t vosMsg;
11948
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11952
Jeff Johnsone7245742012-09-05 17:12:55 -070011953 if(NULL == pRcvFltPktMatchCntRsp)
11954 {
11955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011956 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011957 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011958 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011959 return ;
11960 }
11961
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 if(NULL == pWdaParams)
11963 {
11964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011965 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011966 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011967 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 return ;
11969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11971 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11973 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11974
11975 /* Message Header */
11976 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11977 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11978
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011979 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011980
11981 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11982 {
11983 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11984 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 /* VOS message wrapper */
11987 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11988 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11989 vosMsg.bodyval = 0;
11990 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11991 {
11992 /* free the mem and return */
11993 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11994 }
11995
11996 vos_mem_free(pWdaParams->wdaMsgParam) ;
11997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11998 vos_mem_free(pWdaParams) ;
11999}
Jeff Johnson295189b2012-06-20 16:38:30 -070012000/*
12001 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
12002 * Request to WDI to get PC Filter Match Count
12003 */
12004VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
12005{
Jeff Johnson43971f52012-07-17 12:26:56 -070012006 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012007 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
12008 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
12009 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012012 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
12013 {
12014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 VOS_ASSERT(0);
12017 return VOS_STATUS_E_NOMEM;
12018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12020 if(NULL == pWdaParams)
12021 {
12022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012024 VOS_ASSERT(0);
12025 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
12026 return VOS_STATUS_E_NOMEM;
12027 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012028
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
12030
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012031 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
12032 pRcvFltPktMatchRsp->bssId,
12033 sizeof(wpt_macAddr));
12034
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 /* Store Params pass it to WDI */
12036 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
12037 pWdaParams->pWdaContext = pWDA;
12038 /* Store param pointer as passed in by caller */
12039 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
12041 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
12042 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 if(IS_WDI_STATUS_FAILURE(status))
12044 {
12045 /* failure returned by WDI API */
12046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12047 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
12048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12049 vos_mem_free(pWdaParams) ;
12050 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
12051 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
12052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 return CONVERT_WDI2VOS_STATUS(status) ;
12054}
Jeff Johnson295189b2012-06-20 16:38:30 -070012055/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012056 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012057 *
12058 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012059void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012060 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
12061 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012062{
12063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012066/* WDA_VOS_ASSERT(NULL != pWdaParams); */
12067 if(NULL == pWdaParams)
12068 {
12069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 VOS_ASSERT(0) ;
12072 return ;
12073 }
12074
12075 vos_mem_free(pWdaParams->wdaMsgParam) ;
12076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12077 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 //print a msg, nothing else to do
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012080 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 return ;
12082}
Jeff Johnson295189b2012-06-20 16:38:30 -070012083/*
12084 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
12085 * Request to WDI to clear Receive Filters
12086 */
12087VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
12088 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
12089{
Jeff Johnson43971f52012-07-17 12:26:56 -070012090 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
12092 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
12093 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012095 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 if(NULL == pwdiRcvFltPktClearReqParamsType)
12097 {
12098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 VOS_ASSERT(0);
12101 return VOS_STATUS_E_NOMEM;
12102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12104 if(NULL == pWdaParams)
12105 {
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 VOS_ASSERT(0);
12109 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
12110 return VOS_STATUS_E_NOMEM;
12111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012112 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
12113 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070012114 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
12115 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
12116 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
12117 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012118
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012119 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
12120 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012121 /* Store Params pass it to WDI */
12122 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
12123 pWdaParams->pWdaContext = pWDA;
12124 /* Store param pointer as passed in by caller */
12125 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012127 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012128 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 if(IS_WDI_STATUS_FAILURE(status))
12130 {
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12132 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
12133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080012134 vos_mem_free(pWdaParams->wdaMsgParam);
12135 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 return CONVERT_WDI2VOS_STATUS(status) ;
12138}
12139#endif // WLAN_FEATURE_PACKET_FILTERING
12140
Jeff Johnson295189b2012-06-20 16:38:30 -070012141/*
12142 * FUNCTION: WDA_ProcessSetPowerParamsReq
12143 * Request to WDI to set power params
12144 */
12145VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
12146 tSirSetPowerParamsReq *pPowerParams)
12147{
Jeff Johnson43971f52012-07-17 12:26:56 -070012148 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
12150 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012151 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 if(NULL == pwdiSetPowerParamsReqInfo)
12155 {
12156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 VOS_ASSERT(0);
12159 return VOS_STATUS_E_NOMEM;
12160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12162 if(NULL == pWdaParams)
12163 {
12164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012166 VOS_ASSERT(0);
12167 vos_mem_free(pwdiSetPowerParamsReqInfo);
12168 return VOS_STATUS_E_NOMEM;
12169 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012170
Jeff Johnson295189b2012-06-20 16:38:30 -070012171
12172 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
12173 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
12175 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
12177 pPowerParams->uListenInterval;
12178 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
12179 pPowerParams->uBcastMcastFilter;
12180 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
12181 pPowerParams->uEnableBET;
12182 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
12183 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070012184 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012185
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 /* Store Params pass it to WDI */
12187 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
12188 pWdaParams->pWdaContext = pWDA;
12189 /* Store param pointer as passed in by caller */
12190 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
12192 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
12193 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 if(IS_WDI_STATUS_FAILURE(status))
12195 {
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12197 "Failure in Set power params REQ WDI API, free all the memory " );
12198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12199 vos_mem_free(pWdaParams->wdaMsgParam);
12200 pWdaParams->wdaWdiApiMsgParam = NULL;
12201 pWdaParams->wdaMsgParam = NULL;
12202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012203 return CONVERT_WDI2VOS_STATUS(status) ;
12204}
12205
12206/*
12207 * FUNCTION: WDA_SetTmLevelRspCallback
12208 * Set TM Level response
12209 */
12210void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
12211{
12212 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12213
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012216
12217 if(NULL == pWdaParams)
12218 {
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012220 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 VOS_ASSERT(0) ;
12222 return ;
12223 }
12224
12225 /* Dose not need to send notification to upper layer
12226 * Just free allocated resources */
12227 if( pWdaParams != NULL )
12228 {
12229 if( pWdaParams->wdaWdiApiMsgParam != NULL )
12230 {
12231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12232 }
12233 vos_mem_free(pWdaParams->wdaMsgParam) ;
12234 vos_mem_free(pWdaParams) ;
12235 }
12236}
12237
12238/*
12239 * FUNCTION: WDA_ProcessSetTmLevelReq
12240 * Set TM Level request
12241 */
12242VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
12243 tAniSetTmLevelReq *setTmLevelReq)
12244{
12245 WDI_Status status = WDI_STATUS_SUCCESS ;
12246 tWDA_ReqParams *pWdaParams ;
12247 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
12248 (WDI_SetTmLevelReqType *)vos_mem_malloc(
12249 sizeof(WDI_SetTmLevelReqType)) ;
12250 if(NULL == wdiSetTmLevelReq)
12251 {
12252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012254 VOS_ASSERT(0);
12255 return VOS_STATUS_E_NOMEM;
12256 }
12257
12258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12259 if(NULL == pWdaParams)
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012263 VOS_ASSERT(0);
12264 vos_mem_free(wdiSetTmLevelReq);
12265 return VOS_STATUS_E_NOMEM;
12266 }
12267
12268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012270
12271 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
12272 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
12273
12274 pWdaParams->pWdaContext = pWDA;
12275 pWdaParams->wdaMsgParam = setTmLevelReq;
12276 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
12277
12278 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
12279 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
12280
12281 if(IS_WDI_STATUS_FAILURE(status))
12282 {
12283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080012284 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 vos_mem_free(pWdaParams->wdaMsgParam) ;
12286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12287 vos_mem_free(pWdaParams) ;
12288 }
12289
12290 return CONVERT_WDI2VOS_STATUS(status) ;
12291}
12292
12293VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
12294 tpTxControlParams pTxCtrlParam)
12295{
12296 VOS_STATUS wdaStatus;
12297
12298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012299 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 if( pTxCtrlParam == NULL )
12301 {
12302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012303 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 return VOS_STATUS_E_FAILURE;
12305 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012306 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
12307 {
12308 wdaStatus = WDA_SuspendDataTx(pWDA);
12309 }
12310 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
12311 {
12312 wdaStatus = WDA_ResumeDataTx(pWDA);
12313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 return wdaStatus;
12315}
12316
12317 /* FUNCTION WDA_featureCapsExchange
12318 * WDA API to invoke capability exchange between host and FW.
12319 */
12320void WDA_featureCapsExchange(v_PVOID_t pVosContext)
12321{
12322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012323 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012324 WDI_featureCapsExchangeReq( NULL, pVosContext);
12325}
12326
Yathish9f22e662012-12-10 14:21:35 -080012327/* FUNCTION WDA_disableCapablityFeature
12328 * WDA API to diable Active mode offload in host.
12329 */
12330void WDA_disableCapablityFeature(tANI_U8 feature_index)
12331{
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12333 "%s:enter", __func__ );
12334 WDI_disableCapablityFeature(feature_index);
12335}
12336
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 /* FUNCTION WDA_getHostWlanFeatCaps
12338 * Wrapper for WDI API, that will return if the feature (enum value).passed
12339 * to this API is supported or not in Host
12340 * return value
12341 * 0 - implies feature is NOT Supported
12342 * any non zero value - implies feature is SUPPORTED
12343 */
12344tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
12345{
12346 return WDI_getHostWlanFeatCaps(featEnumValue);
12347}
12348
12349 /* FUNCTION WDA_getFwWlanFeatCaps
12350 * Wrapper for WDI API, that will return if the feature (enum value).passed
12351 * to this API is supported or not in FW
12352 * return value
12353 * 0 - implies feature is NOT Supported
12354 * any non zero value - implies feature is SUPPORTED
12355 */
12356tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12357{
12358 return WDI_getFwWlanFeatCaps(featEnumValue);
12359}
12360
12361/*
12362 * FUNCTION: WDA_shutdown
12363 * Shutdown WDA/WDI without handshaking with Riva.
12364 * Synchronous function.
12365 */
12366VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12367{
12368 WDI_Status wdiStatus;
12369 //tANI_U8 eventIdx = 0;
12370 VOS_STATUS status = VOS_STATUS_SUCCESS;
12371 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 if (NULL == pWDA)
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012375 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012376 VOS_ASSERT(0);
12377 return VOS_STATUS_E_FAILURE;
12378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012379 /* FTM mode stay START_STATE */
12380 if( (WDA_READY_STATE != pWDA->wdaState) &&
12381 (WDA_INIT_STATE != pWDA->wdaState) &&
12382 (WDA_START_STATE != pWDA->wdaState) )
12383 {
12384 VOS_ASSERT(0);
12385 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012386
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012387 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12388 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012389 {
12390 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012391 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012393
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 /* call WDI shutdown */
12395 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12399 "error in WDA Stop" );
12400 status = VOS_STATUS_E_FAILURE;
12401 }
12402 /* WDI stop is synchrnous, shutdown is complete when it returns */
12403 pWDA->wdaState = WDA_STOP_STATE;
12404
Jeff Johnson295189b2012-06-20 16:38:30 -070012405 /* shutdown should perform the stop & close actions. */
12406 /* Destroy the event */
12407 status = vos_event_destroy(&pWDA->txFrameEvent);
12408 if(!VOS_IS_STATUS_SUCCESS(status))
12409 {
12410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12411 "VOS Event destroy failed - status = %d\n", status);
12412 status = VOS_STATUS_E_FAILURE;
12413 }
12414 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12415 if(!VOS_IS_STATUS_SUCCESS(status))
12416 {
12417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12418 "VOS Event destroy failed - status = %d\n", status);
12419 status = VOS_STATUS_E_FAILURE;
12420 }
12421 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12422 if(!VOS_IS_STATUS_SUCCESS(status))
12423 {
12424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12425 "VOS Event destroy failed - status = %d\n", status);
12426 status = VOS_STATUS_E_FAILURE;
12427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 /* free WDA context */
12429 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12430 if ( !VOS_IS_STATUS_SUCCESS(status) )
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12433 "error in WDA close " );
12434 status = VOS_STATUS_E_FAILURE;
12435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 return status;
12437}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012438
Jeff Johnsone7245742012-09-05 17:12:55 -070012439/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012440 * FUNCTION: WDA_setNeedShutdown
12441 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012442 */
12443
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012444void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012445{
12446 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012447 if(pWDA == NULL)
12448 {
12449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12450 "Could not get the WDA Context pointer" );
12451 return;
12452 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012453 pWDA->needShutdown = TRUE;
12454}
12455/*
12456 * FUNCTION: WDA_needShutdown
12457 * WDA needs a shutdown
12458 */
12459
12460v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12461{
12462 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012463 if(pWDA == NULL)
12464 {
12465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12466 "Could not get the WDA Context pointer" );
12467 return 0;
12468 }
12469 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012470}
12471
Mohit Khanna4a70d262012-09-11 16:30:12 -070012472#ifdef WLAN_FEATURE_11AC
12473/*
12474 * FUNCTION: WDA_SetBeaconFilterReqCallback
12475 *
12476 */
12477void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12478{
12479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012481 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012482 if(NULL == pWdaParams)
12483 {
12484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012485 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012486 VOS_ASSERT(0) ;
12487 return ;
12488 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012489
Mohit Khanna4a70d262012-09-11 16:30:12 -070012490 vos_mem_free(pWdaParams->wdaMsgParam) ;
12491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12492 vos_mem_free(pWdaParams) ;
12493 /*
12494 * No respone required for SetBeaconFilter req so just free the request
12495 * param here
12496 */
12497
12498 return ;
12499}
12500
12501VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12502 tUpdateVHTOpMode *pData)
12503{
12504 WDI_Status status = WDI_STATUS_SUCCESS ;
12505 tWDA_ReqParams *pWdaParams ;
12506 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12507 sizeof(WDI_UpdateVHTOpMode)) ;
12508 if(NULL == wdiTemp)
12509 {
12510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012511 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012512 VOS_ASSERT(0);
12513 return VOS_STATUS_E_NOMEM;
12514 }
12515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12516 if(NULL == pWdaParams)
12517 {
12518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012519 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012520 VOS_ASSERT(0);
12521 vos_mem_free(wdiTemp);
12522 return VOS_STATUS_E_NOMEM;
12523 }
12524
12525 wdiTemp->opMode = pData->opMode;
12526 wdiTemp->staId = pData->staId;
12527
12528 pWdaParams->pWdaContext = pWDA;
12529 /* Store Req pointer, as this will be used for response */
12530 pWdaParams->wdaMsgParam = (void *)pData;
12531 /* store Params pass it to WDI */
12532 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12533
12534 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12535
12536 if(IS_WDI_STATUS_FAILURE(status))
12537 {
12538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12539 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12541 vos_mem_free(pWdaParams->wdaMsgParam);
12542 vos_mem_free(pWdaParams);
12543 }
12544 return CONVERT_WDI2VOS_STATUS(status) ;
12545}
12546#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012547
12548/*==========================================================================
12549 FUNCTION WDA_TransportChannelDebug
12550
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012551 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012552 Display Transport Channel debugging information
12553 User may request to display DXE channel snapshot
12554 Or if host driver detects any abnormal stcuk may display
12555
12556 PARAMETERS
schang6295e542013-03-12 15:31:23 -070012557 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080012558 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012559 enableStallDetect : Enable stall detect feature
12560 This feature will take effect to data performance
12561 Not integrate till fully verification
12562
12563 RETURN VALUE
12564 NONE
12565
12566===========================================================================*/
12567void WDA_TransportChannelDebug
12568(
schang6295e542013-03-12 15:31:23 -070012569 tpAniSirGlobal pMac,
12570 v_BOOL_t displaySnapshot,
12571 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012572)
12573{
schang6295e542013-03-12 15:31:23 -070012574 if (NULL != pMac)
12575 {
12576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12577 "HAL BMU DUMP Request" );
12578 /* 17 is BMU dump opcode */
12579 WDA_HALDumpCmdReq(pMac, 17, 0, 0, 0, 0, NULL);
12580 }
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012581 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012582 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012583}