blob: c441b8c1b901642f190cc0310311da99ca31850d [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;
1994 tANI_U8 ucSTAId = 0;
1995
1996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001997 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 if (pWDA->txSuspendTimedOut)
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2002 "TL suspend timedout previously, CB not called yet\n");
2003 return status;
2004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 /* Reset the event to be not signalled */
2006 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2007 if(!VOS_IS_STATUS_SUCCESS(status))
2008 {
2009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2010 "VOS Event reset failed - status = %d\n",status);
2011 return VOS_STATUS_E_FAILURE;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 /*Indicate TL to suspend transmission for all Sta Id */
2014 ucSTAId = WLAN_ALL_STA;
2015 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2016 WDA_SuspendDataTxCallback);
2017 if(status != VOS_STATUS_SUCCESS)
2018 {
2019 return status;
2020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002021 /* Wait for the event to be set by the TL, to get the response of
2022 * suspending the TX queues, this event should be set by the Callback
2023 * function called by TL*/
2024 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2025 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2026 if(!VOS_IS_STATUS_SUCCESS(status))
2027 {
2028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2029 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002030 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 /* Set this flag to true when TL suspend times out, so that when TL
2032 * suspend eventually happens and calls the callback, TL can be resumed
2033 * right away by looking at this flag when true.*/
2034 pWDA->txSuspendTimedOut = TRUE;
2035 }
2036 else
2037 {
2038 pWDA->txSuspendTimedOut = FALSE;
2039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002040 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2041 {
2042 status = VOS_STATUS_SUCCESS;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 return status;
2045}
Jeff Johnson295189b2012-06-20 16:38:30 -07002046/*
2047 * FUNCTION: WDA_resumeDataTx
2048 * Update TL to resume the data Transmission
2049 */
2050VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2051{
2052 VOS_STATUS status = VOS_STATUS_SUCCESS;
2053 tANI_U8 ucSTAId = 0;
2054
2055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002056 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 ucSTAId = WLAN_ALL_STA;
2058 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2059 return status;
2060}
Jeff Johnson295189b2012-06-20 16:38:30 -07002061/*
2062 * FUNCTION: WDA_InitScanReqCallback
2063 * Trigger Init SCAN callback
2064 */
2065void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2066{
2067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2068 tWDA_CbContext *pWDA;
2069 tInitScanParams *pWDA_ScanParam ;
2070 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002072 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002073 if(NULL == pWdaParams)
2074 {
2075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 VOS_ASSERT(0) ;
2078 return ;
2079 }
2080 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2081 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 if(NULL == pWDA_ScanParam)
2083 {
2084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002085 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002086 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2088 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 return ;
2090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 if(WDI_STATUS_SUCCESS != wdiStatus)
2092 {
2093 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 if(VOS_STATUS_SUCCESS != status)
2095 {
2096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002097 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 }
2099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002100 /* free WDI command buffer */
2101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002103
Jeff Johnson295189b2012-06-20 16:38:30 -07002104
2105 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002106 /* without converting the Status to Failure or Success Just
2107 pass the same status to lim */
2108 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 /* send SCAN RSP message back to PE */
2110 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 return ;
2112}
2113
2114/*
2115 * FUNCTION: WDA_ProcessInitScanReq
2116 * Trigger Init SCAN in DAL
2117 */
2118VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2119 tInitScanParams *initScanParams)
2120{
2121 WDI_Status status = WDI_STATUS_SUCCESS ;
2122 WDI_InitScanReqParamsType *wdiInitScanParam =
2123 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2124 sizeof(WDI_InitScanReqParamsType)) ;
2125 tWDA_ReqParams *pWdaParams;
2126 tANI_U8 i = 0;
2127
2128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002129 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 if(NULL == wdiInitScanParam)
2131 {
2132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 VOS_ASSERT(0);
2135 return VOS_STATUS_E_NOMEM;
2136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2138 if(NULL == pWdaParams)
2139 {
2140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002141 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 VOS_ASSERT(0);
2143 vos_mem_free(wdiInitScanParam);
2144 return VOS_STATUS_E_NOMEM;
2145 }
2146
2147 /* Copy init Scan params to WDI structure */
2148 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2149 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2150 sizeof(tSirMacAddr)) ;
2151 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2152 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2153 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2155 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2157 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2159 {
2160 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2161 initScanParams->scanEntry.bssIdx[i] ;
2162 }
2163
2164 /* if Frame length, copy macMgmtHdr or WDI structure */
2165 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2166 {
2167 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2168 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2169 }
2170 wdiInitScanParam->wdiReqStatusCB = NULL ;
2171
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 /* Store Init Req pointer, as this will be used for response */
2173 pWdaParams->pWdaContext = pWDA;
2174 pWdaParams->wdaMsgParam = initScanParams;
2175 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 /* first try to suspend TX */
2177 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002178 if(WDI_STATUS_SUCCESS != status)
2179 {
2180 goto handleWdiFailure;
2181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 /* call DAL API to pass init scan request to DAL */
2183 status = WDI_InitScanReq(wdiInitScanParam,
2184 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 if(IS_WDI_STATUS_FAILURE(status))
2186 {
2187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2188 "error in WDA Init Scan, Resume Tx " );
2189 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 VOS_ASSERT(0) ;
2191
2192 goto handleWdiFailure;
2193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002195handleWdiFailure:
2196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2197 "Failure in WDI Api, free all the memory " );
2198 /* free WDI command buffer */
2199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2200 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002201 /* send Failure to PE */
2202 initScanParams->status = eSIR_FAILURE ;
2203 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 return CONVERT_WDI2VOS_STATUS(status) ;
2205}
2206
Jeff Johnson295189b2012-06-20 16:38:30 -07002207/*
2208 * FUNCTION: WDA_StartScanReqCallback
2209 * send Start SCAN RSP back to PE
2210 */
2211void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2212 void* pUserData)
2213{
2214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2215 tWDA_CbContext *pWDA;
2216 tStartScanParams *pWDA_ScanParam;
2217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 if(NULL == pWdaParams)
2220 {
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002222 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 VOS_ASSERT(0) ;
2224 return ;
2225 }
2226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2227 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 if(NULL == pWDA_ScanParam)
2229 {
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002231 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002233 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 return ;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2237 {
2238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002239 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002241 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 return ;
2243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2245 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002246
Jeff Johnson295189b2012-06-20 16:38:30 -07002247
2248 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002249 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 /* send SCAN RSP message back to PE */
2251 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002252 return ;
2253}
2254
Jeff Johnson295189b2012-06-20 16:38:30 -07002255/*
2256 * FUNCTION: WDA_ProcessStartScanReq
2257 * Trigger start SCAN in WDI
2258 */
2259VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2260 tStartScanParams *startScanParams)
2261{
2262 WDI_Status status = WDI_STATUS_SUCCESS;
2263 WDI_StartScanReqParamsType *wdiStartScanParams =
2264 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2265 sizeof(WDI_StartScanReqParamsType)) ;
2266 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 if(NULL == wdiStartScanParams)
2270 {
2271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 VOS_ASSERT(0);
2274 return VOS_STATUS_E_NOMEM;
2275 }
2276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2277 if(NULL == pWdaParams)
2278 {
2279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 VOS_ASSERT(0);
2282 vos_mem_free(wdiStartScanParams);
2283 return VOS_STATUS_E_NOMEM;
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /* Copy init Scan params to WDI structure */
2286 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2287 wdiStartScanParams->wdiReqStatusCB = NULL ;
2288
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* Store Init Req pointer, as this will be used for response */
2290 /* store Params pass it to WDI */
2291 pWdaParams->pWdaContext = pWDA;
2292 pWdaParams->wdaMsgParam = startScanParams;
2293 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 /* call DAL API to pass init scan request to DAL */
2295 status = WDI_StartScanReq(wdiStartScanParams,
2296 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 /* failure returned by WDI API */
2298 if(IS_WDI_STATUS_FAILURE(status))
2299 {
2300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2301 "Failure in Start Scan WDI API, free all the memory "
2302 "It should be due to previous abort scan." );
2303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2304 vos_mem_free(pWdaParams) ;
2305 startScanParams->status = eSIR_FAILURE ;
2306 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 return CONVERT_WDI2VOS_STATUS(status) ;
2309}
Jeff Johnson295189b2012-06-20 16:38:30 -07002310/*
2311 * FUNCTION: WDA_EndScanReqCallback
2312 * END SCAN callback
2313 */
2314void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2315{
2316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2317 tWDA_CbContext *pWDA;
2318 tEndScanParams *endScanParam;
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 if(NULL == pWdaParams)
2322 {
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 VOS_ASSERT(0) ;
2326 return ;
2327 }
2328 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2329 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 if(NULL == endScanParam)
2331 {
2332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002333 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2336 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 return ;
2338 }
2339
2340 /* Free WDI command buffer */
2341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2342 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002344 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 /* send response back to PE */
2346 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2347 return ;
2348}
2349
Jeff Johnson295189b2012-06-20 16:38:30 -07002350/*
2351 * FUNCTION: WDA_ProcessEndScanReq
2352 * Trigger END SCAN in WDI
2353 */
2354VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2355 tEndScanParams *endScanParams)
2356{
2357 WDI_Status status = WDI_STATUS_SUCCESS;
2358 WDI_EndScanReqParamsType *wdiEndScanParams =
2359 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2360 sizeof(WDI_EndScanReqParamsType)) ;
2361 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if(NULL == wdiEndScanParams)
2365 {
2366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 VOS_ASSERT(0);
2369 return VOS_STATUS_E_NOMEM;
2370 }
2371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2372 if(NULL == pWdaParams)
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 VOS_ASSERT(0);
2377 vos_mem_free(wdiEndScanParams);
2378 return VOS_STATUS_E_NOMEM;
2379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 /* Copy init Scan params to WDI structure */
2381 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2382 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 /* Store Init Req pointer, as this will be used for response */
2384 /* store Params pass it to WDI */
2385 pWdaParams->pWdaContext = pWDA;
2386 pWdaParams->wdaMsgParam = endScanParams;
2387 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 /* call DAL API to pass init scan request to DAL */
2389 status = WDI_EndScanReq(wdiEndScanParams,
2390 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 if(IS_WDI_STATUS_FAILURE(status))
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2394 "Failure in End Scan WDI API, free all the memory "
2395 "It should be due to previous abort scan." );
2396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2397 vos_mem_free(pWdaParams) ;
2398 endScanParams->status = eSIR_FAILURE ;
2399 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 return CONVERT_WDI2VOS_STATUS(status) ;
2402}
Jeff Johnson295189b2012-06-20 16:38:30 -07002403/*
2404 * FUNCTION: WDA_FinishScanReqCallback
2405 * Trigger Finish SCAN callback
2406 */
2407void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2408{
2409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2410 tWDA_CbContext *pWDA;
2411 tFinishScanParams *finishScanParam;
2412 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 if(NULL == pWdaParams)
2416 {
2417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 VOS_ASSERT(0) ;
2420 return ;
2421 }
2422
2423 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2424 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 if(NULL == finishScanParam)
2426 {
2427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002428 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2431 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 return ;
2433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2435 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 /*
2437 * Now Resume TX, if we reached here means, TX is already suspended, we
2438 * have to resume it unconditionaly
2439 */
2440 status = WDA_ResumeDataTx(pWDA) ;
2441
2442 if(VOS_STATUS_SUCCESS != status)
2443 {
2444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002445 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002447 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2449 return ;
2450}
Jeff Johnson295189b2012-06-20 16:38:30 -07002451/*
2452 * FUNCTION: WDA_ProcessFinshScanReq
2453 * Trigger Finish SCAN in WDI
2454 */
2455VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2456 tFinishScanParams *finishScanParams)
2457{
2458 WDI_Status status = WDI_STATUS_SUCCESS;
2459 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2460 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2461 sizeof(WDI_FinishScanReqParamsType)) ;
2462 tWDA_ReqParams *pWdaParams ;
2463 tANI_U8 i = 0;
2464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if(NULL == wdiFinishScanParams)
2467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 return VOS_STATUS_E_NOMEM;
2472 }
2473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2474 if(NULL == pWdaParams)
2475 {
2476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 vos_mem_free(wdiFinishScanParams);
2480 return VOS_STATUS_E_NOMEM;
2481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 /* Copy init Scan params to WDI structure */
2483 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2484 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2485 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2487 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2488 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2489 finishScanParams->frameLength ;
2490 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2491 finishScanParams->currentOperChannel ;
2492 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2493 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2494 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2496 {
2497 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2498 finishScanParams->scanEntry.bssIdx[i] ;
2499 }
2500
2501
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 /* if Frame length, copy macMgmtHdr ro WDI structure */
2503 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2504 {
2505 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2506 &finishScanParams->macMgmtHdr,
2507 sizeof(WDI_MacMgmtHdr)) ;
2508 }
2509 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 /* Store Init Req pointer, as this will be used for response */
2511 /* store Params pass it to WDI */
2512 pWdaParams->pWdaContext = pWDA;
2513 pWdaParams->wdaMsgParam = finishScanParams;
2514 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 /* call DAL API to pass init scan request to DAL */
2516 status = WDI_FinishScanReq(wdiFinishScanParams,
2517 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002518
Jeff Johnson295189b2012-06-20 16:38:30 -07002519
2520 /*
2521 * WDI API returns failure..
2522 */
2523 if(IS_WDI_STATUS_FAILURE( status))
2524 {
2525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2526 "Failure in Finish Scan WDI API, free all the memory " );
2527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2528 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 finishScanParams->status = eSIR_FAILURE ;
2530 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 return CONVERT_WDI2VOS_STATUS(status) ;
2533}
Jeff Johnson295189b2012-06-20 16:38:30 -07002534/*---------------------------------------------------------------------
2535 * ASSOC API's
2536 *---------------------------------------------------------------------
2537 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002538/*
2539 * FUNCTION: WDA_JoinReqCallback
2540 * Trigger Init SCAN callback
2541 */
2542void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2543{
2544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2545 tWDA_CbContext *pWDA;
2546 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 if(NULL == pWdaParams)
2550 {
2551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 VOS_ASSERT(0) ;
2554 return ;
2555 }
2556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2557 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2559 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 /* reset macBSSID */
2561 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* reset macSTASelf */
2563 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002564 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 return ;
2567}
Jeff Johnson295189b2012-06-20 16:38:30 -07002568/*
2569 * FUNCTION: WDA_ProcessJoinReq
2570 * Trigger Join REQ in WDI
2571 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002572VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2573 tSwitchChannelParams* joinReqParam)
2574{
2575 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 WDI_JoinReqParamsType *wdiJoinReqParam =
2577 (WDI_JoinReqParamsType *)vos_mem_malloc(
2578 sizeof(WDI_JoinReqParamsType)) ;
2579 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002581 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 if(NULL == wdiJoinReqParam)
2583 {
2584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002587 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 return VOS_STATUS_E_NOMEM;
2589 }
2590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2591 if(NULL == pWdaParams)
2592 {
2593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 VOS_ASSERT(0);
2596 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002597 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 return VOS_STATUS_E_NOMEM;
2599 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002600
2601 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2602 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2603 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2604 {
2605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2606 "%s: received join request when BSSID or self-STA is NULL "
2607 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002609 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2610 VOS_ASSERT(0);
2611 vos_mem_free(wdiJoinReqParam);
2612 vos_mem_free(pWdaParams);
2613 joinReqParam->status = eSIR_FAILURE ;
2614 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2615 return VOS_STATUS_E_INVAL;
2616 }
2617
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 /* copy the BSSID for pWDA */
2619 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2620 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2622 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2624 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002625#ifdef WLAN_FEATURE_VOWIFI
2626 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2627 joinReqParam->maxTxPower ;
2628#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2630 joinReqParam->localPowerConstraint ;
2631#endif
2632 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2633 joinReqParam->secondaryChannelOffset ;
2634 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2635
2636 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 /* Store Init Req pointer, as this will be used for response */
2638 /* store Params pass it to WDI */
2639 pWdaParams->pWdaContext = pWDA;
2640 pWdaParams->wdaMsgParam = joinReqParam;
2641 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 status = WDI_JoinReq(wdiJoinReqParam,
2643 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 if(IS_WDI_STATUS_FAILURE(status))
2645 {
2646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2647 "Failure in Join WDI API, free all the memory " );
2648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2649 vos_mem_free(pWdaParams) ;
2650 joinReqParam->status = eSIR_FAILURE ;
2651 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002653 return CONVERT_WDI2VOS_STATUS(status) ;
2654}
Jeff Johnson295189b2012-06-20 16:38:30 -07002655/*
2656 * FUNCTION: WDA_SwitchChannelReqCallback
2657 * send Switch channel RSP back to PE
2658 */
2659void WDA_SwitchChannelReqCallback(
2660 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2661{
2662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2663 tWDA_CbContext *pWDA;
2664 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 if(NULL == pWdaParams)
2668 {
2669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002670 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 VOS_ASSERT(0) ;
2672 return ;
2673 }
2674 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2675 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2676
2677#ifdef WLAN_FEATURE_VOWIFI
2678 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2679#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2681 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002683 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 return ;
2686}
Jeff Johnson295189b2012-06-20 16:38:30 -07002687/*
2688 * FUNCTION: WDA_ProcessChannelSwitchReq
2689 * Request to WDI to switch channel REQ params.
2690 */
2691VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2692 tSwitchChannelParams *pSwitchChanParams)
2693{
2694 WDI_Status status = WDI_STATUS_SUCCESS ;
2695 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2696 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2697 sizeof(WDI_SwitchChReqParamsType)) ;
2698 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002700 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 if(NULL == wdiSwitchChanParam)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 return VOS_STATUS_E_NOMEM;
2707 }
2708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2709 if(NULL == pWdaParams)
2710 {
2711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 VOS_ASSERT(0);
2714 vos_mem_free(wdiSwitchChanParam);
2715 return VOS_STATUS_E_NOMEM;
2716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2718#ifndef WLAN_FEATURE_VOWIFI
2719 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2720 pSwitchChanParams->localPowerConstraint;
2721#endif
2722 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2723 pSwitchChanParams->secondaryChannelOffset;
2724 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 /* Store req pointer, as this will be used for response */
2726 /* store Params pass it to WDI */
2727 pWdaParams->pWdaContext = pWDA;
2728 pWdaParams->wdaMsgParam = pSwitchChanParams;
2729 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730#ifdef WLAN_FEATURE_VOWIFI
2731 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2732 = pSwitchChanParams->maxTxPower;
2733 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2734 pSwitchChanParams ->selfStaMacAddr,
2735 sizeof(tSirMacAddr));
2736#endif
2737 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2738 pSwitchChanParams->bssId,
2739 sizeof(tSirMacAddr));
2740
2741 status = WDI_SwitchChReq(wdiSwitchChanParam,
2742 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 if(IS_WDI_STATUS_FAILURE(status))
2744 {
2745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2746 "Failure in process channel switch Req WDI API, free all the memory " );
2747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2748 vos_mem_free(pWdaParams) ;
2749 pSwitchChanParams->status = eSIR_FAILURE ;
2750 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 return CONVERT_WDI2VOS_STATUS(status) ;
2753}
Jeff Johnson295189b2012-06-20 16:38:30 -07002754/*
2755 * FUNCTION: WDA_ConfigBssReqCallback
2756 * config BSS Req Callback, called by WDI
2757 */
2758void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2759 ,void* pUserData)
2760{
2761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2762 tWDA_CbContext *pWDA;
2763 tAddBssParams *configBssReqParam;
2764 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002766 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 if(NULL == pWdaParams)
2768 {
2769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002770 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 VOS_ASSERT(0) ;
2772 return ;
2773 }
2774 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2775 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2776 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002778 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2780 {
2781 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2782 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2784 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2785 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2786
2787 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2788 {
2789 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2790 {
2791 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2792 staConfigBssParam->staType = STA_ENTRY_BSSID;
2793 }
2794 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2795 (staConfigBssParam->staType == STA_ENTRY_SELF))
2796 {
2797 /* This is the 1st add BSS Req for the BTAMP STA */
2798 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2799 staConfigBssParam->staType = STA_ENTRY_BSSID;
2800 }
2801 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2802 (staConfigBssParam->staType == STA_ENTRY_PEER))
2803 {
2804 /* This is the 2nd ADD BSS Request that is sent
2805 * on the BTAMP STA side. The Sta type is
2806 * set to STA_ENTRY_PEER here.*/
2807 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2808 }
2809 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2810 (staConfigBssParam->staType == STA_ENTRY_SELF))
2811 {
2812 /* statype is already set by PE.
2813 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2814 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2815 staConfigBssParam->staType = STA_ENTRY_BSSID;
2816 }
2817 else
2818 {
2819 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2820 staConfigBssParam->staType = STA_ENTRY_PEER;
2821 }
2822 }
2823 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2824 {
2825 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2826 staConfigBssParam->staType = STA_ENTRY_SELF;
2827 }
2828 else
2829 {
2830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2831 "Invalid operation mode specified");
2832 VOS_ASSERT(0);
2833 }
2834
2835 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2840 sizeof(tSirMacAddr));
2841 staConfigBssParam->txChannelWidthSet =
2842 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2844 staConfigBssParam->htCapable)
2845 {
2846 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2847 wdiConfigBssRsp->ucBSSIdx;
2848 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2849 WDA_VALID_STA_INDEX ;
2850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2852 wdiConfigBssRsp->ucBSSIdx,
2853 wdiConfigBssRsp->ucSTAIdx))
2854 {
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002856 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 VOS_ASSERT(0) ;
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2860 {
2861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002862 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 VOS_ASSERT(0) ;
2864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865#ifdef WLAN_FEATURE_VOWIFI
2866 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2867#endif
2868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2870 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 return ;
2873}
Jeff Johnson295189b2012-06-20 16:38:30 -07002874/*
2875 * FUNCTION: WDA_UpdateEdcaParamsForAC
2876 * Update WDI EDCA params with PE edca params
2877 */
2878void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2879 WDI_EdcaParamRecord *wdiEdcaParam,
2880 tSirMacEdcaParamRecord *macEdcaParam)
2881{
2882 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2883 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2884 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2885 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2886 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2887 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2888}
Jeff Johnson295189b2012-06-20 16:38:30 -07002889/*
2890 * FUNCTION: WDA_ProcessConfigBssReq
2891 * Configure BSS before starting Assoc with AP
2892 */
2893VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2894 tAddBssParams* configBssReqParam)
2895{
2896 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2898 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2899 sizeof(WDI_ConfigBSSReqParamsType)) ;
2900 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002902 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 if(NULL == wdiConfigBssReqParam)
2904 {
2905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 VOS_ASSERT(0);
2908 return VOS_STATUS_E_NOMEM;
2909 }
2910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2911 if(NULL == pWdaParams)
2912 {
2913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 VOS_ASSERT(0);
2916 vos_mem_free(wdiConfigBssReqParam);
2917 return VOS_STATUS_E_NOMEM;
2918 }
Kiran4a17ebe2013-01-31 10:43:43 -08002919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2920 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2923 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 /* Store Init Req pointer, as this will be used for response */
2925 /* store Params pass it to WDI */
2926 pWdaParams->pWdaContext = pWDA;
2927 pWdaParams->wdaMsgParam = configBssReqParam;
2928 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2930 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 if(IS_WDI_STATUS_FAILURE(status))
2932 {
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2934 "Failure in Config BSS WDI API, free all the memory " );
2935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2936 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 return CONVERT_WDI2VOS_STATUS(status) ;
2941}
Jeff Johnson295189b2012-06-20 16:38:30 -07002942#ifdef ENABLE_HAL_COMBINED_MESSAGES
2943/*
2944 * FUNCTION: WDA_PostAssocReqCallback
2945 * Post ASSOC req callback, send RSP back to PE
2946 */
2947void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2948 void* pUserData)
2949{
2950 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2951 tPostAssocParams *postAssocReqParam =
2952 (tPostAssocParams *)pWDA->wdaMsgParam ;
2953 /*STA context within the BSS Params*/
2954 tAddStaParams *staPostAssocParam =
2955 &postAssocReqParam->addBssParams.staContext ;
2956 /*STA Params for self STA*/
2957 tAddStaParams *selfStaPostAssocParam =
2958 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002962 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2964 {
2965 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2966 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2967 sizeof(tSirMacAddr)) ;
2968 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2969 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2970 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2972 }
2973 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2974 pWDA->wdaWdiApiMsgParam = NULL;
2975 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 return ;
2978}
Jeff Johnson295189b2012-06-20 16:38:30 -07002979/*
2980 * FUNCTION: WDA_ProcessPostAssocReq
2981 * Trigger POST ASSOC processing in WDI
2982 */
2983VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2984 tPostAssocParams *postAssocReqParam)
2985{
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 WDI_Status status = WDI_STATUS_SUCCESS ;
2987
2988 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2989 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2990 sizeof(WDI_PostAssocReqParamsType)) ;
2991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002992 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002993
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 if(NULL == wdiPostAssocReqParam)
2995 {
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_ASSERT(0);
2999 return VOS_STATUS_E_NOMEM;
3000 }
3001
3002 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3003 {
3004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003005 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 VOS_ASSERT(0);
3007 return VOS_STATUS_E_FAILURE;
3008 }
3009
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 /* update BSS params into WDI structure */
3011 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3012 &postAssocReqParam->addBssParams) ;
3013 /* update STA params into WDI structure */
3014 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3015 &postAssocReqParam->addStaParams) ;
3016
3017 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3018 postAssocReqParam->addBssParams.highPerformance;
3019 WDA_UpdateEdcaParamsForAC(pWDA,
3020 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3021 &postAssocReqParam->addBssParams.acbe);
3022 WDA_UpdateEdcaParamsForAC(pWDA,
3023 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3024 &postAssocReqParam->addBssParams.acbk);
3025 WDA_UpdateEdcaParamsForAC(pWDA,
3026 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3027 &postAssocReqParam->addBssParams.acvi);
3028 WDA_UpdateEdcaParamsForAC(pWDA,
3029 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3030 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 /* Store Init Req pointer, as this will be used for response */
3032 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 /* store Params pass it to WDI */
3034 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3036 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 if(IS_WDI_STATUS_FAILURE(status))
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3040 "Failure in Post Assoc WDI API, free all the memory " );
3041 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3042 pWDA->wdaWdiApiMsgParam = NULL;
3043 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003047 return CONVERT_WDI2VOS_STATUS(status) ;
3048}
3049#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003050/*
3051 * FUNCTION: WDA_AddStaReqCallback
3052 * ADD STA req callback, send RSP back to PE
3053 */
3054void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3055 void* pUserData)
3056{
3057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3058 tWDA_CbContext *pWDA;
3059 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 if(NULL == pWdaParams)
3063 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 VOS_ASSERT(0) ;
3066 return ;
3067 }
3068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3069 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003071 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3073 {
3074 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3075 /*TODO: UMAC structure doesn't have these fields*/
3076 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3077 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3078 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3079 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3080 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3081 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003082#ifdef FEATURE_WLAN_TDLS
3083 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3084 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3085#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003087#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 {
3089 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3090 wdiConfigStaRsp->ucBssIdx;
3091 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3092 WDA_VALID_STA_INDEX ;
3093 }
3094 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3095 {
3096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003097 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 VOS_ASSERT(0) ;
3099 return ;
3100 }
3101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3103 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 return ;
3106}
Jeff Johnson295189b2012-06-20 16:38:30 -07003107/*
3108 * FUNCTION: WDA_ConfigStaReq
3109 * Trigger Config STA processing in WDI
3110 */
3111VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3112 tAddStaParams *addStaReqParam)
3113{
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3116 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3117 sizeof(WDI_ConfigSTAReqParamsType)) ;
3118 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 if(NULL == wdiConfigStaReqParam)
3122 {
3123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 VOS_ASSERT(0);
3126 return VOS_STATUS_E_NOMEM;
3127 }
3128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3129 if(NULL == pWdaParams)
3130 {
3131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_ASSERT(0);
3134 vos_mem_free(wdiConfigStaReqParam);
3135 return VOS_STATUS_E_NOMEM;
3136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 /* update STA params into WDI structure */
3139 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3140 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 /* Store Init Req pointer, as this will be used for response */
3142 /* store Params pass it to WDI */
3143 pWdaParams->pWdaContext = pWDA;
3144 pWdaParams->wdaMsgParam = addStaReqParam;
3145 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3147 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 if(IS_WDI_STATUS_FAILURE(status))
3149 {
3150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3151 "Failure in Config STA WDI API, free all the memory " );
3152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3153 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003157 return CONVERT_WDI2VOS_STATUS(status) ;
3158}
Jeff Johnson295189b2012-06-20 16:38:30 -07003159/*
3160 * FUNCTION: WDA_DelBSSReqCallback
3161 * Dens DEL BSS RSP back to PE
3162 */
3163void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3164 void* pUserData)
3165{
3166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3167 tWDA_CbContext *pWDA;
3168 tDeleteBssParams *delBssReqParam;
3169 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003171 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 if(NULL == pWdaParams)
3173 {
3174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003175 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 VOS_ASSERT(0) ;
3177 return ;
3178 }
3179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3180 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003181 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3183 {
3184 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3185 sizeof(tSirMacAddr)) ;
3186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0) ;
3192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3194 {
3195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003196 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 VOS_ASSERT(0) ;
3198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3200 {
3201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 VOS_ASSERT(0) ;
3204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3206 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 /* reset the the system role*/
3208 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3209
3210 /* Reset the BA related information */
3211 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3212 {
3213 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3214 {
3215 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3216 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3217 /* Reset framesTxed counters here */
3218 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3219 {
3220 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3221 }
3222 }
3223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 return ;
3226}
3227
Jeff Johnson295189b2012-06-20 16:38:30 -07003228/*
3229 * FUNCTION: WDA_ProcessDelBssReq
3230 * Init DEL BSS req with WDI
3231 */
3232VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3233 tDeleteBssParams *delBssParam)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3237 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3238 sizeof(WDI_DelBSSReqParamsType)) ;
3239 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(NULL == wdiDelBssReqParam)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if(NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 VOS_ASSERT(0);
3255 vos_mem_free(wdiDelBssReqParam);
3256 return VOS_STATUS_E_NOMEM;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3259 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3260
3261 /* Store Init Req pointer, as this will be used for response */
3262 /* store Params pass it to WDI */
3263 pWdaParams->pWdaContext = pWDA;
3264 pWdaParams->wdaMsgParam = delBssParam;
3265 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 status = WDI_DelBSSReq(wdiDelBssReqParam,
3267 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003268 if(IS_WDI_STATUS_FAILURE(status))
3269 {
3270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3271 "Failure in Del BSS WDI API, free all the memory " );
3272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3273 vos_mem_free(pWdaParams) ;
3274 delBssParam->status = eSIR_FAILURE ;
3275 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 return CONVERT_WDI2VOS_STATUS(status) ;
3278}
Jeff Johnson295189b2012-06-20 16:38:30 -07003279/*
3280 * FUNCTION: WDA_DelSTAReqCallback
3281 * Dens DEL STA RSP back to PE
3282 */
3283void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3284 void* pUserData)
3285{
3286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3287 tWDA_CbContext *pWDA;
3288 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 if(NULL == pWdaParams)
3292 {
3293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 VOS_ASSERT(0) ;
3296 return ;
3297 }
3298 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3299 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003300 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3302 {
3303 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3304 {
3305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003306 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 VOS_ASSERT(0) ;
3308 }
3309 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3310 }
3311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3312 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 /*Reset the BA information corresponding to this STAIdx */
3314 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3315 WDA_INVALID_STA_INDEX;
3316 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3317
3318 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return ;
3320}
Jeff Johnson295189b2012-06-20 16:38:30 -07003321/*
3322 * FUNCTION: WDA_ProcessDelStaReq
3323 * Init DEL STA req with WDI
3324 */
3325VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3326 tDeleteStaParams *delStaParam)
3327{
3328 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3330 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3331 sizeof(WDI_DelSTAReqParamsType)) ;
3332 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003334 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 if(NULL == wdiDelStaReqParam)
3336 {
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 VOS_ASSERT(0);
3340 return VOS_STATUS_E_NOMEM;
3341 }
3342 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3343 if(NULL == pWdaParams)
3344 {
3345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 VOS_ASSERT(0);
3348 vos_mem_free(wdiDelStaReqParam);
3349 return VOS_STATUS_E_NOMEM;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3352 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 /* Store Init Req pointer, as this will be used for response */
3354 /* store Params pass it to WDI */
3355 pWdaParams->pWdaContext = pWDA;
3356 pWdaParams->wdaMsgParam = delStaParam;
3357 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 status = WDI_DelSTAReq(wdiDelStaReqParam,
3359 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 if(IS_WDI_STATUS_FAILURE(status))
3361 {
3362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3363 "Failure in Del STA WDI API, free all the memory status = %d",
3364 status );
3365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3366 vos_mem_free(pWdaParams) ;
3367 delStaParam->status = eSIR_FAILURE ;
3368 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 return CONVERT_WDI2VOS_STATUS(status) ;
3371}
Jeff Johnson295189b2012-06-20 16:38:30 -07003372void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3373{
3374 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3375 tWDA_CbContext *pWDA;
3376 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 if(NULL == pWdaParams)
3380 {
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 VOS_ASSERT(0) ;
3384 return ;
3385 }
3386 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3387 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3389 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3391 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3392 pwdiAddSTASelfRsp->macSelfSta,
3393 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 return ;
3396}
Jeff Johnson295189b2012-06-20 16:38:30 -07003397/*
3398 * FUNCTION: WDA_ProcessAddStaSelfReq
3399 *
3400 */
3401VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3402{
3403 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003404 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3406 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3407 sizeof(WDI_AddSTASelfReqParamsType)) ;
3408 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003410 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 if( NULL == wdiAddStaSelfReq )
3412 {
3413 VOS_ASSERT( 0 );
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 return( VOS_STATUS_E_NOMEM );
3417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 if( NULL == pWdaParams )
3420 {
3421 VOS_ASSERT( 0 );
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003423 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 vos_mem_free(wdiAddStaSelfReq) ;
3425 return( VOS_STATUS_E_NOMEM );
3426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3429 /* Store Init Req pointer, as this will be used for response */
3430 /* store Params pass it to WDI */
3431 pWdaParams->pWdaContext = pWDA;
3432 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3433 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003434 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003435
Jeff Johnson43971f52012-07-17 12:26:56 -07003436 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 {
3438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3439 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 wstatus );
3441 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3443 vos_mem_free(pWdaParams) ;
3444 pAddStaSelfReq->status = eSIR_FAILURE ;
3445 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3446 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003447 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448}
Jeff Johnson295189b2012-06-20 16:38:30 -07003449/*
3450 * FUNCTION: WDA_DelSTASelfRespCallback
3451 *
3452 */
3453void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3454 wdiDelStaSelfRspParams , void* pUserData)
3455{
3456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3457 tWDA_CbContext *pWDA;
3458 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 if (NULL == pWdaParams)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003464 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 VOS_ASSERT(0);
3466 return;
3467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3469 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003471 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472
3473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3474 vos_mem_free(pWdaParams) ;
3475
3476 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 return ;
3478}
Jeff Johnson295189b2012-06-20 16:38:30 -07003479/*
3480 * FUNCTION: WDA_DelSTASelfReqCallback
3481 *
3482 */
3483void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3484 void* pUserData)
3485{
3486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3487 tWDA_CbContext *pWDA;
3488 tDelStaSelfParams *delStaSelfParams;
3489
3490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3491 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493
3494 if (NULL == pWdaParams)
3495 {
3496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003497 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 VOS_ASSERT(0);
3499 return;
3500 }
3501
3502 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3503 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3504
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003505 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506
3507 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3508 {
3509 VOS_ASSERT(0);
3510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3511 vos_mem_free(pWdaParams) ;
3512 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3513 }
3514
3515 return ;
3516}
3517
3518/*
3519 * FUNCTION: WDA_DelSTASelfReq
3520 * Trigger Config STA processing in WDI
3521 */
3522VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3523 tDelStaSelfParams* pDelStaSelfReqParam)
3524{
3525 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003526 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 tWDA_ReqParams *pWdaParams = NULL;
3528 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3529 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3530 sizeof(WDI_DelSTASelfReqParamsType)) ;
3531
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 if( NULL == wdiDelStaSelfReq )
3535 {
3536 VOS_ASSERT( 0 );
3537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003538 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 return( VOS_STATUS_E_NOMEM );
3540 }
3541
3542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3543 if( NULL == pWdaParams )
3544 {
3545 VOS_ASSERT( 0 );
3546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003547 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 vos_mem_free(wdiDelStaSelfReq) ;
3549 return( VOS_STATUS_E_NOMEM );
3550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 pWdaParams->pWdaContext = pWDA;
3552 /* Store param pointer as passed in by caller */
3553 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3554 /* store Params pass it to WDI */
3555 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3557 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3558
3559 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3560 wdiDelStaSelfReq->pUserData = pWdaParams;
3561
Jeff Johnson43971f52012-07-17 12:26:56 -07003562 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3564
Jeff Johnson43971f52012-07-17 12:26:56 -07003565 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 {
3567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3568 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3569 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003570 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3572 vos_mem_free(pWdaParams) ;
3573 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3574 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3575 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003576 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577}
3578
Jeff Johnson295189b2012-06-20 16:38:30 -07003579/*
3580 * FUNCTION: WDA_SendMsg
3581 * Send Message back to PE
3582 */
3583void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3584 void *pBodyptr, tANI_U32 bodyVal)
3585{
3586 tSirMsgQ msg = {0} ;
3587 tANI_U32 status = VOS_STATUS_SUCCESS ;
3588 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 msg.type = msgType;
3590 msg.bodyval = bodyVal;
3591 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 if (VOS_STATUS_SUCCESS != status)
3594 {
3595 if(NULL != pBodyptr)
3596 {
3597 vos_mem_free(pBodyptr);
3598 }
3599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003600 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 VOS_ASSERT(0) ;
3602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 return ;
3604}
Jeff Johnson295189b2012-06-20 16:38:30 -07003605/*
3606 * FUNCTION: WDA_UpdateBSSParams
3607 * Translated WDA/PE BSS info into WDI BSS info..
3608 */
3609void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3610 WDI_ConfigBSSReqInfoType *wdiBssParams,
3611 tAddBssParams *wdaBssParams)
3612{
3613 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 /* copy bssReq Params to WDI structure */
3615 vos_mem_copy(wdiBssParams->macBSSID,
3616 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3617 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3618 sizeof(tSirMacAddr)) ;
3619 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3620 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3621 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 wdiBssParams->ucShortSlotTimeSupported =
3623 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3625 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3626 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3627 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3628 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3629
3630 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3631 wdiBssParams->ucTXOPProtectionFullSupport =
3632 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3634 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3637 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3638 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3639 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3640
Chet Lanctot186b5732013-03-18 10:26:30 -07003641 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3642
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 /* copy SSID into WDI structure */
3644 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3645 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3646 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3648 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003650#ifdef WLAN_FEATURE_VOWIFI
3651 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3652#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655#ifdef WLAN_FEATURE_VOWIFI_11R
3656 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 if(wdiBssParams->bExtSetStaKeyParamValid)
3658 {
3659 /* copy set STA key params to WDI structure */
3660 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3661 wdaBssParams->extSetStaKeyParam.staIdx;
3662 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3663 wdaBssParams->extSetStaKeyParam.encType;
3664 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3665 wdaBssParams->extSetStaKeyParam.wepType;
3666 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3667 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3669 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003670 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3672 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3673 {
3674 WDA_GetWepKeysFromCfg( pWDA,
3675 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3676 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3677 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3678 }
3679 else
3680 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3682 keyIndex++)
3683 {
3684 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3685 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3686 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3687 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3688 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3691 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3692 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3693 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3694 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3695 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3696 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3697 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3700 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 }
3702 }
3703 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3704 }
3705 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3706 {
3707 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3708 sizeof(wdaBssParams->extSetStaKeyParam) );
3709 }
3710#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003711#ifdef WLAN_FEATURE_11AC
3712 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3713 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3714#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003715
3716 return ;
3717}
Jeff Johnson295189b2012-06-20 16:38:30 -07003718/*
3719 * FUNCTION: WDA_UpdateSTAParams
3720 * Translated WDA/PE BSS info into WDI BSS info..
3721 */
3722void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3723 WDI_ConfigStaReqInfoType *wdiStaParams,
3724 tAddStaParams *wdaStaParams)
3725{
3726 tANI_U8 i = 0;
3727 /* Update STA params */
3728 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3729 sizeof(tSirMacAddr)) ;
3730 wdiStaParams->usAssocId = wdaStaParams->assocId;
3731 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003732 wdiStaParams->staIdx = wdaStaParams->staIdx;
3733
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 wdiStaParams->ucShortPreambleSupported =
3735 wdaStaParams->shortPreambleSupported;
3736 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3737 sizeof(tSirMacAddr)) ;
3738 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3739
3740 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3741
3742 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3743 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3744 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3745 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3746 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3747 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3748 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3749
3750 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3751 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 wdiStaParams->wdiSupportedRates.opRateMode =
3753 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3755 {
3756 wdiStaParams->wdiSupportedRates.llbRates[i] =
3757 wdaStaParams->supportedRates.llbRates[i];
3758 }
3759 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3760 {
3761 wdiStaParams->wdiSupportedRates.llaRates[i] =
3762 wdaStaParams->supportedRates.llaRates[i];
3763 }
3764 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3765 {
3766 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3767 wdaStaParams->supportedRates.aniLegacyRates[i];
3768 }
3769 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3770 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003771#ifdef WLAN_FEATURE_11AC
3772 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3773 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3774 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3775 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3776#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3778 {
3779 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3780 wdaStaParams->supportedRates.supportedMCSSet[i];
3781 }
3782 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3783 wdaStaParams->supportedRates.rxHighestDataRate;
3784
3785 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3786
3787 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3788
3789 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3790 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3791 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3792
3793 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3794 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3795 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3796 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003798#ifdef WLAN_FEATURE_11AC
3799 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3800 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003801 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003802#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003803 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3804 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 return ;
3806}
Jeff Johnson295189b2012-06-20 16:38:30 -07003807/*
3808 * -------------------------------------------------------------------------
3809 * CFG update to WDI
3810 * -------------------------------------------------------------------------
3811 */
3812
3813 /*
3814 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3815 * Convert the WNI CFG ID to HAL CFG ID
3816 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003817static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003818{
3819 switch(wniCfgId)
3820 {
3821 case WNI_CFG_STA_ID:
3822 return QWLAN_HAL_CFG_STA_ID;
3823 case WNI_CFG_CURRENT_TX_ANTENNA:
3824 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3825 case WNI_CFG_CURRENT_RX_ANTENNA:
3826 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3827 case WNI_CFG_LOW_GAIN_OVERRIDE:
3828 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3829 case WNI_CFG_POWER_STATE_PER_CHAIN:
3830 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3831 case WNI_CFG_CAL_PERIOD:
3832 return QWLAN_HAL_CFG_CAL_PERIOD;
3833 case WNI_CFG_CAL_CONTROL:
3834 return QWLAN_HAL_CFG_CAL_CONTROL;
3835 case WNI_CFG_PROXIMITY:
3836 return QWLAN_HAL_CFG_PROXIMITY;
3837 case WNI_CFG_NETWORK_DENSITY:
3838 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3839 case WNI_CFG_MAX_MEDIUM_TIME:
3840 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3841 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3842 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3843 case WNI_CFG_RTS_THRESHOLD:
3844 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3845 case WNI_CFG_SHORT_RETRY_LIMIT:
3846 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3847 case WNI_CFG_LONG_RETRY_LIMIT:
3848 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3849 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3850 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3851 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3852 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3853 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3854 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3855 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3856 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3857 case WNI_CFG_FIXED_RATE:
3858 return QWLAN_HAL_CFG_FIXED_RATE;
3859 case WNI_CFG_RETRYRATE_POLICY:
3860 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3861 case WNI_CFG_RETRYRATE_SECONDARY:
3862 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3863 case WNI_CFG_RETRYRATE_TERTIARY:
3864 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3865 case WNI_CFG_FORCE_POLICY_PROTECTION:
3866 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3867 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3868 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3869 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3870 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3871 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3872 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3873 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3874 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3875 case WNI_CFG_MAX_BA_SESSIONS:
3876 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3877 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3878 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3879 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3880 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3881 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3882 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3883 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3884 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3885 case WNI_CFG_STATS_PERIOD:
3886 return QWLAN_HAL_CFG_STATS_PERIOD;
3887 case WNI_CFG_CFP_MAX_DURATION:
3888 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3889#if 0 /*This is not part of CFG*/
3890 case WNI_CFG_FRAME_TRANS_ENABLED:
3891 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3892#endif
3893 case WNI_CFG_DTIM_PERIOD:
3894 return QWLAN_HAL_CFG_DTIM_PERIOD;
3895 case WNI_CFG_EDCA_WME_ACBK:
3896 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3897 case WNI_CFG_EDCA_WME_ACBE:
3898 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3899 case WNI_CFG_EDCA_WME_ACVI:
3900 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3901 case WNI_CFG_EDCA_WME_ACVO:
3902 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3903#if 0
3904 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3905 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3906 case WNI_CFG_TELE_BCN_TRANS_LI:
3907 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3908 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3909 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3910 case WNI_CFG_TELE_BCN_MAX_LI:
3911 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3912 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3913 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3914#endif
3915 case WNI_CFG_ENABLE_CLOSE_LOOP:
3916 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003917 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3918 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 default:
3920 {
3921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3922 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3923 wniCfgId);
3924 return VOS_STATUS_E_INVAL;
3925 }
3926 }
3927}
Jeff Johnson295189b2012-06-20 16:38:30 -07003928/*
3929 * FUNCTION: WDA_UpdateCfgCallback
3930 *
3931 */
3932void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3933{
3934 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3935 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3936 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003938 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003939 /*
3940 * currently there is no response message is expected between PE and
3941 * WDA, Failure return from WDI is a ASSERT condition
3942 */
3943 if(WDI_STATUS_SUCCESS != wdiStatus)
3944 {
3945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003946 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3948 }
3949
3950 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3951 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3952 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 return ;
3954}
Jeff Johnson295189b2012-06-20 16:38:30 -07003955/*
3956 * FUNCTION: WDA_UpdateCfg
3957 *
3958 */
3959VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3960{
3961
3962 WDI_Status status = WDI_STATUS_SUCCESS ;
3963 tANI_U32 val =0;
3964 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3965 tHalCfg *configData;
3966 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3967 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003969 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 if (NULL == pMac )
3971 {
3972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003973 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 return VOS_STATUS_E_FAILURE;
3975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 if(WDA_START_STATE != pWDA->wdaState)
3977 {
3978 return VOS_STATUS_E_FAILURE;
3979 }
3980
3981 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3982 {
3983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 VOS_ASSERT(0);
3986 return VOS_STATUS_E_FAILURE;
3987 }
3988
3989 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3990 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 if(NULL == wdiCfgReqParam)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0);
3996 return VOS_STATUS_E_NOMEM;
3997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3999 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 if(NULL == wdiCfgReqParam->pConfigBuffer)
4001 {
4002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004003 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 vos_mem_free(wdiCfgReqParam);
4005 VOS_ASSERT(0);
4006 return VOS_STATUS_E_NOMEM;
4007 }
4008
4009 /*convert the WNI CFG Id to HAL CFG Id*/
4010 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4011 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4012
4013 /*TODO: revisit this for handling string parameters */
4014 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4015 &val) != eSIR_SUCCESS)
4016 {
4017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4018 "Failed to cfg get id %d\n", cfgParam->bodyval);
4019 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4020 vos_mem_free(wdiCfgReqParam);
4021 return eSIR_FAILURE;
4022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4024 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4025 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4026 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4027 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4028
4029 /* store Params pass it to WDI */
4030 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004031#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4032 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4033 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 if(IS_WDI_STATUS_FAILURE(status))
4035 {
4036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4037 "Failure in Update CFG WDI API, free all the memory " );
4038 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4039 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4040 pWDA->wdaWdiCfgApiMsgParam = NULL;
4041 /* Failure is not expected */
4042 VOS_ASSERT(0) ;
4043 }
4044#else
4045 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4046 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4047 pWDA->wdaWdiCfgApiMsgParam = NULL;
4048#endif
4049 return CONVERT_WDI2VOS_STATUS(status) ;
4050}
4051
Jeff Johnson295189b2012-06-20 16:38:30 -07004052VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4053 v_U8_t *pDefaultKeyId,
4054 v_U8_t *pNumKeys,
4055 WDI_KeysType *pWdiKeys )
4056{
4057 v_U32_t i, j, defKeyId = 0;
4058 v_U32_t val = SIR_MAC_KEY_LENGTH;
4059 VOS_STATUS status = WDI_STATUS_SUCCESS;
4060 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 if (NULL == pMac )
4062 {
4063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004064 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 return VOS_STATUS_E_FAILURE;
4066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4068 &defKeyId ))
4069 {
4070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4071 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4072 }
4073
4074 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 /* Need to extract ALL of the configured WEP Keys */
4076 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4077 {
4078 val = SIR_MAC_KEY_LENGTH;
4079 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4080 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4081 pWdiKeys[j].key,
4082 &val ))
4083 {
4084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4085 "WEP Key index [%d] may not configured in CFG\n",i);
4086 }
4087 else
4088 {
4089 pWdiKeys[j].keyId = (tANI_U8) i;
4090 /*
4091 * Actually, a DC (Don't Care) because
4092 * this is determined (and set) by PE/MLME
4093 */
4094 pWdiKeys[j].unicast = 0;
4095 /*
4096 * Another DC (Don't Care)
4097 */
4098 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4099 /* Another DC (Don't Care). Unused for WEP */
4100 pWdiKeys[j].paeRole = 0;
4101 /* Determined from wlan_cfgGetStr() above.*/
4102 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 j++;
4104 *pNumKeys = (tANI_U8) j;
4105 }
4106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 return status;
4108}
Jeff Johnson295189b2012-06-20 16:38:30 -07004109/*
4110 * FUNCTION: WDA_SetBssKeyReqCallback
4111 * send SET BSS key RSP back to PE
4112 */
4113void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4114{
4115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4116 tWDA_CbContext *pWDA;
4117 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004119 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 if(NULL == pWdaParams)
4121 {
4122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004123 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 VOS_ASSERT(0) ;
4125 return ;
4126 }
4127 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4128 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4130 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004131 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 return ;
4134}
Jeff Johnson295189b2012-06-20 16:38:30 -07004135/*
4136 * FUNCTION: WDA_ProcessSetBssKeyReq
4137 * Request to WDI for programming the BSS key( key for
4138 * broadcast/multicast frames Encryption)
4139 */
4140VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4141 tSetBssKeyParams *setBssKeyParams )
4142{
4143 WDI_Status status = WDI_STATUS_SUCCESS ;
4144 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4145 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4146 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4147 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 if(NULL == wdiSetBssKeyParam)
4152 {
4153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 VOS_ASSERT(0);
4156 return VOS_STATUS_E_NOMEM;
4157 }
4158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4159 if(NULL == pWdaParams)
4160 {
4161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 VOS_ASSERT(0);
4164 vos_mem_free(wdiSetBssKeyParam);
4165 return VOS_STATUS_E_NOMEM;
4166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 /* copy set BSS params to WDI structure */
4169 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4170 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4171 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if(setBssKeyParams->encType != eSIR_ED_NONE)
4173 {
4174 if( setBssKeyParams->numKeys == 0 &&
4175 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4176 setBssKeyParams->encType == eSIR_ED_WEP104))
4177 {
4178 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4180 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4181 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4182 }
4183 else
4184 {
4185 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4186 {
4187 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4188 setBssKeyParams->key[keyIndex].keyId;
4189 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4190 setBssKeyParams->key[keyIndex].unicast;
4191 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4192 setBssKeyParams->key[keyIndex].keyDirection;
4193 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4194 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4195 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4196 setBssKeyParams->key[keyIndex].paeRole;
4197 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4198 setBssKeyParams->key[keyIndex].keyLength;
4199 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4200 setBssKeyParams->key[keyIndex].key,
4201 SIR_MAC_MAX_KEY_LENGTH);
4202 }
4203 }
4204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4206 setBssKeyParams->singleTidRc;
4207 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 /* Store set key pointer, as this will be used for response */
4209 /* store Params pass it to WDI */
4210 pWdaParams->pWdaContext = pWDA;
4211 pWdaParams->wdaMsgParam = setBssKeyParams;
4212 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4214 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4215
4216 if(IS_WDI_STATUS_FAILURE(status))
4217 {
4218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4219 "Failure in Set BSS Key Req WDI API, free all the memory " );
4220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4221 vos_mem_free(pWdaParams) ;
4222 setBssKeyParams->status = eSIR_FAILURE ;
4223 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 return CONVERT_WDI2VOS_STATUS(status) ;
4226}
Jeff Johnson295189b2012-06-20 16:38:30 -07004227/*
4228 * FUNCTION: WDA_RemoveBssKeyReqCallback
4229 * send SET BSS key RSP back to PE
4230 */
4231void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4232{
4233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4234 tWDA_CbContext *pWDA;
4235 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 if(NULL == pWdaParams)
4239 {
4240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 VOS_ASSERT(0) ;
4243 return ;
4244 }
4245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4246 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4248 vos_mem_free(pWdaParams) ;
4249
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004250 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 return ;
4253}
Jeff Johnson295189b2012-06-20 16:38:30 -07004254/*
4255 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4256 * Request to WDI to remove the BSS key( key for broadcast/multicast
4257 * frames Encryption)
4258 */
4259VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4260 tRemoveBssKeyParams *removeBssKeyParams )
4261{
4262 WDI_Status status = WDI_STATUS_SUCCESS ;
4263 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4264 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4265 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4266 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 if(NULL == wdiRemoveBssKeyParam)
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_ASSERT(0);
4274 return VOS_STATUS_E_NOMEM;
4275 }
4276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4277 if(NULL == pWdaParams)
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 VOS_ASSERT(0);
4282 vos_mem_free(wdiRemoveBssKeyParam);
4283 return VOS_STATUS_E_NOMEM;
4284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 /* copy Remove BSS key params to WDI structure*/
4286 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4287 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4288 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4289 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4290 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 /* Store remove key pointer, as this will be used for response */
4292 /* store Params pass it to WDI */
4293 pWdaParams->pWdaContext = pWDA;
4294 pWdaParams->wdaMsgParam = removeBssKeyParams;
4295 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4297 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 if(IS_WDI_STATUS_FAILURE(status))
4299 {
4300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4301 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4303 vos_mem_free(pWdaParams) ;
4304 removeBssKeyParams->status = eSIR_FAILURE ;
4305 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 return CONVERT_WDI2VOS_STATUS(status) ;
4308}
Jeff Johnson295189b2012-06-20 16:38:30 -07004309/*
4310 * FUNCTION: WDA_SetBssKeyReqCallback
4311 * send SET BSS key RSP back to PE
4312 */
4313void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4314{
4315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4316 tWDA_CbContext *pWDA;
4317 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004319 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 if(NULL == pWdaParams)
4321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_ASSERT(0) ;
4325 return ;
4326 }
4327 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4328 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004331 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 return ;
4334}
Jeff Johnson295189b2012-06-20 16:38:30 -07004335/*
4336 * FUNCTION: WDA_ProcessSetStaKeyReq
4337 * Request to WDI for programming the STA key( key for Unicast frames
4338 * Encryption)
4339 */
4340VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4341 tSetStaKeyParams *setStaKeyParams )
4342{
4343 WDI_Status status = WDI_STATUS_SUCCESS ;
4344 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4345 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4346 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4347 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004350 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if(NULL == wdiSetStaKeyParam)
4352 {
4353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 VOS_ASSERT(0);
4356 return VOS_STATUS_E_NOMEM;
4357 }
4358 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4359 if(NULL == pWdaParams)
4360 {
4361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 VOS_ASSERT(0);
4364 vos_mem_free(wdiSetStaKeyParam);
4365 return VOS_STATUS_E_NOMEM;
4366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 /* copy set STA key params to WDI structure */
4370 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4371 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4372 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4373 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 if(setStaKeyParams->encType != eSIR_ED_NONE)
4375 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004376 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4378 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4379 {
4380 WDA_GetWepKeysFromCfg( pWDA,
4381 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4382 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4383 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4384 }
4385 else
4386 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4388 keyIndex++)
4389 {
4390 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4391 setStaKeyParams->key[keyIndex].keyId;
4392 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4393 setStaKeyParams->key[keyIndex].unicast;
4394 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4395 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4397 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4398 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4399 setStaKeyParams->key[keyIndex].paeRole;
4400 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4401 setStaKeyParams->key[keyIndex].keyLength;
4402 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4403 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4404 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4405 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4406 {
4407 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4408 }
4409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4411 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 }
4413 }
4414 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4415 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 /* Store set key pointer, as this will be used for response */
4417 /* store Params pass it to WDI */
4418 pWdaParams->pWdaContext = pWDA;
4419 pWdaParams->wdaMsgParam = setStaKeyParams;
4420 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4422 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if(IS_WDI_STATUS_FAILURE(status))
4424 {
4425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4426 "Failure in set STA Key Req WDI API, free all the memory " );
4427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4428 vos_mem_free(pWdaParams) ;
4429 setStaKeyParams->status = eSIR_FAILURE ;
4430 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 return CONVERT_WDI2VOS_STATUS(status) ;
4433}
Jeff Johnson295189b2012-06-20 16:38:30 -07004434/*
4435 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4436 * send SET Bcast STA key RSP back to PE
4437 */
4438void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4439{
4440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4441 tWDA_CbContext *pWDA;
4442 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 if(NULL == pWdaParams)
4446 {
4447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 VOS_ASSERT(0) ;
4450 return ;
4451 }
4452 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4453 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4455 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004456 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 return ;
4459}
4460
Jeff Johnson295189b2012-06-20 16:38:30 -07004461/*
4462 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4463 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4464 * Encryption)
4465 */
4466VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4467 tSetStaKeyParams *setStaKeyParams )
4468{
4469 WDI_Status status = WDI_STATUS_SUCCESS ;
4470 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4471 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4472 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4473 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004476 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 if(NULL == wdiSetStaKeyParam)
4478 {
4479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_ASSERT(0);
4482 return VOS_STATUS_E_NOMEM;
4483 }
4484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4485 if(NULL == pWdaParams)
4486 {
4487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 VOS_ASSERT(0);
4490 vos_mem_free(wdiSetStaKeyParam);
4491 return VOS_STATUS_E_NOMEM;
4492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 /* copy set STA key params to WDI structure */
4496 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4497 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4498 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4499 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 if(setStaKeyParams->encType != eSIR_ED_NONE)
4501 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4503 keyIndex++)
4504 {
4505 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4506 setStaKeyParams->key[keyIndex].keyId;
4507 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4508 setStaKeyParams->key[keyIndex].unicast;
4509 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4510 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4512 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4513 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4514 setStaKeyParams->key[keyIndex].paeRole;
4515 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4516 setStaKeyParams->key[keyIndex].keyLength;
4517 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4518 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4521 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 }
4523 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 /* Store set key pointer, as this will be used for response */
4525 /* store Params pass it to WDI */
4526 pWdaParams->pWdaContext = pWDA;
4527 pWdaParams->wdaMsgParam = setStaKeyParams;
4528 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004529 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4530 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 if(IS_WDI_STATUS_FAILURE(status))
4532 {
4533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4534 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4536 vos_mem_free(pWdaParams) ;
4537 setStaKeyParams->status = eSIR_FAILURE ;
4538 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 return CONVERT_WDI2VOS_STATUS(status) ;
4541}
Jeff Johnson295189b2012-06-20 16:38:30 -07004542/*
4543 * FUNCTION: WDA_RemoveStaKeyReqCallback
4544 * send SET BSS key RSP back to PE
4545 */
4546void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4547{
4548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4549 tWDA_CbContext *pWDA;
4550 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 if(NULL == pWdaParams)
4554 {
4555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 VOS_ASSERT(0) ;
4558 return ;
4559 }
4560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4561 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4563 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004564 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 return ;
4567}
4568
Jeff Johnson295189b2012-06-20 16:38:30 -07004569/*
4570 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4571 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4572 */
4573VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4574 tRemoveStaKeyParams *removeStaKeyParams )
4575{
4576 WDI_Status status = WDI_STATUS_SUCCESS ;
4577 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4578 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4579 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4580 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004582 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 if(NULL == wdiRemoveStaKeyParam)
4584 {
4585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 VOS_ASSERT(0);
4588 return VOS_STATUS_E_NOMEM;
4589 }
4590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4591 if(NULL == pWdaParams)
4592 {
4593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 VOS_ASSERT(0);
4596 vos_mem_free(wdiRemoveStaKeyParam);
4597 return VOS_STATUS_E_NOMEM;
4598 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 /* copy remove STA key params to WDI structure*/
4600 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4601 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4602 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4603 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4604 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 /* Store remove key pointer, as this will be used for response */
4606 /* store Params pass it to WDI */
4607 pWdaParams->pWdaContext = pWDA;
4608 pWdaParams->wdaMsgParam = removeStaKeyParams;
4609 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4611 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 if(IS_WDI_STATUS_FAILURE(status))
4613 {
4614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4615 "Failure in remove STA Key Req WDI API, free all the memory " );
4616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4617 vos_mem_free(pWdaParams) ;
4618 removeStaKeyParams->status = eSIR_FAILURE ;
4619 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 return CONVERT_WDI2VOS_STATUS(status) ;
4622}
Jeff Johnson295189b2012-06-20 16:38:30 -07004623/*
4624 * FUNCTION: WDA_IsHandleSetLinkStateReq
4625 * Update the WDA state and return the status to handle this message or not
4626 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004627WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4628 tWDA_CbContext *pWDA,
4629 tLinkStateParams *linkStateParams)
4630{
4631 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004632 switch(linkStateParams->state)
4633 {
4634 case eSIR_LINK_PREASSOC_STATE:
4635 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4636 /*
4637 * set the WDA state to PRE ASSOC
4638 * copy the BSSID into pWDA to use it in join request and return,
4639 * No need to handle these messages.
4640 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004641 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4642 {
4643 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004645 }
4646 else
4647 {
4648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004649 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004650 VOS_ASSERT(0);
4651 }
4652
4653 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4654 {
4655 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004657 }
4658 else
4659 {
4660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004661 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004662 VOS_ASSERT(0);
4663 }
4664
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4666 *channel and after ) so reset the WDA state to ready when the second
4667 * time UMAC issue the link state with PREASSOC
4668 */
4669 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4670 {
4671 /* RESET WDA state back to WDA_READY_STATE */
4672 pWDA->wdaState = WDA_READY_STATE;
4673 }
4674 else
4675 {
4676 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4677 }
4678 //populate linkState info in WDACbCtxt
4679 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 default:
4682 if(pWDA->wdaState != WDA_READY_STATE)
4683 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004684 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4685 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4686 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4687 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4688 *the ASSERT in WDA_Stop during module unload.*/
4689 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4690 {
4691 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004692 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004693 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004694 else
4695 {
4696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004697 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004698 status = WDA_IGNORE_SET_LINK_STATE;
4699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 }
4701 break;
4702 }
4703
4704 return status;
4705}
Jeff Johnson295189b2012-06-20 16:38:30 -07004706/*
4707 * FUNCTION: WDA_SetLinkStateCallback
4708 * call back function for set link state from WDI
4709 */
4710void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4711{
4712 tWDA_CbContext *pWDA;
4713 tLinkStateParams *linkStateParams;
4714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004716 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 if(NULL == pWdaParams)
4718 {
4719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004720 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 VOS_ASSERT(0) ;
4722 return ;
4723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 /*
4727 * In STA mode start the BA activity check timer after association
4728 * and in AP mode start BA activity check timer after BSS start */
4729 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4730 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4731 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4732 {
4733 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 /*
4737 * No respone required for WDA_SET_LINK_STATE so free the request
4738 * param here
4739 */
4740 if( pWdaParams != NULL )
4741 {
4742 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4743 {
4744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4745 }
4746 vos_mem_free(pWdaParams);
4747 }
4748 return ;
4749}
Jeff Johnson295189b2012-06-20 16:38:30 -07004750/*
4751 * FUNCTION: WDA_ProcessSetLinkState
4752 * Request to WDI to set the link status.
4753 */
4754VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4755 tLinkStateParams *linkStateParams)
4756{
4757 WDI_Status status = WDI_STATUS_SUCCESS ;
4758 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4759 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4760 sizeof(WDI_SetLinkReqParamsType)) ;
4761 tWDA_ReqParams *pWdaParams ;
4762 tpAniSirGlobal pMac;
4763 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4764
4765 if(NULL == pMac)
4766 {
4767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004768 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004770 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 return VOS_STATUS_E_FAILURE;
4772 }
4773
4774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004775 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 if(NULL == wdiSetLinkStateParam)
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 VOS_ASSERT(0);
4781 return VOS_STATUS_E_NOMEM;
4782 }
4783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4784 if(NULL == pWdaParams)
4785 {
4786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 VOS_ASSERT(0);
4789 vos_mem_free(wdiSetLinkStateParam);
4790 return VOS_STATUS_E_NOMEM;
4791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 if(WDA_IGNORE_SET_LINK_STATE ==
4793 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4794 {
4795 status = WDI_STATUS_E_FAILURE;
4796 }
4797 else
4798 {
4799 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4800 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4802 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4804 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 pWdaParams->pWdaContext = pWDA;
4806 /* Store remove key pointer, as this will be used for response */
4807 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 /* store Params pass it to WDI */
4809 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4810 /* Stop Timer only other than GO role and concurrent session */
4811 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4812 && !vos_concurrent_sessions_running() &&
4813 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4814 {
4815 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4818 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 if(IS_WDI_STATUS_FAILURE(status))
4820 {
4821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4822 "Failure in set link state Req WDI API, free all the memory " );
4823 }
4824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 if(IS_WDI_STATUS_FAILURE(status))
4826 {
4827 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004828 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 vos_mem_free(pWdaParams);
4830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 return CONVERT_WDI2VOS_STATUS(status) ;
4832}
Jeff Johnson295189b2012-06-20 16:38:30 -07004833/*
4834 * FUNCTION: WDA_GetStatsReqParamsCallback
4835 * send the response to PE with Stats received from WDI
4836 */
4837void WDA_GetStatsReqParamsCallback(
4838 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4839 void* pUserData)
4840{
4841 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4842 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4843
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 pGetPEStatsRspParams =
4847 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4848 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4849
4850 if(NULL == pGetPEStatsRspParams)
4851 {
4852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004853 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_ASSERT(0);
4855 return;
4856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4858 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4859 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4860 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4861 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4862
4863 //Fill the Session Id Properly in PE
4864 pGetPEStatsRspParams->sessionId = 0;
4865 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004866 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4868 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 vos_mem_copy( pGetPEStatsRspParams + 1,
4870 wdiGetStatsRsp + 1,
4871 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 /* send response to UMAC*/
4873 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4874
4875 return;
4876}
4877
Jeff Johnson295189b2012-06-20 16:38:30 -07004878/*
4879 * FUNCTION: WDA_ProcessGetStatsReq
4880 * Request to WDI to get the statistics
4881 */
4882VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4883 tAniGetPEStatsReq *pGetStatsParams)
4884{
4885 WDI_Status status = WDI_STATUS_SUCCESS ;
4886 WDI_GetStatsReqParamsType wdiGetStatsParam;
4887 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4891 pGetStatsParams->staId;
4892 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4893 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 status = WDI_GetStatsReq(&wdiGetStatsParam,
4896 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 if(IS_WDI_STATUS_FAILURE(status))
4898 {
4899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4900 "Failure in Get Stats Req WDI API, free all the memory " );
4901 pGetPEStatsRspParams =
4902 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4903 if(NULL == pGetPEStatsRspParams)
4904 {
4905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004908 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 return VOS_STATUS_E_NOMEM;
4910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4912 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4913 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4914 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4915 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4916 (void *)pGetPEStatsRspParams, 0) ;
4917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 /* Free the request message */
4919 vos_mem_free(pGetStatsParams);
4920 return CONVERT_WDI2VOS_STATUS(status);
4921}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004922
4923#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4924/*
4925 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4926 * send the response to PE with roam Rssi received from WDI
4927 */
4928void WDA_GetRoamRssiReqParamsCallback(
4929 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4930 void* pUserData)
4931{
4932 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4933 tWDA_CbContext *pWDA = NULL;
4934 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4935 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4937 "<------ %s " ,__func__);
4938 if(NULL == pWdaParams)
4939 {
4940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4941 "%s: pWdaParams received NULL", __func__);
4942 VOS_ASSERT(0) ;
4943 return ;
4944 }
4945 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4946 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
4947
4948 if(NULL == pGetRoamRssiReqParams)
4949 {
4950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4951 "%s: pGetRoamRssiReqParams received NULL", __func__);
4952 VOS_ASSERT(0);
4953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4954 vos_mem_free(pWdaParams);
4955 return ;
4956 }
4957 pGetRoamRssiRspParams =
4958 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
4959
4960 if(NULL == pGetRoamRssiRspParams)
4961 {
4962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4963 "%s: VOS MEM Alloc Failure", __func__);
4964 VOS_ASSERT(0);
4965 return;
4966 }
4967 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
4968 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004969 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004970 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
4971 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
4972
4973 /* Assign get roam rssi req (backup) in to the response */
4974 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
4975
4976 /* free WDI command buffer */
4977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4978 vos_mem_free(pWdaParams) ;
4979
4980 /* send response to UMAC*/
4981 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
4982
4983 return;
4984}
4985
4986
4987
4988/*
4989 * FUNCTION: WDA_ProcessGetRoamRssiReq
4990 * Request to WDI to get the statistics
4991 */
4992VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
4993 tAniGetRssiReq *pGetRoamRssiParams)
4994{
4995 WDI_Status status = WDI_STATUS_SUCCESS ;
4996 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
4997 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4998 tWDA_ReqParams *pWdaParams = NULL;
4999
5000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5001 "------> %s " ,__func__);
5002 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5003 pGetRoamRssiParams->staId;
5004 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5005
5006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5007 if(NULL == pWdaParams)
5008 {
5009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5010 "%s: VOS MEM Alloc Failure", __func__);
5011 VOS_ASSERT(0);
5012 return VOS_STATUS_E_NOMEM;
5013 }
5014
5015 /* Store Init Req pointer, as this will be used for response */
5016 pWdaParams->pWdaContext = pWDA;
5017
5018 /* Take Get roam Rssi req backup as it stores the callback to be called after
5019 receiving the response */
5020 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5021 pWdaParams->wdaWdiApiMsgParam = NULL;
5022
5023 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5024 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5025 if(IS_WDI_STATUS_FAILURE(status))
5026 {
5027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5028 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5029 pGetRoamRssiRspParams =
5030 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5031 if(NULL == pGetRoamRssiRspParams)
5032 {
5033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5034 "%s: VOS MEM Alloc Failure", __func__);
5035 VOS_ASSERT(0);
5036 vos_mem_free(pGetRoamRssiParams);
5037 vos_mem_free(pWdaParams);
5038 return VOS_STATUS_E_NOMEM;
5039 }
5040 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5041 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5042 pGetRoamRssiRspParams->rssi = 0;
5043 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5044 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5045 (void *)pGetRoamRssiRspParams, 0) ;
5046 }
5047 return CONVERT_WDI2VOS_STATUS(status);
5048}
5049#endif
5050
5051
Jeff Johnson295189b2012-06-20 16:38:30 -07005052/*
5053 * FUNCTION: WDA_UpdateEDCAParamCallback
5054 * call back function for Update EDCA params from WDI
5055 */
5056void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5057{
5058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5059 tEdcaParams *pEdcaParams;
5060
5061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005062 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 if(NULL == pWdaParams)
5064 {
5065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005066 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 VOS_ASSERT(0) ;
5068 return ;
5069 }
5070 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5072 vos_mem_free(pWdaParams);
5073 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 return ;
5075}
Jeff Johnson295189b2012-06-20 16:38:30 -07005076/*
5077 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5078 * Request to WDI to Update the EDCA params.
5079 */
5080VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5081 tEdcaParams *pEdcaParams)
5082{
5083 WDI_Status status = WDI_STATUS_SUCCESS ;
5084 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5085 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5086 sizeof(WDI_UpdateEDCAParamsType)) ;
5087 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005089 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 if(NULL == wdiEdcaParam)
5091 {
5092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005095 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 return VOS_STATUS_E_NOMEM;
5097 }
5098 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5099 if(NULL == pWdaParams)
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 VOS_ASSERT(0);
5104 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005105 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 return VOS_STATUS_E_NOMEM;
5107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5109 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5110 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5111 &pEdcaParams->acbe);
5112 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5113 &pEdcaParams->acbk);
5114 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5115 &pEdcaParams->acvi);
5116 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5117 &pEdcaParams->acvo);
5118 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 pWdaParams->pWdaContext = pWDA;
5120 /* Store remove key pointer, as this will be used for response */
5121 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 /* store Params pass it to WDI */
5123 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5125 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 if(IS_WDI_STATUS_FAILURE(status))
5127 {
5128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5129 "Failure in Update EDCA Params WDI API, free all the memory " );
5130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5131 vos_mem_free(pWdaParams);
5132 vos_mem_free(pEdcaParams);
5133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005134 return CONVERT_WDI2VOS_STATUS(status) ;
5135}
Jeff Johnson295189b2012-06-20 16:38:30 -07005136/*
5137 * FUNCTION: WDA_AddBAReqCallback
5138 * send ADD BA RSP back to PE
5139 */
5140void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5141 void* pUserData)
5142{
5143 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5144 tWDA_CbContext *pWDA;
5145 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005147 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 if(NULL == pWdaParams)
5149 {
5150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 VOS_ASSERT(0) ;
5153 return ;
5154 }
5155 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5156 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5158 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005159 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 return ;
5162}
5163
Jeff Johnson295189b2012-06-20 16:38:30 -07005164/*
5165 * FUNCTION: WDA_ProcessAddBAReq
5166 * Request to WDI to Update the ADDBA REQ params.
5167 */
5168VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5169 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5170{
Jeff Johnson43971f52012-07-17 12:26:56 -07005171 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5173 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5174 sizeof(WDI_AddBAReqParamsType)) ;
5175 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005177 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 if(NULL == wdiAddBAReqParam)
5179 {
5180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 VOS_ASSERT(0);
5183 return VOS_STATUS_E_NOMEM;
5184 }
5185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5186 if(NULL == pWdaParams)
5187 {
5188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 VOS_ASSERT(0);
5191 vos_mem_free(wdiAddBAReqParam);
5192 return VOS_STATUS_E_NOMEM;
5193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 do
5195 {
5196 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 wdiAddBaInfo->ucSTAIdx = staIdx ;
5198 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5199 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 } while(0) ;
5201 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 pWdaParams->pWdaContext = pWDA;
5203 /* store Params pass it to WDI */
5204 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5205 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005206 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5207 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005208
Jeff Johnson43971f52012-07-17 12:26:56 -07005209 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 {
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005212 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5213 status = CONVERT_WDI2VOS_STATUS(wstatus);
5214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 vos_mem_free(pWdaParams);
5216 pAddBAReqParams->status = eSIR_FAILURE;
5217 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5218 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005219 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005220}
Jeff Johnson295189b2012-06-20 16:38:30 -07005221/*
5222 * FUNCTION: WDA_AddBASessionReqCallback
5223 * send ADD BA SESSION RSP back to PE/(or TL)
5224 */
5225void WDA_AddBASessionReqCallback(
5226 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5227{
5228 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5230 tWDA_CbContext *pWDA;
5231 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005233 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005234 if(NULL == pWdaParams)
5235 {
5236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005237 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 VOS_ASSERT(0) ;
5239 return ;
5240 }
5241 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5242 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 if( NULL == pAddBAReqParams )
5244 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005246 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5249 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 return ;
5251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5253 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 /*
5255 * if WDA in update TL state, update TL with BA session parama and send
5256 * another request to HAL(/WDI) (ADD_BA_REQ)
5257 */
5258
5259 if((VOS_STATUS_SUCCESS ==
5260 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5261 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5262 {
5263 /* Update TL with BA info received from HAL/WDI */
5264 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5265 wdiAddBaSession->usBaSessionID,
5266 wdiAddBaSession->ucSTAIdx,
5267 wdiAddBaSession->ucBaTID,
5268 wdiAddBaSession->ucBaBufferSize,
5269 wdiAddBaSession->ucWinSize,
5270 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5272 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5273 }
5274 else
5275 {
5276 pAddBAReqParams->status =
5277 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5278
5279 /* Setting Flag to indicate that Set BA is success */
5280 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5281 {
5282 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5283 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5284 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 /*Reset the WDA state to READY */
5289 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 return ;
5291}
5292
Jeff Johnson295189b2012-06-20 16:38:30 -07005293/*
5294 * FUNCTION: WDA_ProcessAddBASessionReq
5295 * Request to WDI to Update the ADDBA REQ params.
5296 */
5297VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5298 tAddBAParams *pAddBAReqParams)
5299{
5300 WDI_Status status = WDI_STATUS_SUCCESS ;
5301 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5302 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5303 sizeof(WDI_AddBASessionReqParamsType)) ;
5304 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005306 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 if(NULL == wdiAddBASessionReqParam)
5308 {
5309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 VOS_ASSERT(0);
5312 return VOS_STATUS_E_NOMEM;
5313 }
5314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5315 if(NULL == pWdaParams)
5316 {
5317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005319 VOS_ASSERT(0);
5320 vos_mem_free(wdiAddBASessionReqParam);
5321 return VOS_STATUS_E_NOMEM;
5322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 /*
5324 * Populate ADD BA parameters and pass these paarmeters to WDI.
5325 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5326 * the state to track if these is BA recipient case or BA initiator
5327 * case.
5328 */
5329 do
5330 {
5331 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5332 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5333 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5334 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5335 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5336 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5337 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005339 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5340 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5341 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5342 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5343 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 /* check the BA direction and update state accordingly */
5345 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5346 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5347 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5348
5349 }while(0) ;
5350 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 pWdaParams->pWdaContext = pWDA;
5352 /* Store ADD BA pointer, as this will be used for response */
5353 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5354 /* store Params pass it to WDI */
5355 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5357 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 if(IS_WDI_STATUS_FAILURE(status))
5359 {
5360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005361 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5363 "Send ADD BA failure response to PE\n");
5364 pAddBAReqParams->status =
5365 CONVERT_WDI2SIR_STATUS(status) ;
5366 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 vos_mem_free(pWdaParams);
5369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371}
Jeff Johnson295189b2012-06-20 16:38:30 -07005372/*
5373 * FUNCTION: WDA_DelBANotifyTL
5374 * send DEL BA IND to TL
5375 */
5376void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5377 tDelBAParams *pDelBAReqParams)
5378{
5379 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5380 //tSirMsgQ msg;
5381 vos_msg_t vosMsg;
5382 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 if(NULL == pDelBAInd)
5384 {
5385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 VOS_ASSERT(0) ;
5388 return;
5389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5391 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5392 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5393 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005394
Jeff Johnson295189b2012-06-20 16:38:30 -07005395
5396 vosMsg.type = WDA_DELETEBA_IND;
5397 vosMsg.bodyptr = pDelBAInd;
5398 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5399 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5400 {
5401 vosStatus = VOS_STATUS_E_BADMSG;
5402 }
5403}
Jeff Johnson295189b2012-06-20 16:38:30 -07005404/*
5405 * FUNCTION: WDA_DelBAReqCallback
5406 * send DEL BA RSP back to PE
5407 */
5408void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5409{
5410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5411 tWDA_CbContext *pWDA;
5412 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == pWdaParams)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0) ;
5420 return ;
5421 }
5422 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5423 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 /* Notify TL about DEL BA in case of recipinet */
5425 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5426 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5427 {
5428 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 /*
5431 * No respone required for WDA_DELBA_IND so just free the request
5432 * param here
5433 */
5434 vos_mem_free(pDelBAReqParams);
5435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5436 vos_mem_free(pWdaParams);
5437 return ;
5438}
5439
Jeff Johnson295189b2012-06-20 16:38:30 -07005440/*
5441 * FUNCTION: WDA_ProcessDelBAReq
5442 * Request to WDI to Update the DELBA REQ params.
5443 */
5444VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5445 tDelBAParams *pDelBAReqParams)
5446{
5447 WDI_Status status = WDI_STATUS_SUCCESS ;
5448 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5449 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5450 sizeof(WDI_DelBAReqParamsType)) ;
5451 tWDA_ReqParams *pWdaParams ;
5452 tANI_U16 staIdx = 0;
5453 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 if(NULL == wdiDelBAReqParam)
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 VOS_ASSERT(0);
5461 return VOS_STATUS_E_NOMEM;
5462 }
5463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5464 if(NULL == pWdaParams)
5465 {
5466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 VOS_ASSERT(0);
5469 vos_mem_free(wdiDelBAReqParam);
5470 return VOS_STATUS_E_NOMEM;
5471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005472 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5473 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5474 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5475 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 pWdaParams->pWdaContext = pWDA;
5477 /* Store DEL BA pointer, as this will be used for response */
5478 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 /* store Params pass it to WDI */
5480 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5482 * maintained in WDA, so that WDA can retry for another BA session
5483 */
5484 staIdx = pDelBAReqParams->staIdx;
5485 tid = pDelBAReqParams->baTID;
5486 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 status = WDI_DelBAReq(wdiDelBAReqParam,
5488 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 if(IS_WDI_STATUS_FAILURE(status))
5490 {
5491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5492 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5494 vos_mem_free(pWdaParams->wdaMsgParam);
5495 vos_mem_free(pWdaParams);
5496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005498}
Jeff Johnson295189b2012-06-20 16:38:30 -07005499/*
5500 * FUNCTION: WDA_AddTSReqCallback
5501 * send ADD TS RSP back to PE
5502 */
5503void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5504{
5505 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5506 tWDA_CbContext *pWDA;
5507 tAddTsParams *pAddTsReqParams;
5508
5509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 if(NULL == pWdaParams)
5512 {
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 VOS_ASSERT(0) ;
5516 return ;
5517 }
5518 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5519 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5521 vos_mem_free(pWdaParams);
5522
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005523 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 return ;
5526}
5527
Jeff Johnson295189b2012-06-20 16:38:30 -07005528/*
5529 * FUNCTION: WDA_ProcessAddTSReq
5530 * Request to WDI to Update the ADD TS REQ params.
5531 */
5532VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5533 tAddTsParams *pAddTsReqParams)
5534{
5535 WDI_Status status = WDI_STATUS_SUCCESS ;
5536 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5537 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5538 sizeof(WDI_AddTSReqParamsType)) ;
5539 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 if(NULL == wdiAddTSReqParam)
5543 {
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 VOS_ASSERT(0);
5547 return VOS_STATUS_E_NOMEM;
5548 }
5549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5550 if(NULL == pWdaParams)
5551 {
5552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 VOS_ASSERT(0);
5555 vos_mem_free(wdiAddTSReqParam);
5556 return VOS_STATUS_E_NOMEM;
5557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5559 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 //TS IE
5561 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5562 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5563 pAddTsReqParams->tspec.length;
5564
5565 //TS IE : TS INFO : TRAFFIC
5566 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5567 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5568 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5569 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5570 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5571 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5572 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5573 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5574 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5575 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5576 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5577 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5578 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5579 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5580 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5581 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5582
5583 //TS IE : TS INFO : SCHEDULE
5584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5585 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5586 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5587 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 //TS IE
5589 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5590 pAddTsReqParams->tspec.nomMsduSz;
5591 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5592 pAddTsReqParams->tspec.maxMsduSz;
5593 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5594 pAddTsReqParams->tspec.minSvcInterval;
5595 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5596 pAddTsReqParams->tspec.maxSvcInterval;
5597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5598 pAddTsReqParams->tspec.inactInterval;
5599 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5600 pAddTsReqParams->tspec.suspendInterval;
5601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5602 pAddTsReqParams->tspec.svcStartTime;
5603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5604 pAddTsReqParams->tspec.minDataRate;
5605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5606 pAddTsReqParams->tspec.meanDataRate;
5607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5608 pAddTsReqParams->tspec.peakDataRate;
5609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5610 pAddTsReqParams->tspec.maxBurstSz;
5611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5612 pAddTsReqParams->tspec.delayBound;
5613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5614 pAddTsReqParams->tspec.minPhyRate;
5615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5616 pAddTsReqParams->tspec.surplusBw;
5617 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5618 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 /* TODO: tAddTsParams doesn't have the following fields */
5620#if 0
5621 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5622 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5623 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5624 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5625#endif
5626 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5627
5628 pWdaParams->pWdaContext = pWDA;
5629 /* Store ADD TS pointer, as this will be used for response */
5630 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 /* store Params pass it to WDI */
5632 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 status = WDI_AddTSReq(wdiAddTSReqParam,
5634 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 if(IS_WDI_STATUS_FAILURE(status))
5636 {
5637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5638 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5640 vos_mem_free(pWdaParams);
5641 pAddTsReqParams->status = eSIR_FAILURE ;
5642 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005645}
5646
Jeff Johnson295189b2012-06-20 16:38:30 -07005647/*
5648 * FUNCTION: WDA_DelTSReqCallback
5649 * send DEL TS RSP back to PE
5650 */
5651void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5652{
5653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005655 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5657 vos_mem_free(pWdaParams->wdaMsgParam) ;
5658 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 /*
5660 * No respone required for WDA_DEL_TS_REQ so just free the request
5661 * param here
5662 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 return ;
5664}
5665
Jeff Johnson295189b2012-06-20 16:38:30 -07005666/*
5667 * FUNCTION: WDA_ProcessDelTSReq
5668 * Request to WDI to Update the DELTS REQ params.
5669 */
5670VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5671 tDelTsParams *pDelTSReqParams)
5672{
5673 WDI_Status status = WDI_STATUS_SUCCESS ;
5674 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5675 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5676 sizeof(WDI_DelTSReqParamsType)) ;
5677 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 if(NULL == wdiDelTSReqParam)
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT(0);
5685 return VOS_STATUS_E_NOMEM;
5686 }
5687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5688 if(NULL == pWdaParams)
5689 {
5690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 VOS_ASSERT(0);
5693 vos_mem_free(wdiDelTSReqParam);
5694 return VOS_STATUS_E_NOMEM;
5695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5697 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5698 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5699 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5700 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 pWdaParams->pWdaContext = pWDA;
5702 /* Store DEL TS pointer, as this will be used for response */
5703 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 /* store Params pass it to WDI */
5705 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 status = WDI_DelTSReq(wdiDelTSReqParam,
5707 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 if(IS_WDI_STATUS_FAILURE(status))
5709 {
5710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5711 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5713 vos_mem_free(pWdaParams->wdaMsgParam);
5714 vos_mem_free(pWdaParams);
5715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717}
Jeff Johnson295189b2012-06-20 16:38:30 -07005718/*
5719 * FUNCTION: WDA_UpdateBeaconParamsCallback
5720 * Free the memory. No need to send any response to PE in this case
5721 */
5722void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5723{
5724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 if(NULL == pWdaParams)
5728 {
5729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 VOS_ASSERT(0) ;
5732 return ;
5733 }
5734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5735 vos_mem_free(pWdaParams->wdaMsgParam) ;
5736 vos_mem_free(pWdaParams);
5737 /*
5738 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5739 * param here
5740 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 return ;
5742}
Jeff Johnson295189b2012-06-20 16:38:30 -07005743/*
5744 * FUNCTION: WDA_ProcessUpdateBeaconParams
5745 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5746 */
5747VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5748 tUpdateBeaconParams *pUpdateBeaconParams)
5749{
5750 WDI_Status status = WDI_STATUS_SUCCESS ;
5751 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5752 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5753 sizeof(WDI_UpdateBeaconParamsType)) ;
5754 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 if(NULL == wdiUpdateBeaconParams)
5758 {
5759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 VOS_ASSERT(0);
5762 return VOS_STATUS_E_NOMEM;
5763 }
5764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5765 if(NULL == pWdaParams)
5766 {
5767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005769 VOS_ASSERT(0);
5770 vos_mem_free(wdiUpdateBeaconParams);
5771 return VOS_STATUS_E_NOMEM;
5772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5774 pUpdateBeaconParams->bssIdx;
5775 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5776 pUpdateBeaconParams->fShortPreamble;
5777 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5778 pUpdateBeaconParams->fShortSlotTime;
5779 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5780 pUpdateBeaconParams->beaconInterval;
5781 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5782 pUpdateBeaconParams->llaCoexist;
5783 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5784 pUpdateBeaconParams->llbCoexist;
5785 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5786 pUpdateBeaconParams->llgCoexist;
5787 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5788 pUpdateBeaconParams->ht20MhzCoexist;
5789 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5790 pUpdateBeaconParams->llnNonGFCoexist;
5791 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5792 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5793 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5794 pUpdateBeaconParams->fRIFSMode;
5795 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5796 pUpdateBeaconParams->paramChangeBitmap;
5797 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5798
5799 pWdaParams->pWdaContext = pWDA;
5800 /* Store UpdateBeacon Req pointer, as this will be used for response */
5801 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 /* store Params pass it to WDI */
5803 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5805 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5806 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 if(IS_WDI_STATUS_FAILURE(status))
5808 {
5809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5810 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5812 vos_mem_free(pWdaParams->wdaMsgParam);
5813 vos_mem_free(pWdaParams);
5814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005816}
Jeff Johnson295189b2012-06-20 16:38:30 -07005817#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005818/*
5819 * FUNCTION: WDA_TSMStatsReqCallback
5820 * send TSM Stats RSP back to PE
5821 */
5822void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5823{
5824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5825 tWDA_CbContext *pWDA = NULL;
5826 tTSMStats *pTsmRspParams = NULL;
5827
5828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005829 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 if(NULL == pWdaParams)
5831 {
5832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005833 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 VOS_ASSERT(0) ;
5835 return ;
5836 }
5837 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5838 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 if( NULL == pTsmRspParams )
5840 {
5841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005842 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 VOS_ASSERT( 0 );
5844 return ;
5845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5847 vos_mem_free(pWdaParams);
5848
5849 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5850 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5851 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5852 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5853 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5854 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5855 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5856 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5857 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5858 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 return ;
5861}
5862
5863
Jeff Johnson295189b2012-06-20 16:38:30 -07005864/*
5865 * FUNCTION: WDA_ProcessTsmStatsReq
5866 * Request to WDI to get the TSM Stats params.
5867 */
5868VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5869 tTSMStats *pTsmStats)
5870{
5871 WDI_Status status = WDI_STATUS_SUCCESS ;
5872 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5873 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005875 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5877 sizeof(WDI_TSMStatsReqParamsType));
5878 if(NULL == wdiTSMReqParam)
5879 {
5880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 VOS_ASSERT(0);
5883 return VOS_STATUS_E_NOMEM;
5884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5886 if(NULL == pWdaParams)
5887 {
5888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 VOS_ASSERT(0);
5891 vos_mem_free(wdiTSMReqParam);
5892 return VOS_STATUS_E_NOMEM;
5893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5895 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5896 pTsmStats->bssId,
5897 sizeof(wpt_macAddr));
5898 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5899
5900 pWdaParams->pWdaContext = pWDA;
5901 /* Store TSM Stats pointer, as this will be used for response */
5902 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 /* store Params pass it to WDI */
5904 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 status = WDI_TSMStatsReq(wdiTSMReqParam,
5906 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 if(IS_WDI_STATUS_FAILURE(status))
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5910 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5912 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005913 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 return CONVERT_WDI2VOS_STATUS(status) ;
5916}
5917#endif
5918/*
5919 * FUNCTION: WDA_SendBeaconParamsCallback
5920 * No need to send any response to PE in this case
5921 */
5922void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5923{
5924
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 return ;
5928}
Jeff Johnson295189b2012-06-20 16:38:30 -07005929/*
5930 * FUNCTION: WDA_ProcessSendBeacon
5931 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5932 * start beacon trasmission
5933 */
5934VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5935 tSendbeaconParams *pSendbeaconParams)
5936{
5937 WDI_Status status = WDI_STATUS_SUCCESS ;
5938 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5942 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5943 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5944 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5946 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05305947 /* p2pIeOffset should be atleast greater than timIeOffset */
5948 if ((pSendbeaconParams->p2pIeOffset != 0) &&
5949 (pSendbeaconParams->p2pIeOffset <
5950 pSendbeaconParams->timIeOffset))
5951 {
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5953 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
5954 VOS_ASSERT( 0 );
5955 return WDI_STATUS_E_FAILURE;
5956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5958 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 /* Copy the beacon template to local buffer */
5960 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5961 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5962 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5963
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5965 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 if(IS_WDI_STATUS_FAILURE(status))
5967 {
5968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5969 "Failure in SEND BEACON REQ Params WDI API" );
5970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 vos_mem_free(pSendbeaconParams);
5972 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005973}
Jeff Johnson295189b2012-06-20 16:38:30 -07005974/*
5975 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5976 * No need to send any response to PE in this case
5977 */
5978void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5979{
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 return ;
5983}
5984
Jeff Johnson295189b2012-06-20 16:38:30 -07005985/*
5986 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5987 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5988 * send probe response
5989 */
5990VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5991 tSendProbeRespParams *pSendProbeRspParams)
5992{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005993 WDI_Status status = WDI_STATUS_SUCCESS;
5994 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5995 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005997 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005998
5999 if (!wdiSendProbeRspParam)
6000 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6001
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006003 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006005 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 /* Copy the Probe Response template to local buffer */
6008 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006009 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 pSendProbeRspParams->pProbeRespTemplate,
6011 pSendProbeRspParams->probeRespTemplateLen);
6012 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006013 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6015 WDI_PROBE_REQ_BITMAP_IE_LEN);
6016
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006017 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006018
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006019 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 if(IS_WDI_STATUS_FAILURE(status))
6022 {
6023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6024 "Failure in SEND Probe RSP Params WDI API" );
6025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006027 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006029}
Jeff Johnson295189b2012-06-20 16:38:30 -07006030#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6031/*
6032 * FUNCTION: WDA_SetMaxTxPowerCallBack
6033 * send the response to PE with power value received from WDI
6034 */
6035void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6036 void* pUserData)
6037{
6038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6039 tWDA_CbContext *pWDA = NULL;
6040 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6041
6042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 if(NULL == pWdaParams)
6045 {
6046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 VOS_ASSERT(0) ;
6049 return ;
6050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6052 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 if( NULL == pMaxTxPowerParams )
6054 {
6055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006056 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006057 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 return ;
6061 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006062
Jeff Johnson295189b2012-06-20 16:38:30 -07006063
6064 /*need to free memory for the pointers used in the
6065 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6067 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006069
Jeff Johnson295189b2012-06-20 16:38:30 -07006070
6071 /* send response to UMAC*/
6072 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6073
6074 return;
6075}
Jeff Johnson295189b2012-06-20 16:38:30 -07006076/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006077 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 * Request to WDI to send set Max Tx Power Request
6079 */
6080 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6081 tMaxTxPowerParams *MaxTxPowerParams)
6082{
6083 WDI_Status status = WDI_STATUS_SUCCESS;
6084 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6085 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006086
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006089
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6091 sizeof(WDI_SetMaxTxPowerParamsType));
6092 if(NULL == wdiSetMaxTxPowerParams)
6093 {
6094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 VOS_ASSERT(0);
6097 return VOS_STATUS_E_NOMEM;
6098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6100 if(NULL == pWdaParams)
6101 {
6102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006103 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006104 vos_mem_free(wdiSetMaxTxPowerParams);
6105 VOS_ASSERT(0);
6106 return VOS_STATUS_E_NOMEM;
6107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 /* Copy.Max.Tx.Power Params to WDI structure */
6109 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6110 MaxTxPowerParams->bssId,
6111 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6113 MaxTxPowerParams->selfStaMacAddr,
6114 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6116 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 pWdaParams->pWdaContext = pWDA;
6119 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 /* store Params pass it to WDI */
6121 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6123 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 if(IS_WDI_STATUS_FAILURE(status))
6125 {
6126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6127 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6129 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006130 /* send response to UMAC*/
6131 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 }
6133 return CONVERT_WDI2VOS_STATUS(status);
6134
6135}
Jeff Johnson295189b2012-06-20 16:38:30 -07006136#endif
schang86c22c42013-03-13 18:41:24 -07006137
6138/*
6139 * FUNCTION: WDA_SetTxPowerCallBack
6140 * send the response to PE with power value received from WDI
6141 */
6142void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6143 void* pUserData)
6144{
6145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6146 tWDA_CbContext *pWDA = NULL;
6147 tSirSetTxPowerReq *pTxPowerParams = NULL;
6148
6149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6150 "<------ %s ", __func__);
6151 if(NULL == pWdaParams)
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6154 "%s: pWdaParams received NULL", __func__);
6155 VOS_ASSERT(0) ;
6156 return ;
6157 }
6158 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6159 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6160 if(NULL == pTxPowerParams)
6161 {
6162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6163 "%s: pTxPowerParams received NULL " ,__func__);
6164 VOS_ASSERT(0);
6165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6166 vos_mem_free(pWdaParams);
6167 return ;
6168 }
6169
6170 /*need to free memory for the pointers used in the
6171 WDA Process.Set Max Tx Power Req function*/
6172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6173 vos_mem_free(pWdaParams);
6174
6175 /* send response to UMAC*/
6176 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6177 return;
6178}
6179
6180/*
6181 * FUNCTION: WDA_ProcessSetTxPowerReq
6182 * Request to WDI to send set Tx Power Request
6183 */
6184 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6185 tSirSetTxPowerReq *txPowerParams)
6186{
6187 WDI_Status status = WDI_STATUS_SUCCESS;
6188 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6189 tWDA_ReqParams *pWdaParams = NULL;
6190
6191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6192 "------> %s ", __func__);
6193
6194 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6195 sizeof(WDI_SetTxPowerParamsType));
6196 if(NULL == wdiSetTxPowerParams)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6199 "%s: VOS MEM Alloc Failure", __func__);
6200 VOS_ASSERT(0);
6201 return VOS_STATUS_E_NOMEM;
6202 }
6203 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6204 if(NULL == pWdaParams)
6205 {
6206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6207 "%s: VOS MEM Alloc Failure", __func__);
6208 vos_mem_free(wdiSetTxPowerParams);
6209 VOS_ASSERT(0);
6210 return VOS_STATUS_E_NOMEM;
6211 }
6212 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6213 txPowerParams->bssIdx;
6214 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6215 txPowerParams->mwPower;
6216 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6217 pWdaParams->pWdaContext = pWDA;
6218 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6219 /* store Params pass it to WDI */
6220 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6221 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6222 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6223 if(IS_WDI_STATUS_FAILURE(status))
6224 {
6225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6226 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6228 vos_mem_free(pWdaParams);
6229 /* send response to UMAC*/
6230 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6231 }
6232 return CONVERT_WDI2VOS_STATUS(status);
6233}
6234
Jeff Johnson295189b2012-06-20 16:38:30 -07006235/*
6236 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6237 * Free the memory. No need to send any response to PE in this case
6238 */
6239void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6240{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6242
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006244 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006245
6246 if(NULL == pWdaParams)
6247 {
6248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006249 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006250 VOS_ASSERT(0) ;
6251 return ;
6252 }
6253
6254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6255 vos_mem_free(pWdaParams->wdaMsgParam) ;
6256 vos_mem_free(pWdaParams);
6257
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 /*
6259 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6260 * so just free the request param here
6261 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 return ;
6263}
6264
Jeff Johnson295189b2012-06-20 16:38:30 -07006265/*
6266 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6267 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6268 */
6269VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6270 tP2pPsParams *pP2pPsConfigParams)
6271{
6272 WDI_Status status = WDI_STATUS_SUCCESS ;
6273 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6274 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6275 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006276 tWDA_ReqParams *pWdaParams = NULL;
6277
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 if(NULL == wdiSetP2PGONOAReqParam)
6281 {
6282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 VOS_ASSERT(0);
6285 return VOS_STATUS_E_NOMEM;
6286 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006287
6288 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6289 if(NULL == pWdaParams)
6290 {
6291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006292 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006293 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006294 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006295 VOS_ASSERT(0);
6296 return VOS_STATUS_E_NOMEM;
6297 }
6298
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6300 pP2pPsConfigParams->opp_ps;
6301 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6302 pP2pPsConfigParams->ctWindow;
6303 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6304 pP2pPsConfigParams->count;
6305 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6306 pP2pPsConfigParams->duration;
6307 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6308 pP2pPsConfigParams->interval;
6309 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6310 pP2pPsConfigParams->single_noa_duration;
6311 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6312 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006313
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6315 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006316 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6317
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006319 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6320 pWdaParams->pWdaContext = pWDA;
6321
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006323 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6324
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 if(IS_WDI_STATUS_FAILURE(status))
6326 {
6327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6328 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6330 vos_mem_free(pWdaParams->wdaMsgParam);
6331 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 return CONVERT_WDI2VOS_STATUS(status);
6334
Jeff Johnson295189b2012-06-20 16:38:30 -07006335}
Jeff Johnson295189b2012-06-20 16:38:30 -07006336#ifdef WLAN_FEATURE_VOWIFI_11R
6337/*
6338 * FUNCTION: WDA_AggrAddTSReqCallback
6339 * send ADD AGGREGATED TS RSP back to PE
6340 */
6341void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6342{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6344 tWDA_CbContext *pWDA;
6345 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006348 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006349 if(NULL == pWdaParams)
6350 {
6351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006352 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006353 VOS_ASSERT(0) ;
6354 return ;
6355 }
6356
6357 pWDA = pWdaParams->pWdaContext;
6358 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006359
6360 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6361 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006362 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006365
6366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6367 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 return ;
6369}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006370/*
6371 * FUNCTION: WDA_ProcessAddTSReq
6372 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6373 */
6374VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6375 tAggrAddTsParams *pAggrAddTsReqParams)
6376{
6377 WDI_Status status = WDI_STATUS_SUCCESS ;
6378 int i;
6379 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006380 tWDA_ReqParams *pWdaParams = NULL;
6381
6382
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6386 sizeof(WDI_AggrAddTSReqParamsType)) ;
6387 if(NULL == wdiAggrAddTSReqParam)
6388 {
6389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 VOS_ASSERT(0);
6392 return VOS_STATUS_E_NOMEM;
6393 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006394
6395
6396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6397 if(NULL == pWdaParams)
6398 {
6399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006400 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006401 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006402 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006403 VOS_ASSERT(0);
6404 return VOS_STATUS_E_NOMEM;
6405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6407 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6408 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6410 {
6411 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6412 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6413 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6415 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6416 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6417 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6418 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6419 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6420 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6421 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6422 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6423 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6424 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6425 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6426 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6427 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6428 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6429 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6431 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6433 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6434 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6435 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6436 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6437 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6438 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6439 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6440 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6441 pAggrAddTsReqParams->tspec[i].inactInterval;
6442 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6443 pAggrAddTsReqParams->tspec[i].suspendInterval;
6444 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6445 pAggrAddTsReqParams->tspec[i].svcStartTime;
6446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6447 pAggrAddTsReqParams->tspec[i].minDataRate;
6448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6449 pAggrAddTsReqParams->tspec[i].meanDataRate;
6450 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6451 pAggrAddTsReqParams->tspec[i].peakDataRate;
6452 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6453 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6454 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6455 pAggrAddTsReqParams->tspec[i].delayBound;
6456 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6457 pAggrAddTsReqParams->tspec[i].minPhyRate;
6458 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6459 pAggrAddTsReqParams->tspec[i].surplusBw;
6460 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6461 pAggrAddTsReqParams->tspec[i].mediumTime;
6462 }
6463
6464 /* TODO: tAggrAddTsParams doesn't have the following fields */
6465#if 0
6466 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6467 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6468 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6469 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6470#endif
6471 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6472
6473 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006474 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006476 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6477
6478 pWdaParams->pWdaContext = pWDA;
6479
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006481 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6482
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 if(IS_WDI_STATUS_FAILURE(status))
6484 {
6485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6486 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6488 vos_mem_free(pWdaParams);
6489
6490 /* send the failure response back to PE*/
6491 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6492 {
6493 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6494 }
6495
6496 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6497 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 return CONVERT_WDI2VOS_STATUS(status) ;
6500}
6501#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006502/*
6503 * FUNCTION: WDA_EnterImpsReqCallback
6504 * send Enter IMPS RSP back to PE
6505 */
6506void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6507{
6508 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006510 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006511 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 return ;
6513}
Jeff Johnson295189b2012-06-20 16:38:30 -07006514/*
6515 * FUNCTION: WDA_ProcessEnterImpsReq
6516 * Request to WDI to Enter IMPS power state.
6517 */
6518VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6519{
6520 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006522 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006523 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 if(IS_WDI_STATUS_FAILURE(status))
6525 {
6526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6527 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006528 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 return CONVERT_WDI2VOS_STATUS(status) ;
6531}
Jeff Johnson295189b2012-06-20 16:38:30 -07006532/*
6533 * FUNCTION: WDA_ExitImpsReqCallback
6534 * send Exit IMPS RSP back to PE
6535 */
6536void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6537{
6538 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006540 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006541 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 return ;
6543}
Jeff Johnson295189b2012-06-20 16:38:30 -07006544/*
6545 * FUNCTION: WDA_ProcessExitImpsReq
6546 * Request to WDI to Exit IMPS power state.
6547 */
6548VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6549{
6550 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006552 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 if(IS_WDI_STATUS_FAILURE(status))
6555 {
6556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6557 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006558 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 return CONVERT_WDI2VOS_STATUS(status) ;
6561}
Jeff Johnson295189b2012-06-20 16:38:30 -07006562/*
6563 * FUNCTION: WDA_EnterBmpsReqCallback
6564 * send Enter BMPS RSP back to PE
6565 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006566void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006567{
6568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6569 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006570 tEnterBmpsParams *pEnterBmpsRspParams;
6571
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006573 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 if(NULL == pWdaParams)
6575 {
6576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_ASSERT(0) ;
6579 return ;
6580 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006581
6582 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6583 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6584
6585 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006586 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006587
6588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006590 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6591
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 return ;
6593}
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
6595 * FUNCTION: WDA_ProcessEnterBmpsReq
6596 * Request to WDI to Enter BMPS power state.
6597 */
6598VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6599 tEnterBmpsParams *pEnterBmpsReqParams)
6600{
6601 WDI_Status status = WDI_STATUS_SUCCESS;
6602 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6603 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006606 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6607 {
6608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006609 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 VOS_ASSERT(0);
6611 return VOS_STATUS_E_FAILURE;
6612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6614 if (NULL == wdiEnterBmpsReqParams)
6615 {
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006619 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6620 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 return VOS_STATUS_E_NOMEM;
6622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6624 if (NULL == pWdaParams)
6625 {
6626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006628 VOS_ASSERT(0);
6629 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006630 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6631 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 return VOS_STATUS_E_NOMEM;
6633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6635 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6636 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6637 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 // For CCX and 11R Roaming
6639 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6640 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6641 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6642 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006643
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 /* Store param pointer as passed in by caller */
6645 /* store Params pass it to WDI */
6646 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006647 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006648 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6650 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 if (IS_WDI_STATUS_FAILURE(status))
6652 {
6653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6654 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006656 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006657 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006658 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 return CONVERT_WDI2VOS_STATUS(status);
6661}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006662
6663
6664static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6665 WDI_Status wdiStatus,
6666 tExitBmpsParams *pExitBmpsReqParams)
6667{
6668 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6669
6670 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6671}
6672
6673
Jeff Johnson295189b2012-06-20 16:38:30 -07006674/*
6675 * FUNCTION: WDA_ExitBmpsReqCallback
6676 * send Exit BMPS RSP back to PE
6677 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006678void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006679{
6680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6681 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006682 tExitBmpsParams *pExitBmpsRspParams;
6683
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006685 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 if(NULL == pWdaParams)
6687 {
6688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006689 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 VOS_ASSERT(0) ;
6691 return ;
6692 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006693
6694 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6695 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6696
6697 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006698 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006699
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6701 vos_mem_free(pWdaParams) ;
6702
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006703 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 return ;
6705}
Jeff Johnson295189b2012-06-20 16:38:30 -07006706/*
6707 * FUNCTION: WDA_ProcessExitBmpsReq
6708 * Request to WDI to Exit BMPS power state.
6709 */
6710VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6711 tExitBmpsParams *pExitBmpsReqParams)
6712{
6713 WDI_Status status = WDI_STATUS_SUCCESS ;
6714 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6715 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6716 sizeof(WDI_ExitBmpsReqParamsType)) ;
6717 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006719 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 if(NULL == wdiExitBmpsReqParams)
6721 {
6722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006725 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 return VOS_STATUS_E_NOMEM;
6727 }
6728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6729 if(NULL == pWdaParams)
6730 {
6731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 VOS_ASSERT(0);
6734 vos_mem_free(wdiExitBmpsReqParams);
6735 return VOS_STATUS_E_NOMEM;
6736 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006738
6739 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6740
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6742
6743 /* Store param pointer as passed in by caller */
6744 /* store Params pass it to WDI */
6745 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6746 pWdaParams->pWdaContext = pWDA;
6747 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6749 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 if(IS_WDI_STATUS_FAILURE(status))
6751 {
6752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6753 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6755 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006756 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 return CONVERT_WDI2VOS_STATUS(status) ;
6759}
Jeff Johnson295189b2012-06-20 16:38:30 -07006760/*
6761 * FUNCTION: WDA_EnterUapsdReqCallback
6762 * send Enter UAPSD RSP back to PE
6763 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006764void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006765{
6766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6767 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006768 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006770 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 if(NULL == pWdaParams)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0) ;
6776 return ;
6777 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006778
6779 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6780 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6781
6782 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006783 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006784
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6786 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006787 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 return ;
6789}
Jeff Johnson295189b2012-06-20 16:38:30 -07006790/*
6791 * FUNCTION: WDA_ProcessEnterUapsdReq
6792 * Request to WDI to Enter UAPSD power state.
6793 */
6794VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6795 tUapsdParams *pEnterUapsdReqParams)
6796{
6797 WDI_Status status = WDI_STATUS_SUCCESS ;
6798 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6799 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6800 sizeof(WDI_EnterUapsdReqParamsType)) ;
6801 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 if(NULL == wdiEnterUapsdReqParams)
6805 {
6806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 VOS_ASSERT(0);
6809 return VOS_STATUS_E_NOMEM;
6810 }
6811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6812 if(NULL == pWdaParams)
6813 {
6814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 VOS_ASSERT(0);
6817 vos_mem_free(wdiEnterUapsdReqParams);
6818 return VOS_STATUS_E_NOMEM;
6819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6821 pEnterUapsdReqParams->beDeliveryEnabled;
6822 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6823 pEnterUapsdReqParams->beTriggerEnabled;
6824 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6825 pEnterUapsdReqParams->bkDeliveryEnabled;
6826 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6827 pEnterUapsdReqParams->bkTriggerEnabled;
6828 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6829 pEnterUapsdReqParams->viDeliveryEnabled;
6830 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6831 pEnterUapsdReqParams->viTriggerEnabled;
6832 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6833 pEnterUapsdReqParams->voDeliveryEnabled;
6834 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6835 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006836 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837
6838 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6839
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 /* Store param pointer as passed in by caller */
6841 /* store Params pass it to WDI */
6842 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6843 pWdaParams->pWdaContext = pWDA;
6844 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6846 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 if(IS_WDI_STATUS_FAILURE(status))
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6850 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6851 vos_mem_free(pWdaParams->wdaMsgParam) ;
6852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6853 vos_mem_free(pWdaParams) ;
6854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 return CONVERT_WDI2VOS_STATUS(status) ;
6856}
Jeff Johnson295189b2012-06-20 16:38:30 -07006857/*
6858 * FUNCTION: WDA_ExitUapsdReqCallback
6859 * send Exit UAPSD RSP back to PE
6860 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006861void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006862{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006863
6864 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6865 tWDA_CbContext *pWDA;
6866 tExitUapsdParams *pExitUapsdRspParams;
6867
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006870 if(NULL == pWdaParams)
6871 {
6872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006873 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006874 VOS_ASSERT(0);
6875 return;
6876 }
6877
6878 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6879 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6880
6881 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006882 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006883
6884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6885 vos_mem_free(pWdaParams) ;
6886
6887 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 return ;
6889}
Jeff Johnson295189b2012-06-20 16:38:30 -07006890/*
6891 * FUNCTION: WDA_ProcessExitUapsdReq
6892 * Request to WDI to Exit UAPSD power state.
6893 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006894VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6895 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006896{
6897 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006898 tWDA_ReqParams *pWdaParams ;
6899 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6900 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6901 sizeof(WDI_ExitUapsdReqParamsType)) ;
6902
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006904 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006905
6906 if(NULL == wdiExitUapsdReqParams)
6907 {
6908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006909 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006910 VOS_ASSERT(0);
6911 return VOS_STATUS_E_NOMEM;
6912 }
6913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6914 if(NULL == pWdaParams)
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006917 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006918 VOS_ASSERT(0);
6919 vos_mem_free(wdiExitUapsdReqParams);
6920 return VOS_STATUS_E_NOMEM;
6921 }
6922
6923 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6924 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6925
6926 /* Store param pointer as passed in by caller */
6927 /* store Params pass it to WDI */
6928 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6929 pWdaParams->pWdaContext = pWDA;
6930 pWdaParams->wdaMsgParam = pExitUapsdParams;
6931
6932 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 if(IS_WDI_STATUS_FAILURE(status))
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6936 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006937 vos_mem_free(pWdaParams->wdaMsgParam) ;
6938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6939 vos_mem_free(pWdaParams) ;
6940
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 return CONVERT_WDI2VOS_STATUS(status) ;
6943}
6944
Jeff Johnson295189b2012-06-20 16:38:30 -07006945/*
6946 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6947 *
6948 */
6949void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6950{
6951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 if(NULL == pWdaParams)
6955 {
6956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 VOS_ASSERT(0) ;
6959 return ;
6960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 if( pWdaParams != NULL )
6962 {
6963 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6964 {
6965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6966 }
6967 if( pWdaParams->wdaMsgParam != NULL )
6968 {
6969 vos_mem_free(pWdaParams->wdaMsgParam) ;
6970 }
6971 vos_mem_free(pWdaParams) ;
6972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 return ;
6974}
Jeff Johnson295189b2012-06-20 16:38:30 -07006975/*
6976 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6977 * Request to WDI to set the power save params at start.
6978 */
6979VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6980 tSirPowerSaveCfg *pPowerSaveCfg)
6981{
6982 WDI_Status status = WDI_STATUS_SUCCESS ;
6983 tHalCfg *tlvStruct = NULL ;
6984 tANI_U8 *tlvStructStart = NULL ;
6985 v_PVOID_t *configParam;
6986 tANI_U32 configParamSize;
6987 tANI_U32 *configDataValue;
6988 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6989 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6993 {
6994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006997 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 return VOS_STATUS_E_FAILURE;
6999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7001 if (NULL == wdiPowerSaveCfg)
7002 {
7003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007006 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 return VOS_STATUS_E_NOMEM;
7008 }
7009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7010 if(NULL == pWdaParams)
7011 {
7012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 VOS_ASSERT(0);
7015 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007016 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 return VOS_STATUS_E_NOMEM;
7018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7020 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 if(NULL == configParam)
7022 {
7023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007024 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007025 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 vos_mem_free(pWdaParams);
7027 vos_mem_free(wdiPowerSaveCfg);
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 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 vos_mem_set(configParam, configParamSize, 0);
7032 wdiPowerSaveCfg->pConfigBuffer = configParam;
7033 tlvStruct = (tHalCfg *)configParam;
7034 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7036 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7037 tlvStruct->length = sizeof(tANI_U32);
7038 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7039 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7041 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7043 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7044 tlvStruct->length = sizeof(tANI_U32);
7045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7046 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7048 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7050 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7051 tlvStruct->length = sizeof(tANI_U32);
7052 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7053 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7055 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7057 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7058 tlvStruct->length = sizeof(tANI_U32);
7059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7060 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7062 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7064 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7065 tlvStruct->length = sizeof(tANI_U32);
7066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7067 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7069 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7071 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7072 tlvStruct->length = sizeof(tANI_U32);
7073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7074 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7076 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7078 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7079 tlvStruct->length = sizeof(tANI_U32);
7080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7081 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7083 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7085 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7086 tlvStruct->length = sizeof(tANI_U32);
7087 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7088 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7089 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7090 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7092 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7093 tlvStruct->length = sizeof(tANI_U32);
7094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7095 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7096 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7097 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7099 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7100 tlvStruct->length = sizeof(tANI_U32);
7101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7102 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7104 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7106 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7107 tlvStruct->length = sizeof(tANI_U32);
7108 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7109 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7111 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 /* store Params pass it to WDI */
7115 pWdaParams->wdaMsgParam = configParam;
7116 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7117 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7119 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 if(IS_WDI_STATUS_FAILURE(status))
7121 {
7122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7123 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7124 vos_mem_free(pWdaParams->wdaMsgParam);
7125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7126 vos_mem_free(pWdaParams);
7127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 return CONVERT_WDI2VOS_STATUS(status);
7130}
Jeff Johnson295189b2012-06-20 16:38:30 -07007131/*
7132 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7133 *
7134 */
7135void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
7136{
7137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007139 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7141 vos_mem_free(pWdaParams);
7142
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 return ;
7144}
Jeff Johnson295189b2012-06-20 16:38:30 -07007145/*
7146 * FUNCTION: WDA_SetUapsdAcParamsReq
7147 * Request to WDI to set the UAPSD params for an ac (sta mode).
7148 */
7149VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7150 tUapsdInfo *pUapsdInfo)
7151{
7152 WDI_Status status = WDI_STATUS_SUCCESS;
7153 tWDA_CbContext *pWDA = NULL ;
7154 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7155 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7156 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 if(NULL == wdiUapsdParams)
7161 {
7162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 VOS_ASSERT(0);
7165 return VOS_STATUS_E_NOMEM;
7166 }
7167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7168 if(NULL == pWdaParams)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 VOS_ASSERT(0);
7173 vos_mem_free(wdiUapsdParams);
7174 return VOS_STATUS_E_NOMEM;
7175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7177 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7178 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7179 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7180 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7181 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 pWdaParams->pWdaContext = pWDA;
7185 /* Store param pointer as passed in by caller */
7186 pWdaParams->wdaMsgParam = pUapsdInfo;
7187 /* store Params pass it to WDI */
7188 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7190 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7191 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 if(IS_WDI_STATUS_FAILURE(status))
7193 {
7194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7195 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7197 vos_mem_free(pWdaParams);
7198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7200 return VOS_STATUS_SUCCESS;
7201 else
7202 return VOS_STATUS_E_FAILURE;
7203
Jeff Johnson295189b2012-06-20 16:38:30 -07007204}
7205/*
7206 * FUNCTION: WDA_ClearUapsdAcParamsReq
7207 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7208 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7209 * and again enter the UPASD with the modified params. Hence the disable
7210 * function was kept empty.
7211 *
7212 */
7213VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7214{
7215 /* do nothing */
7216 return VOS_STATUS_SUCCESS;
7217}
Jeff Johnson295189b2012-06-20 16:38:30 -07007218/*
7219 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7220 *
7221 */
7222void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7223{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7225
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007227 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007228
7229 if(NULL == pWdaParams)
7230 {
7231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007232 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007233 VOS_ASSERT(0) ;
7234 return ;
7235 }
7236
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7238 vos_mem_free(pWdaParams->wdaMsgParam);
7239 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007240
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 //print a msg, nothing else to do
7242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7243 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 return ;
7245}
Jeff Johnson295189b2012-06-20 16:38:30 -07007246/*
7247 * FUNCTION: WDA_UpdateUapsdParamsReq
7248 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7249 */
7250VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7251 tUpdateUapsdParams* pUpdateUapsdInfo)
7252{
7253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7256 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7257 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007258 tWDA_ReqParams *pWdaParams = NULL;
7259
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 if(NULL == wdiUpdateUapsdParams)
7263 {
7264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 VOS_ASSERT(0);
7267 return VOS_STATUS_E_NOMEM;
7268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007269 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7270 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7271 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007272
7273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7274 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 {
7276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007279 vos_mem_free(pUpdateUapsdInfo);
7280 vos_mem_free(wdiUpdateUapsdParams);
7281 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007284 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007286 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7287 pWdaParams->pWdaContext = pWDA;
7288
Jeff Johnson43971f52012-07-17 12:26:56 -07007289 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007290 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7291 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007292
Jeff Johnson43971f52012-07-17 12:26:56 -07007293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 {
7295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7296 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007297 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7299 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007300 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007302 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007303}
Jeff Johnson295189b2012-06-20 16:38:30 -07007304/*
7305 * FUNCTION: WDA_ConfigureRxpFilterCallback
7306 *
7307 */
7308void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7309{
7310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 if(WDI_STATUS_SUCCESS != wdiStatus)
7314 {
7315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007316 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 if(NULL == pWdaParams)
7319 {
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 VOS_ASSERT(0) ;
7323 return ;
7324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7326 vos_mem_free(pWdaParams->wdaMsgParam);
7327 vos_mem_free(pWdaParams);
7328 return ;
7329}
Jeff Johnson295189b2012-06-20 16:38:30 -07007330/*
7331 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7332 *
7333 */
7334VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7335 tSirWlanSetRxpFilters *pWlanSuspendParam)
7336{
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007338 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7340 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7341 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7342 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 if(NULL == wdiRxpFilterParams)
7346 {
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007349 VOS_ASSERT(0);
7350 vos_mem_free(pWlanSuspendParam);
7351 return VOS_STATUS_E_NOMEM;
7352 }
7353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7354 if(NULL == pWdaParams)
7355 {
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 VOS_ASSERT(0);
7359 vos_mem_free(wdiRxpFilterParams);
7360 vos_mem_free(pWlanSuspendParam);
7361 return VOS_STATUS_E_NOMEM;
7362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7364 pWlanSuspendParam->setMcstBcstFilter;
7365 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7366 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7367
7368 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 pWdaParams->pWdaContext = pWDA;
7370 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7371 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007372 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7374 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007375 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007379 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7381 vos_mem_free(pWdaParams->wdaMsgParam);
7382 vos_mem_free(pWdaParams);
7383 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007384 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007385}
Jeff Johnson295189b2012-06-20 16:38:30 -07007386/*
7387 * FUNCTION: WDA_WdiIndicationCallback
7388 *
7389 */
7390void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7391 void* pUserData)
7392{
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007394 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007395}
Jeff Johnson295189b2012-06-20 16:38:30 -07007396/*
7397 * FUNCTION: WDA_ProcessWlanSuspendInd
7398 *
7399 */
7400VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7401 tSirWlanSuspendParam *pWlanSuspendParam)
7402{
7403 WDI_Status wdiStatus;
7404 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7408 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7409 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7410 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7413 if(WDI_STATUS_PENDING == wdiStatus)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 }
7418 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7419 {
7420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007421 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 vos_mem_free(pWlanSuspendParam);
7424 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7425}
7426
Chet Lanctot186b5732013-03-18 10:26:30 -07007427#ifdef WLAN_FEATURE_11W
7428/*
7429 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7430 *
7431 */
7432VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7433 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7434{
7435 WDI_Status wdiStatus;
7436 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7438 "------> %s ", __func__);
7439
7440 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7441 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7442 sizeof(tSirMacAddr));
7443
7444 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7445 wdiExclUnencryptParams.pUserData = pWDA;
7446
7447 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7448 if(WDI_STATUS_PENDING == wdiStatus)
7449 {
7450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7451 "Pending received for %s:%d ", __func__, __LINE__ );
7452 }
7453 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7454 {
7455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7456 "Failure in %s:%d ", __func__, __LINE__ );
7457 }
7458 vos_mem_free(pExclUnencryptParam);
7459 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7460}
7461#endif
7462
Jeff Johnson295189b2012-06-20 16:38:30 -07007463/*
7464 * FUNCTION: WDA_ProcessWlanResumeCallback
7465 *
7466 */
7467void WDA_ProcessWlanResumeCallback(
7468 WDI_SuspendResumeRspParamsType *resumeRspParams,
7469 void* pUserData)
7470{
7471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 if(NULL == pWdaParams)
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007477 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 VOS_ASSERT(0) ;
7479 return ;
7480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7482 {
7483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007484 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7487 vos_mem_free(pWdaParams->wdaMsgParam);
7488 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 return ;
7490}
Jeff Johnson295189b2012-06-20 16:38:30 -07007491/*
7492 * FUNCTION: WDA_ProcessWlanResumeReq
7493 *
7494 */
7495VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7496 tSirWlanResumeParam *pWlanResumeParam)
7497{
7498 WDI_Status wdiStatus;
7499 WDI_ResumeParamsType *wdiResumeParams =
7500 (WDI_ResumeParamsType *)vos_mem_malloc(
7501 sizeof(WDI_ResumeParamsType) ) ;
7502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 if(NULL == wdiResumeParams)
7506 {
7507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 VOS_ASSERT(0);
7510 return VOS_STATUS_E_NOMEM;
7511 }
7512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7513 if(NULL == pWdaParams)
7514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 VOS_ASSERT(0);
7518 vos_mem_free(wdiResumeParams);
7519 return VOS_STATUS_E_NOMEM;
7520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7522 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 wdiResumeParams->wdiReqStatusCB = NULL;
7525 pWdaParams->wdaMsgParam = pWlanResumeParam;
7526 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7527 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7529 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7530 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7532 {
7533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7534 "Failure in Host Resume REQ WDI API, free all the memory " );
7535 VOS_ASSERT(0);
7536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7537 vos_mem_free(pWdaParams->wdaMsgParam);
7538 vos_mem_free(pWdaParams);
7539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7541}
7542
Jeff Johnson295189b2012-06-20 16:38:30 -07007543/*
7544 * FUNCTION: WDA_SetBeaconFilterReqCallback
7545 *
7546 */
7547void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7548{
7549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 if(NULL == pWdaParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0) ;
7557 return ;
7558 }
7559
7560 vos_mem_free(pWdaParams->wdaMsgParam) ;
7561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7562 vos_mem_free(pWdaParams) ;
7563 /*
7564 * No respone required for SetBeaconFilter req so just free the request
7565 * param here
7566 */
7567
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 return ;
7569}
Jeff Johnson295189b2012-06-20 16:38:30 -07007570/*
7571 * FUNCTION: WDA_SetBeaconFilterReq
7572 * Request to WDI to send the beacon filtering related information.
7573 */
7574VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7575 tBeaconFilterMsg* pBeaconFilterInfo)
7576{
7577 WDI_Status status = WDI_STATUS_SUCCESS;
7578 tANI_U8 *dstPtr, *srcPtr;
7579 tANI_U8 filterLength;
7580 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7581 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7582 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7583 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 if(NULL == wdiBeaconFilterInfo)
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 VOS_ASSERT(0);
7591 return VOS_STATUS_E_NOMEM;
7592 }
7593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7594 if(NULL == pWdaParams)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 vos_mem_free(wdiBeaconFilterInfo);
7600 return VOS_STATUS_E_NOMEM;
7601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7603 pBeaconFilterInfo->beaconInterval;
7604 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7605 pBeaconFilterInfo->capabilityInfo;
7606 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7607 pBeaconFilterInfo->capabilityMask;
7608 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007609
7610 //Fill the BssIdx
7611 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7612
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 //Fill structure with info contained in the beaconFilterTable
7614 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7615 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7616 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7617 if(WDI_BEACON_FILTER_LEN < filterLength)
7618 {
7619 filterLength = WDI_BEACON_FILTER_LEN;
7620 }
7621 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7623 /* Store param pointer as passed in by caller */
7624 /* store Params pass it to WDI */
7625 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7626 pWdaParams->pWdaContext = pWDA;
7627 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7628
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7630 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 if(IS_WDI_STATUS_FAILURE(status))
7632 {
7633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7634 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7635 vos_mem_free(pWdaParams->wdaMsgParam) ;
7636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7637 vos_mem_free(pWdaParams) ;
7638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 return CONVERT_WDI2VOS_STATUS(status) ;
7640}
Jeff Johnson295189b2012-06-20 16:38:30 -07007641/*
7642 * FUNCTION: WDA_RemBeaconFilterReqCallback
7643 *
7644 */
7645void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7646{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7648
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007650 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007651
7652 if(NULL == pWdaParams)
7653 {
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007655 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007656 VOS_ASSERT(0) ;
7657 return ;
7658 }
7659
7660 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7661 vos_mem_free(pWdaParams->wdaMsgParam);
7662 vos_mem_free(pWdaParams);
7663
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 //print a msg, nothing else to do
7665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7666 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 return ;
7668}
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 // TODO: PE does not have this feature for now implemented,
7670 // but the support for removing beacon filter exists between
7671 // HAL and FW. This function can be called whenever PE defines
7672 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007673/*
7674 * FUNCTION: WDA_RemBeaconFilterReq
7675 * Request to WDI to send the removal of beacon filtering related information.
7676 */
7677VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7678 tRemBeaconFilterMsg* pBeaconFilterInfo)
7679{
7680 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007681 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7683 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7684 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007685 tWDA_ReqParams *pWdaParams ;
7686
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 if(NULL == wdiBeaconFilterInfo)
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 VOS_ASSERT(0);
7694 return VOS_STATUS_E_NOMEM;
7695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7697 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 //Fill structure with info contained in the ucRemIeId
7699 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7700 pBeaconFilterInfo->ucRemIeId,
7701 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7702 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007703
7704 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7705 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007706 {
7707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007710 vos_mem_free(wdiBeaconFilterInfo);
7711 vos_mem_free(pBeaconFilterInfo);
7712 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 }
7714
7715 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007716 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007718 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7719
7720 pWdaParams->pWdaContext = pWDA;
7721
Jeff Johnson43971f52012-07-17 12:26:56 -07007722 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007723 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007724 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007725 {
7726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7727 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007728 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7730 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007731 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007733 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007734}
Jeff Johnson295189b2012-06-20 16:38:30 -07007735/*
7736 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7737 *
7738 */
7739void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7740{
7741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007743 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 if(NULL == pWdaParams)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007747 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 VOS_ASSERT(0) ;
7749 return ;
7750 }
7751
7752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7753 vos_mem_free(pWdaParams) ;
7754
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 return ;
7756}
Jeff Johnson295189b2012-06-20 16:38:30 -07007757/*
7758 * FUNCTION: WDA_SetRSSIThresholdsReq
7759 * Request to WDI to set the RSSI thresholds (sta mode).
7760 */
7761VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7762{
7763 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007764 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 tWDA_CbContext *pWDA = NULL ;
7766 v_PVOID_t pVosContext = NULL;
7767 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7768 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7769 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7770 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 if(NULL == wdiRSSIThresholdsInfo)
7774 {
7775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 VOS_ASSERT(0);
7778 return VOS_STATUS_E_NOMEM;
7779 }
7780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7781 if(NULL == pWdaParams)
7782 {
7783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 VOS_ASSERT(0);
7786 vos_mem_free(wdiRSSIThresholdsInfo);
7787 return VOS_STATUS_E_NOMEM;
7788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7791 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7792 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7794 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7795 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7797 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7798 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7801 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7802
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 /* Store param pointer as passed in by caller */
7804 /* store Params pass it to WDI */
7805 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7806 pWdaParams->pWdaContext = pWDA;
7807 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007808 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007810 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 {
7812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7813 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007814 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7816 vos_mem_free(pWdaParams) ;
7817 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007818 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819
7820}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007821/*
Yue Madb90ac12013-04-04 13:39:13 -07007822 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 *
7824 */
Yue Madb90ac12013-04-04 13:39:13 -07007825void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007826{
7827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7828
7829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 if(NULL == pWdaParams)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_ASSERT(0) ;
7836 return ;
7837 }
7838
7839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7840 vos_mem_free(pWdaParams->wdaMsgParam);
7841 vos_mem_free(pWdaParams) ;
7842
7843 //print a msg, nothing else to do
7844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07007845 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 return ;
7847}
Jeff Johnson295189b2012-06-20 16:38:30 -07007848/*
Yue Madb90ac12013-04-04 13:39:13 -07007849 * FUNCTION: WDA_HostOffloadReqCallback
7850 *
7851 */
7852void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
7853{
7854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7855
7856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7857 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7858
7859 if(NULL == pWdaParams)
7860 {
7861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7862 "%s: Invalid pWdaParams pointer", __func__);
7863 VOS_ASSERT(0);
7864 return;
7865 }
7866
7867 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7868 {
7869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7870 vos_mem_free(pWdaParams->wdaMsgParam);
7871 vos_mem_free(pWdaParams);
7872 }
7873
7874 return;
7875}
7876/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 * FUNCTION: WDA_ProcessHostOffloadReq
7878 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7879 * to broadcast traffic (sta mode).
7880 */
7881VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7882 tSirHostOffloadReq *pHostOffloadParams)
7883{
7884 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007885 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7887 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7888 sizeof(WDI_HostOffloadReqParamsType)) ;
7889 tWDA_ReqParams *pWdaParams ;
7890
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007892 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007893
7894 if(NULL == wdiHostOffloadInfo)
7895 {
7896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 VOS_ASSERT(0);
7899 return VOS_STATUS_E_NOMEM;
7900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7902 if(NULL == pWdaParams)
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 VOS_ASSERT(0);
7907 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007908 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 return VOS_STATUS_E_NOMEM;
7910 }
7911
7912 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7913 pHostOffloadParams->offloadType;
7914 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7915 pHostOffloadParams->enableOrDisable;
7916
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007917 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7918 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7919
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7921 {
7922 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7923 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7924 pHostOffloadParams->params.hostIpv4Addr,
7925 4);
7926 break;
7927 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7928 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7929 pHostOffloadParams->params.hostIpv6Addr,
7930 16);
7931 break;
7932 case SIR_IPV6_NS_OFFLOAD:
7933 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7934 pHostOffloadParams->params.hostIpv6Addr,
7935 16);
7936
7937#ifdef WLAN_NS_OFFLOAD
7938 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7939 {
7940 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7941 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7942 16);
7943 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7944 }
7945 else
7946 {
7947 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7948 }
7949
7950 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7951 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7952 16);
7953 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7954 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7955 6);
7956
7957 //Only two are supported so let's go through them without a loop
7958 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7959 {
7960 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7961 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7962 16);
7963 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7964 }
7965 else
7966 {
7967 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7968 }
7969
7970 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7971 {
7972 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7973 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7974 16);
7975 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7976 }
7977 else
7978 {
7979 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7980 }
7981 break;
7982#endif //WLAN_NS_OFFLOAD
7983 default:
7984 {
7985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7986 "No Handling for Offload Type %x in WDA "
7987 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7988 //WDA_VOS_ASSERT(0) ;
7989 }
7990 }
Yue Madb90ac12013-04-04 13:39:13 -07007991 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
7992 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007993
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007995 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 /* store Params pass it to WDI */
7997 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7998 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007999
Jeff Johnson295189b2012-06-20 16:38:30 -07008000
Jeff Johnson43971f52012-07-17 12:26:56 -07008001 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008002 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003
Jeff Johnson43971f52012-07-17 12:26:56 -07008004 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 {
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8007 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008008 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8010 vos_mem_free(pWdaParams->wdaMsgParam);
8011 vos_mem_free(pWdaParams) ;
8012 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008013 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008014
8015}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008016/*
8017 * FUNCTION: WDA_KeepAliveReqCallback
8018 *
8019 */
8020void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
8021{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8023
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008025 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008026
8027 if(NULL == pWdaParams)
8028 {
8029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008031 VOS_ASSERT(0) ;
8032 return ;
8033 }
8034
8035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8036 vos_mem_free(pWdaParams->wdaMsgParam);
8037 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008038
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 //print a msg, nothing else to do
8040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8041 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 return ;
8043}
Jeff Johnson295189b2012-06-20 16:38:30 -07008044/*
8045 * FUNCTION: WDA_ProcessKeepAliveReq
8046 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8047 * wakeup due to broadcast traffic (sta mode).
8048 */
8049VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8050 tSirKeepAliveReq *pKeepAliveParams)
8051{
8052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8055 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8056 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008057 tWDA_ReqParams *pWdaParams;
8058
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 if(NULL == wdiKeepAliveInfo)
8062 {
8063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008066 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 return VOS_STATUS_E_NOMEM;
8068 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008069
8070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8071 if(NULL == pWdaParams)
8072 {
8073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008075 VOS_ASSERT(0);
8076 vos_mem_free(wdiKeepAliveInfo);
8077 vos_mem_free(pKeepAliveParams);
8078 return VOS_STATUS_E_NOMEM;
8079 }
8080
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8082 pKeepAliveParams->packetType;
8083 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8084 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008085
8086 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8087 pKeepAliveParams->bssId,
8088 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008089
8090 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8091 {
8092 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8093 pKeepAliveParams->hostIpv4Addr,
8094 SIR_IPV4_ADDR_LEN);
8095 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8096 pKeepAliveParams->destIpv4Addr,
8097 SIR_IPV4_ADDR_LEN);
8098 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8099 pKeepAliveParams->destMacAddr,
8100 SIR_MAC_ADDR_LEN);
8101 }
8102 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8103 {
8104 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8105 SIR_IPV4_ADDR_LEN,
8106 0);
8107 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8108 SIR_IPV4_ADDR_LEN,
8109 0);
8110 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8111 SIR_MAC_ADDR_LEN,
8112 0);
8113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008115
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008117 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008119 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8120 pWdaParams->pWdaContext = pWDA;
8121
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8123 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8124 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8125 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8126 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8128 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8129 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8130 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8131 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8133 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8134 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8135 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8136 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8137 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8138 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8139 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8141 "TimePeriod %d PacketType %d",
8142 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8143 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008144 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008145 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
8146
Jeff Johnson43971f52012-07-17 12:26:56 -07008147 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 {
8149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8150 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008151 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8153 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008154 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008156 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008157
8158}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008159/*
8160 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8161 *
8162 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008163void WDA_WowlAddBcPtrnReqCallback(
8164 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8165 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008166{
8167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 if(NULL == pWdaParams)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 VOS_ASSERT(0) ;
8175 return ;
8176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8178 vos_mem_free(pWdaParams->wdaMsgParam);
8179 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008180 return ;
8181}
Jeff Johnson295189b2012-06-20 16:38:30 -07008182/*
8183 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8184 * Request to WDI to add WOWL Bcast pattern
8185 */
8186VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8187 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8188{
8189 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008190 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8192 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8193 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8194 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008196 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 if(NULL == wdiWowlAddBcPtrnInfo)
8198 {
8199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 VOS_ASSERT(0);
8202 return VOS_STATUS_E_NOMEM;
8203 }
8204 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8205 if(NULL == pWdaParams)
8206 {
8207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 VOS_ASSERT(0);
8210 vos_mem_free(wdiWowlAddBcPtrnInfo);
8211 return VOS_STATUS_E_NOMEM;
8212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8214 pWowlAddBcPtrnParams->ucPatternId;
8215 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8216 pWowlAddBcPtrnParams->ucPatternByteOffset;
8217 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8218 pWowlAddBcPtrnParams->ucPatternMaskSize;
8219 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8220 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8222 {
8223 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8224 pWowlAddBcPtrnParams->ucPattern,
8225 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8226 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8227 pWowlAddBcPtrnParams->ucPatternMask,
8228 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8229 }
8230 else
8231 {
8232 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8233 pWowlAddBcPtrnParams->ucPattern,
8234 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8235 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8236 pWowlAddBcPtrnParams->ucPatternMask,
8237 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8238
8239 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8240 pWowlAddBcPtrnParams->ucPatternExt,
8241 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8242 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8243 pWowlAddBcPtrnParams->ucPatternMaskExt,
8244 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8245 }
8246
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008247 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8248 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8249
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 /* Store param pointer as passed in by caller */
8252 /* store Params pass it to WDI */
8253 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8254 pWdaParams->pWdaContext = pWDA;
8255 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008256 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008258 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 {
8260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8261 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008262 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 vos_mem_free(pWdaParams->wdaMsgParam) ;
8264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8265 vos_mem_free(pWdaParams) ;
8266 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008267 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008268
8269}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008270/*
8271 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8272 *
8273 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008274void WDA_WowlDelBcPtrnReqCallback(
8275 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8276 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008277{
8278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008280 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 if(NULL == pWdaParams)
8282 {
8283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008284 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 VOS_ASSERT(0) ;
8286 return ;
8287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8289 vos_mem_free(pWdaParams->wdaMsgParam);
8290 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 return ;
8292}
Jeff Johnson295189b2012-06-20 16:38:30 -07008293/*
8294 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8295 * Request to WDI to delete WOWL Bcast pattern
8296 */
8297VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8298 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8299{
8300 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008301 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8303 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8304 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == wdiWowlDelBcPtrnInfo)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0);
8313 return VOS_STATUS_E_NOMEM;
8314 }
8315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8316 if(NULL == pWdaParams)
8317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 VOS_ASSERT(0);
8321 vos_mem_free(wdiWowlDelBcPtrnInfo);
8322 return VOS_STATUS_E_NOMEM;
8323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8325 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008326
8327 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8328 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 /* Store param pointer as passed in by caller */
8332 /* store Params pass it to WDI */
8333 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8334 pWdaParams->pWdaContext = pWDA;
8335 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008336 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008338 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 {
8340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8341 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008342 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 vos_mem_free(pWdaParams->wdaMsgParam) ;
8344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8345 vos_mem_free(pWdaParams) ;
8346 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008347 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008348
8349}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008350/*
8351 * FUNCTION: WDA_WowlEnterReqCallback
8352 *
8353 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008354void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008355{
8356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8357 tWDA_CbContext *pWDA;
8358 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if(NULL == pWdaParams)
8362 {
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_ASSERT(0) ;
8366 return ;
8367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8369 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8370
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008371 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8372
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8374 vos_mem_free(pWdaParams) ;
8375
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008376 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008377 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 return ;
8380}
Jeff Johnson295189b2012-06-20 16:38:30 -07008381/*
8382 * FUNCTION: WDA_ProcessWowlEnterReq
8383 * Request to WDI to enter WOWL
8384 */
8385VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8386 tSirHalWowlEnterParams *pWowlEnterParams)
8387{
8388 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008389 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8391 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8392 sizeof(WDI_WowlEnterReqParamsType)) ;
8393 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008395 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 if(NULL == wdiWowlEnterInfo)
8397 {
8398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008399 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 VOS_ASSERT(0);
8401 return VOS_STATUS_E_NOMEM;
8402 }
8403 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8404 if(NULL == pWdaParams)
8405 {
8406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 VOS_ASSERT(0);
8409 vos_mem_free(wdiWowlEnterInfo);
8410 return VOS_STATUS_E_NOMEM;
8411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8413 pWowlEnterParams->magicPtrn,
8414 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8416 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8418 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8420 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8422 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8424 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8426 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8428 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8430 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008431#ifdef WLAN_WAKEUP_EVENTS
8432 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8433 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8434
8435 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8436 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8437
8438 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8439 pWowlEnterParams->ucWowNetScanOffloadMatch;
8440
8441 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8442 pWowlEnterParams->ucWowGTKRekeyError;
8443
8444 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8445 pWowlEnterParams->ucWoWBSSConnLoss;
8446#endif // WLAN_WAKEUP_EVENTS
8447
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008448 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8449 pWowlEnterParams->bssIdx;
8450
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 /* Store param pointer as passed in by caller */
8453 /* store Params pass it to WDI */
8454 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8455 pWdaParams->pWdaContext = pWDA;
8456 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008457 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008459 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8462 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008463 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 vos_mem_free(pWdaParams->wdaMsgParam) ;
8465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8466 vos_mem_free(pWdaParams) ;
8467 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008468 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008469
8470}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008471/*
8472 * FUNCTION: WDA_WowlExitReqCallback
8473 *
8474 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008475void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008476{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8478 tWDA_CbContext *pWDA;
8479 tSirHalWowlExitParams *pWowlExitParams;
8480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008481 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008482 if(NULL == pWdaParams)
8483 {
8484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008485 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008486 VOS_ASSERT(0) ;
8487 return ;
8488 }
8489 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8490 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8491
8492 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008493 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008494
8495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8496 vos_mem_free(pWdaParams) ;
8497
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008499 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008500 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 return ;
8502}
Jeff Johnson295189b2012-06-20 16:38:30 -07008503/*
8504 * FUNCTION: WDA_ProcessWowlExitReq
8505 * Request to WDI to add WOWL Bcast pattern
8506 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008507VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8508 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008509{
8510 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008511 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008512 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8513 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8514 sizeof(WDI_WowlExitReqParamsType)) ;
8515 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008517 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008518 if(NULL == wdiWowlExitInfo)
8519 {
8520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008521 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008522 VOS_ASSERT(0);
8523 return VOS_STATUS_E_NOMEM;
8524 }
8525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8526 if(NULL == pWdaParams)
8527 {
8528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008529 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008530 VOS_ASSERT(0);
8531 vos_mem_free(wdiWowlExitInfo);
8532 return VOS_STATUS_E_NOMEM;
8533 }
8534
8535 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8536 pWowlExitParams->bssIdx;
8537
8538 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8539
8540 /* Store param pointer as passed in by caller */
8541 /* store Params pass it to WDI */
8542 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8543 pWdaParams->pWdaContext = pWDA;
8544 pWdaParams->wdaMsgParam = pWowlExitParams;
8545
8546 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8547 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008548
Jeff Johnson43971f52012-07-17 12:26:56 -07008549 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 {
8551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8552 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008553 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8555 vos_mem_free(pWdaParams->wdaMsgParam);
8556 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008558 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008559}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008560/*
8561 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8562 * Request to WDI to determine whether a given station is capable of
8563 * using HW-based frame translation
8564 */
8565v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8566 tANI_U8 staIdx)
8567{
8568 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8569}
Jeff Johnson295189b2012-06-20 16:38:30 -07008570/*
8571 * FUNCTION: WDA_NvDownloadReqCallback
8572 * send NV Download RSP back to PE
8573 */
8574void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8575 void* pUserData)
8576{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008577
8578 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8579 tWDA_CbContext *pWDA;
8580
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008582 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008583
8584 if(NULL == pWdaParams)
8585 {
8586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008587 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008588 VOS_ASSERT(0) ;
8589 return ;
8590 }
8591
8592 pWDA = pWdaParams->pWdaContext;
8593
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8596 vos_mem_free(pWdaParams);
8597
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 return ;
8600}
Jeff Johnson295189b2012-06-20 16:38:30 -07008601/*
8602 * FUNCTION: WDA_ProcessNvDownloadReq
8603 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8604 */
8605VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8606{
8607 /* Initialize the local Variables*/
8608 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8609 v_VOID_t *pNvBuffer=NULL;
8610 v_SIZE_t bufferSize = 0;
8611 WDI_Status status = WDI_STATUS_E_FAILURE;
8612 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008613 tWDA_ReqParams *pWdaParams ;
8614
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 if(NULL == pWDA)
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008620 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 return VOS_STATUS_E_FAILURE;
8623 }
8624
8625 /* Get the NV structure base address and size from VOS */
8626 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008627 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8628 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 if(NULL == wdiNvDownloadReqParam)
8630 {
8631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 VOS_ASSERT(0);
8634 return VOS_STATUS_E_NOMEM;
8635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 /* Copy Params to wdiNvDownloadReqParam*/
8637 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8638 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008639
8640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8641 if(NULL == pWdaParams)
8642 {
8643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008644 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008645 VOS_ASSERT(0);
8646 vos_mem_free(wdiNvDownloadReqParam);
8647 return VOS_STATUS_E_NOMEM;
8648 }
8649
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8652 pWdaParams->wdaMsgParam = NULL;
8653 pWdaParams->pWdaContext = pWDA;
8654
8655
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008657
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008659 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8660
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 if(IS_WDI_STATUS_FAILURE(status))
8662 {
8663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8664 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8666 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008669}
8670/*
8671 * FUNCTION: WDA_FlushAcReqCallback
8672 * send Flush AC RSP back to TL
8673 */
8674void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8675{
8676 vos_msg_t wdaMsg = {0} ;
8677 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8678 tFlushACReq *pFlushACReqParams;
8679 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008681 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 if(NULL == pWdaParams)
8683 {
8684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008685 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 VOS_ASSERT(0) ;
8687 return ;
8688 }
8689
8690 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8691 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8692 if(NULL == pFlushACRspParams)
8693 {
8694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008697 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 return ;
8699 }
8700 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8701 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8702 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8703 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8704 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008705 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 vos_mem_free(pWdaParams->wdaMsgParam) ;
8707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8708 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8710 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8711 // POST message to TL
8712 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8713
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 return ;
8715}
Jeff Johnson295189b2012-06-20 16:38:30 -07008716/*
8717 * FUNCTION: WDA_ProcessFlushAcReq
8718 * Request to WDI to Update the DELBA REQ params.
8719 */
8720VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8721 tFlushACReq *pFlushAcReqParams)
8722{
8723 WDI_Status status = WDI_STATUS_SUCCESS ;
8724 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8725 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8726 sizeof(WDI_FlushAcReqParamsType)) ;
8727 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 if(NULL == wdiFlushAcReqParam)
8729 {
8730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 VOS_ASSERT(0);
8733 return VOS_STATUS_E_NOMEM;
8734 }
8735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8736 if(NULL == pWdaParams)
8737 {
8738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 VOS_ASSERT(0);
8741 vos_mem_free(wdiFlushAcReqParam);
8742 return VOS_STATUS_E_NOMEM;
8743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8747 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8748 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8749 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 /* Store Flush AC pointer, as this will be used for response */
8751 /* store Params pass it to WDI */
8752 pWdaParams->pWdaContext = pWDA;
8753 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8754 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8756 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008757 if(IS_WDI_STATUS_FAILURE(status))
8758 {
8759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8760 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8761 vos_mem_free(pWdaParams->wdaMsgParam) ;
8762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8763 vos_mem_free(pWdaParams) ;
8764 //TODO: respond to TL with failure
8765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767}
Jeff Johnson295189b2012-06-20 16:38:30 -07008768/*
8769 * FUNCTION: WDA_BtAmpEventReqCallback
8770 *
8771 */
8772void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8773{
8774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8775 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008776 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777
8778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008779 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 if(NULL == pWdaParams)
8781 {
8782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008783 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 VOS_ASSERT(0) ;
8785 return ;
8786 }
8787 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8788 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8789 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8790 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8791 {
8792 pWDA->wdaAmpSessionOn = VOS_FALSE;
8793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 vos_mem_free(pWdaParams->wdaMsgParam) ;
8795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8796 vos_mem_free(pWdaParams) ;
8797 /*
8798 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8799 * param here
8800 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 return ;
8802}
8803
Jeff Johnson295189b2012-06-20 16:38:30 -07008804/*
8805 * FUNCTION: WDA_ProcessBtAmpEventReq
8806 * Request to WDI to Update with BT AMP events.
8807 */
8808VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8809 tSmeBtAmpEvent *pBtAmpEventParams)
8810{
8811 WDI_Status status = WDI_STATUS_SUCCESS ;
8812 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8813 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8814 sizeof(WDI_BtAmpEventParamsType)) ;
8815 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 if(NULL == wdiBtAmpEventParam)
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 VOS_ASSERT(0);
8823 return VOS_STATUS_E_NOMEM;
8824 }
8825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8826 if(NULL == pWdaParams)
8827 {
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 VOS_ASSERT(0);
8831 vos_mem_free(wdiBtAmpEventParam);
8832 return VOS_STATUS_E_NOMEM;
8833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008834 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8835 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 /* Store BT AMP event pointer, as this will be used for response */
8838 /* store Params pass it to WDI */
8839 pWdaParams->pWdaContext = pWDA;
8840 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8841 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8843 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 if(IS_WDI_STATUS_FAILURE(status))
8845 {
8846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8847 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8848 vos_mem_free(pWdaParams->wdaMsgParam) ;
8849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8850 vos_mem_free(pWdaParams) ;
8851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8853 {
8854 pWDA->wdaAmpSessionOn = VOS_TRUE;
8855 }
8856 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008857}
8858
Jeff Johnson295189b2012-06-20 16:38:30 -07008859/*
8860 * FUNCTION: WDA_FTMCommandReqCallback
8861 * Handle FTM CMD response came from HAL
8862 * Route responce to HDD FTM
8863 */
8864void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8865 void *usrData)
8866{
8867 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8869 {
8870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008871 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 return;
8873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 /* Release Current FTM Command Request */
8875 vos_mem_free(pWDA->wdaFTMCmdReq);
8876 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 /* Post FTM Responce to HDD FTM */
8878 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 return;
8880}
Jeff Johnson295189b2012-06-20 16:38:30 -07008881/*
8882 * FUNCTION: WDA_ProcessFTMCommand
8883 * Send FTM command to WDI
8884 */
8885VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8886 tPttMsgbuffer *pPTTFtmCmd)
8887{
8888 WDI_Status status = WDI_STATUS_SUCCESS;
8889 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 ftmCMDReq = (WDI_FTMCommandReqType *)
8891 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8892 if(NULL == ftmCMDReq)
8893 {
8894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8895 "WDA FTM Command buffer alloc fail");
8896 return VOS_STATUS_E_NOMEM;
8897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8899 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 /* Send command to WDI */
8902 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 return status;
8904}
Jeff Johnsone7245742012-09-05 17:12:55 -07008905#ifdef FEATURE_OEM_DATA_SUPPORT
8906/*
8907 * FUNCTION: WDA_StartOemDataReqCallback
8908 *
8909 */
8910void WDA_StartOemDataReqCallback(
8911 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8912 void* pUserData)
8913{
8914 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8916 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008917 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008918
Jeff Johnsone7245742012-09-05 17:12:55 -07008919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008921
8922 if(NULL == pWdaParams)
8923 {
8924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008925 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008926 VOS_ASSERT(0) ;
8927 return ;
8928 }
8929 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8930
Jeff Johnsone7245742012-09-05 17:12:55 -07008931 if(NULL == pWDA)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008934 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008935 VOS_ASSERT(0);
8936 return ;
8937 }
8938
8939 /*
8940 * Allocate memory for response params sent to PE
8941 */
8942 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8943
8944 // Check if memory is allocated for OemdataMeasRsp Params.
8945 if(NULL == pOemDataRspParams)
8946 {
8947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8948 "OEM DATA WDA callback alloc fail");
8949 VOS_ASSERT(0) ;
8950 return;
8951 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008952
Jeff Johnsone7245742012-09-05 17:12:55 -07008953 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8955 vos_mem_free(pWdaParams->wdaMsgParam);
8956 vos_mem_free(pWdaParams) ;
8957
Jeff Johnsone7245742012-09-05 17:12:55 -07008958 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008959 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008960 * Also, here success always means that we have atleast one BSSID.
8961 */
8962 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8963
8964 //enable Tx
8965 status = WDA_ResumeDataTx(pWDA);
8966 if(status != VOS_STATUS_SUCCESS)
8967 {
8968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8969 }
8970 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8971 return ;
8972}
8973/*
8974 * FUNCTION: WDA_ProcessStartOemDataReq
8975 * Send Start Oem Data Req to WDI
8976 */
8977VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8978 tStartOemDataReq *pOemDataReqParams)
8979{
8980 WDI_Status status = WDI_STATUS_SUCCESS;
8981 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008982 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008983
8984 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8985
8986 if(NULL == wdiOemDataReqParams)
8987 {
8988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008990 VOS_ASSERT(0);
8991 return VOS_STATUS_E_NOMEM;
8992 }
8993
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008994 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8995 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8996 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8997 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008998
8999 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9000
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9002 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009003 {
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009006 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009007 vos_mem_free(pOemDataReqParams);
9008 VOS_ASSERT(0);
9009 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009010 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009011
Bernald44a1ae2013-01-09 08:30:39 -08009012 pWdaParams->pWdaContext = (void*)pWDA;
9013 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9014 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009015
9016 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9017 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009018
9019 if(IS_WDI_STATUS_FAILURE(status))
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9022 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9024 vos_mem_free(pWdaParams->wdaMsgParam);
9025 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009026 }
9027 return CONVERT_WDI2VOS_STATUS(status) ;
9028}
9029#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009030/*
9031 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9032 *
9033 */
9034void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
9035{
9036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009038 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 if(NULL == pWdaParams)
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 VOS_ASSERT(0) ;
9044 return ;
9045 }
9046
9047 if(NULL != pWdaParams->wdaMsgParam)
9048 {
9049 vos_mem_free(pWdaParams->wdaMsgParam);
9050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 if(NULL != pWdaParams->wdaWdiApiMsgParam)
9052 {
9053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9054 }
9055
9056 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 return ;
9058}
Jeff Johnson295189b2012-06-20 16:38:30 -07009059#ifdef WLAN_FEATURE_GTK_OFFLOAD
9060/*
9061 * FUNCTION: WDA_HostOffloadReqCallback
9062 *
9063 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009064void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
9065 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009066{
9067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9068
9069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009071
9072 VOS_ASSERT(NULL != pWdaParams);
9073
9074 vos_mem_free(pWdaParams->wdaMsgParam) ;
9075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9076 vos_mem_free(pWdaParams) ;
9077
9078 //print a msg, nothing else to do
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9080 "WDA_GTKOffloadReqCallback invoked " );
9081
9082 return ;
9083}
9084
9085/*
9086 * FUNCTION: WDA_ProcessGTKOffloadReq
9087 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9088 * to broadcast traffic (sta mode).
9089 */
9090VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9091 tpSirGtkOffloadParams pGtkOffloadParams)
9092{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309093 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9095 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9096 sizeof(WDI_GtkOffloadReqMsg)) ;
9097 tWDA_ReqParams *pWdaParams ;
9098
9099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009100 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009101
9102 if(NULL == wdiGtkOffloadReqMsg)
9103 {
9104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 VOS_ASSERT(0);
9107 return VOS_STATUS_E_NOMEM;
9108 }
9109
9110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9111 if(NULL == pWdaParams)
9112 {
9113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 VOS_ASSERT(0);
9116 vos_mem_free(wdiGtkOffloadReqMsg);
9117 return VOS_STATUS_E_NOMEM;
9118 }
9119
9120 //
9121 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9122 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009123
9124 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309125 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009126
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9128 // Copy KCK
9129 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9130 // Copy KEK
9131 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9132 // Copy KeyReplayCounter
9133 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9134 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9135
9136 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
9137
Jeff Johnson295189b2012-06-20 16:38:30 -07009138
9139 /* Store Params pass it to WDI */
9140 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9141 pWdaParams->pWdaContext = pWDA;
9142 /* Store param pointer as passed in by caller */
9143 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9144
9145 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
9146
9147 if(IS_WDI_STATUS_FAILURE(status))
9148 {
9149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9150 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9152 vos_mem_free(pWdaParams->wdaMsgParam);
9153 vos_mem_free(pWdaParams);
9154 }
9155
9156 return CONVERT_WDI2VOS_STATUS(status) ;
9157}
9158
9159/*
9160 * FUNCTION: WDA_GtkOffloadGetInfoCallback
9161 *
9162 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009163void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
9164 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009165{
9166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9167 tWDA_CbContext *pWDA;
9168 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9169 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 vos_msg_t vosMsg;
9171
9172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174
9175 VOS_ASSERT(NULL != pWdaParams);
9176
9177 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9178 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9179
9180 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9181 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9182
9183 /* Message Header */
9184 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9185 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9186
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009187 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9188 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9189 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9190 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9191 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309193 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9194 pwdiGtkOffloadGetInfoRsparams->bssId,
9195 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 /* VOS message wrapper */
9197 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9198 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9199 vosMsg.bodyval = 0;
9200
9201 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9202 {
9203 /* free the mem and return */
9204 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9205 }
9206
9207 vos_mem_free(pWdaParams->wdaMsgParam) ;
9208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9209 vos_mem_free(pWdaParams) ;
9210}
9211#endif
9212
9213/*
9214 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
9215 * Request to WDI to set Tx Per Tracking configurations
9216 */
9217VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
9218{
9219 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009220 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
9222 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
9223 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
9224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 if(NULL == pwdiSetTxPerTrackingReqParams)
9228 {
9229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 vos_mem_free(pTxPerTrackingParams);
9232 VOS_ASSERT(0);
9233 return VOS_STATUS_E_NOMEM;
9234 }
9235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9236 if(NULL == pWdaParams)
9237 {
9238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009240 vos_mem_free(pwdiSetTxPerTrackingReqParams);
9241 vos_mem_free(pTxPerTrackingParams);
9242 VOS_ASSERT(0);
9243 return VOS_STATUS_E_NOMEM;
9244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9246 pTxPerTrackingParams->ucTxPerTrackingEnable;
9247 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9248 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9249 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9250 pTxPerTrackingParams->ucTxPerTrackingRatio;
9251 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9252 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 /* Store param pointer as passed in by caller */
9255 /* store Params pass it to WDI
9256 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9257 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9258 pWdaParams->pWdaContext = pWDA;
9259 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009260 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009262 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 {
9264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9265 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009266 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 vos_mem_free(pWdaParams->wdaMsgParam) ;
9268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9269 vos_mem_free(pWdaParams) ;
9270 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009271 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009272
9273}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009274/*
9275 * FUNCTION: WDA_HALDumpCmdCallback
9276 * Send the VOS complete .
9277 */
9278void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9279 void* pUserData)
9280{
9281 tANI_U8 *buffer = NULL;
9282 tWDA_CbContext *pWDA = NULL;
9283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 if(NULL == pWdaParams)
9285 {
9286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_ASSERT(0) ;
9289 return ;
9290 }
9291
9292 pWDA = pWdaParams->pWdaContext;
9293 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 if(wdiRspParams->usBufferLen > 0)
9295 {
9296 /*Copy the Resp data to UMAC supplied buffer*/
9297 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9300 vos_mem_free(pWdaParams);
9301
9302 /* Indicate VOSS about the start complete */
9303 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 return ;
9305}
9306
Jeff Johnson295189b2012-06-20 16:38:30 -07009307/*
9308 * FUNCTION: WDA_ProcessHALDumpCmdReq
9309 * Send Dump command to WDI
9310 */
9311VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9312 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9313 tANI_U32 arg4, tANI_U8 *pBuffer)
9314{
9315 WDI_Status status = WDI_STATUS_SUCCESS;
9316 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9317 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9318 tWDA_ReqParams *pWdaParams ;
9319 pVosContextType pVosContext = NULL;
9320 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9322 (void *)pMac);
9323
9324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9325 if(NULL == pWdaParams)
9326 {
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 return VOS_STATUS_E_NOMEM;
9330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 /* Allocate memory WDI request structure*/
9332 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9333 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9334 if(NULL == wdiHALDumpCmdReqParam)
9335 {
9336 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9337 "WDA HAL DUMP Command buffer alloc fail");
9338 vos_mem_free(pWdaParams);
9339 return WDI_STATUS_E_FAILURE;
9340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 /* Extract the arguments */
9343 wdiHalDumpCmdInfo->command = cmd;
9344 wdiHalDumpCmdInfo->argument1 = arg1;
9345 wdiHalDumpCmdInfo->argument2 = arg2;
9346 wdiHalDumpCmdInfo->argument3 = arg3;
9347 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009349 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9350
9351 /* Response message will be passed through the buffer */
9352 pWdaParams->wdaMsgParam = (void *)pBuffer;
9353
9354 /* store Params pass it to WDI */
9355 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 /* Send command to WDI */
9357 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009358 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 if ( vStatus != VOS_STATUS_SUCCESS )
9360 {
9361 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9362 {
9363 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009364 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 }
9366 else
9367 {
9368 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009369 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 }
9371 VOS_ASSERT(0);
9372 }
9373 return status;
9374}
Jeff Johnson295189b2012-06-20 16:38:30 -07009375#ifdef WLAN_FEATURE_GTK_OFFLOAD
9376/*
9377 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9378 * Request to WDI to get GTK Offload Information
9379 */
9380VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9381 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9382{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309383 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9385 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9386 tWDA_ReqParams *pWdaParams ;
9387
9388 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9389 {
9390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 VOS_ASSERT(0);
9393 return VOS_STATUS_E_NOMEM;
9394 }
9395
9396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9397 if(NULL == pWdaParams)
9398 {
9399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 VOS_ASSERT(0);
9402 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9403 return VOS_STATUS_E_NOMEM;
9404 }
9405
9406 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9407
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 /* Store Params pass it to WDI */
9409 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9410 pWdaParams->pWdaContext = pWDA;
9411 /* Store param pointer as passed in by caller */
9412 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9413
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009414 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309415 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009416
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9418
9419 if(IS_WDI_STATUS_FAILURE(status))
9420 {
9421 /* failure returned by WDI API */
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9423 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9425 vos_mem_free(pWdaParams) ;
9426 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9427 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9428 }
9429
9430 return CONVERT_WDI2VOS_STATUS(status) ;
9431}
9432#endif // WLAN_FEATURE_GTK_OFFLOAD
9433
9434/*
9435 * -------------------------------------------------------------------------
9436 * DATA interface with WDI for Mgmt Frames
9437 * -------------------------------------------------------------------------
9438 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009439/*
9440 * FUNCTION: WDA_TxComplete
9441 * Callback function for the WDA_TxPacket
9442 */
9443VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9444 VOS_STATUS status )
9445{
9446
9447 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9448 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009449 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009450
9451 if(NULL == wdaContext)
9452 {
9453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9454 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009455 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 VOS_ASSERT(0);
9457 return VOS_STATUS_E_FAILURE;
9458 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009459
9460 /*Check if frame was timed out or not*/
9461 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9462 (v_PVOID_t)&uUserData);
9463
9464 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9465 {
9466 /*Discard frame - no further processing is needed*/
9467 vos_pkt_return_packet(pData);
9468 return VOS_STATUS_SUCCESS;
9469 }
9470
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9472 if( NULL!=wdaContext->pTxCbFunc)
9473 {
9474 /*check if packet is freed already*/
9475 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9476 {
9477 wdaContext->pTxCbFunc(pMac, pData);
9478 }
9479 else
9480 {
9481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9482 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009483 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 //Return from here since we reaching here because the packet already timeout
9485 return status;
9486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 }
9488
9489 /*
9490 * Trigger the event to bring the HAL TL Tx complete function to come
9491 * out of wait
9492 * Let the coe above to complete the packet first. When this event is set,
9493 * the thread waiting for the event may run and set Vospacket_freed causing the original
9494 * packet not being freed.
9495 */
9496 status = vos_event_set(&wdaContext->txFrameEvent);
9497 if(!VOS_IS_STATUS_SUCCESS(status))
9498 {
9499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9500 "NEW VOS Event Set failed - status = %d \n", status);
9501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 return status;
9503}
Jeff Johnson295189b2012-06-20 16:38:30 -07009504/*
9505 * FUNCTION: WDA_TxPacket
9506 * Forward TX management frame to WDI
9507 */
9508VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9509 void *pFrmBuf,
9510 tANI_U16 frmLen,
9511 eFrameType frmType,
9512 eFrameTxDir txDir,
9513 tANI_U8 tid,
9514 pWDATxRxCompFunc pCompFunc,
9515 void *pData,
9516 pWDAAckFnTxComp pAckTxComp,
9517 tANI_U8 txFlag)
9518{
9519 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9520 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9521 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9522 tANI_U8 eventIdx = 0;
9523 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9524 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 if((NULL == pWDA)||(NULL == pFrmBuf))
9526 {
9527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9528 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009529 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 VOS_ASSERT(0);
9531 return VOS_STATUS_E_FAILURE;
9532 }
9533
9534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9535 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9537 if(NULL == pMac)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 VOS_ASSERT(0);
9542 return VOS_STATUS_E_FAILURE;
9543 }
9544
9545
9546
9547 /* store the call back function in WDA context */
9548 pWDA->pTxCbFunc = pCompFunc;
9549 /* store the call back for the function of ackTxComplete */
9550 if( pAckTxComp )
9551 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009552 if( NULL != pWDA->pAckTxCbFunc )
9553 {
9554 /* Already TxComp is active no need to active again */
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9556 "There is already one request pending for tx complete\n");
9557 pWDA->pAckTxCbFunc( pMac, 0);
9558 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009559
Jeff Johnsone7245742012-09-05 17:12:55 -07009560 if( VOS_STATUS_SUCCESS !=
9561 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9562 {
9563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9564 "Tx Complete timeout Timer Stop Failed ");
9565 }
9566 else
9567 {
9568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009569 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009570 }
9571 }
9572
9573 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9574 pWDA->pAckTxCbFunc = pAckTxComp;
9575 if( VOS_STATUS_SUCCESS !=
9576 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9577 {
9578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9579 "Tx Complete Timer Start Failed ");
9580 pWDA->pAckTxCbFunc = NULL;
9581 return eHAL_STATUS_FAILURE;
9582 }
9583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 /* Reset the event to be not signalled */
9585 status = vos_event_reset(&pWDA->txFrameEvent);
9586 if(!VOS_IS_STATUS_SUCCESS(status))
9587 {
9588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9589 "VOS Event reset failed - status = %d\n",status);
9590 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9591 if( pAckTxComp )
9592 {
9593 pWDA->pAckTxCbFunc = NULL;
9594 if( VOS_STATUS_SUCCESS !=
9595 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9596 {
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9598 "Tx Complete timeout Timer Stop Failed ");
9599 }
9600 }
9601 return VOS_STATUS_E_FAILURE;
9602 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009603
9604 /* If Peer Sta mask is set don't overwrite to self sta */
9605 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009607 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009609 else
9610 {
Ganesh K08bce952012-12-13 15:04:41 -08009611 /* Get system role, use the self station if in unknown role or STA role */
9612 systemRole = wdaGetGlobalSystemRole(pMac);
9613 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9614 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009615#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009616 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009617#endif
Ganesh K08bce952012-12-13 15:04:41 -08009618 ))
9619 {
9620 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9621 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009623
Jeff Johnsone7245742012-09-05 17:12:55 -07009624 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9625 disassoc frame reaches the HW, HAL has already deleted the peer station */
9626 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009628 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009629 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 /*Send Probe request frames on self sta idx*/
9632 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 /* Since we donot want probe responses to be retried, send probe responses
9635 through the NO_ACK queues */
9636 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9637 {
9638 //probe response is sent out using self station and no retries options.
9639 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9640 }
9641 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9642 {
9643 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9644 }
9645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9647
9648 /*Set frame tag to 0
9649 We will use the WDA user data in order to tag a frame as expired*/
9650 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9651 (v_PVOID_t)0);
9652
9653
9654 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9655 frmLen, ucTypeSubType, tid,
9656 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9657 {
9658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9659 "Sending Mgmt Frame failed - status = %d\n", status);
9660 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9661 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9662 if( pAckTxComp )
9663 {
9664 pWDA->pAckTxCbFunc = NULL;
9665 if( VOS_STATUS_SUCCESS !=
9666 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9667 {
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9669 "Tx Complete timeout Timer Stop Failed ");
9670 }
9671 }
9672 return VOS_STATUS_E_FAILURE;
9673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 /*
9675 * Wait for the event to be set by the TL, to get the response of TX
9676 * complete, this event should be set by the Callback function called by TL
9677 */
9678 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9679 &eventIdx);
9680 if(!VOS_IS_STATUS_SUCCESS(status))
9681 {
9682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9683 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009684 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9686 after the packet gets completed(packet freed once)*/
9687
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009688 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -07009689 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009690
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009691 /*Tag Frame as timed out for later deletion*/
9692 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9693 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9694
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 /* check whether the packet was freed already,so need not free again when
9696 * TL calls the WDA_Txcomplete routine
9697 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009698 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9699 /*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 -07009700 {
9701 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009702 } */
9703
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 if( pAckTxComp )
9705 {
9706 pWDA->pAckTxCbFunc = NULL;
9707 if( VOS_STATUS_SUCCESS !=
9708 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9709 {
9710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9711 "Tx Complete timeout Timer Stop Failed ");
9712 }
9713 }
9714 status = VOS_STATUS_E_FAILURE;
9715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 return status;
9717}
Jeff Johnson295189b2012-06-20 16:38:30 -07009718/*
9719 * FUNCTION: WDA_McProcessMsg
9720 * Trigger DAL-AL to start CFG download
9721 */
9722VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9723{
9724 VOS_STATUS status = VOS_STATUS_SUCCESS;
9725 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 if(NULL == pMsg)
9727 {
9728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009729 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 VOS_ASSERT(0);
9731 return VOS_STATUS_E_FAILURE;
9732 }
9733
9734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009735 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009736
9737 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9738 if(NULL == pWDA )
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009743 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009744 return VOS_STATUS_E_FAILURE;
9745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 /* Process all the WDA messages.. */
9747 switch( pMsg->type )
9748 {
9749 case WNI_CFG_DNLD_REQ:
9750 {
9751 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 /* call WDA complete event if config download success */
9753 if( VOS_IS_STATUS_SUCCESS(status) )
9754 {
9755 vos_WDAComplete_cback(pVosContext);
9756 }
9757 else
9758 {
9759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9760 "WDA Config Download failure" );
9761 }
9762 break ;
9763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 /*
9765 * Init SCAN request from PE, convert it into DAL format
9766 * and send it to DAL
9767 */
9768 case WDA_INIT_SCAN_REQ:
9769 {
9770 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9771 break ;
9772 }
9773 /* start SCAN request from PE */
9774 case WDA_START_SCAN_REQ:
9775 {
9776 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9777 break ;
9778 }
9779 /* end SCAN request from PE */
9780 case WDA_END_SCAN_REQ:
9781 {
9782 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9783 break ;
9784 }
9785 /* end SCAN request from PE */
9786 case WDA_FINISH_SCAN_REQ:
9787 {
9788 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9789 break ;
9790 }
9791 /* join request from PE */
9792 case WDA_CHNL_SWITCH_REQ:
9793 {
9794 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9795 {
9796 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9797 }
9798 else
9799 {
9800 WDA_ProcessChannelSwitchReq(pWDA,
9801 (tSwitchChannelParams*)pMsg->bodyptr) ;
9802 }
9803 break ;
9804 }
9805 /* ADD BSS request from PE */
9806 case WDA_ADD_BSS_REQ:
9807 {
9808 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9809 break ;
9810 }
9811 case WDA_ADD_STA_REQ:
9812 {
9813 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9814 break ;
9815 }
9816 case WDA_DELETE_BSS_REQ:
9817 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9819 break ;
9820 }
9821 case WDA_DELETE_STA_REQ:
9822 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9824 break ;
9825 }
9826 case WDA_CONFIG_PARAM_UPDATE_REQ:
9827 {
9828 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9829 break ;
9830 }
9831 case WDA_SET_BSSKEY_REQ:
9832 {
9833 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9834 break ;
9835 }
9836 case WDA_SET_STAKEY_REQ:
9837 {
9838 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9839 break ;
9840 }
9841 case WDA_SET_STA_BCASTKEY_REQ:
9842 {
9843 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9844 break ;
9845 }
9846 case WDA_REMOVE_BSSKEY_REQ:
9847 {
9848 WDA_ProcessRemoveBssKeyReq(pWDA,
9849 (tRemoveBssKeyParams *)pMsg->bodyptr);
9850 break ;
9851 }
9852 case WDA_REMOVE_STAKEY_REQ:
9853 {
9854 WDA_ProcessRemoveStaKeyReq(pWDA,
9855 (tRemoveStaKeyParams *)pMsg->bodyptr);
9856 break ;
9857 }
9858 case WDA_REMOVE_STA_BCASTKEY_REQ:
9859 {
9860 /* TODO: currently UMAC is not sending this request, Add the code for
9861 handling this request when UMAC supports */
9862 break;
9863 }
9864#ifdef FEATURE_WLAN_CCX
9865 case WDA_TSM_STATS_REQ:
9866 {
9867 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9868 break;
9869 }
9870#endif
9871 case WDA_UPDATE_EDCA_PROFILE_IND:
9872 {
9873 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9874 break;
9875 }
9876 case WDA_ADD_TS_REQ:
9877 {
9878 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9879 break;
9880 }
9881 case WDA_DEL_TS_REQ:
9882 {
9883 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9884 break;
9885 }
9886 case WDA_ADDBA_REQ:
9887 {
9888 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9889 break;
9890 }
9891 case WDA_DELBA_IND:
9892 {
9893 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9894 break;
9895 }
9896 case WDA_SET_LINK_STATE:
9897 {
9898 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9899 break;
9900 }
9901 case WDA_GET_STATISTICS_REQ:
9902 {
9903 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9904 break;
9905 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08009906#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
9907 case WDA_GET_ROAM_RSSI_REQ:
9908 {
9909 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
9910 break;
9911 }
9912#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 case WDA_PWR_SAVE_CFG:
9914 {
9915 if(pWDA->wdaState == WDA_READY_STATE)
9916 {
9917 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9918 }
9919 else
9920 {
9921 if(NULL != pMsg->bodyptr)
9922 {
9923 vos_mem_free(pMsg->bodyptr);
9924 }
9925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9926 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9927 }
9928 break;
9929 }
9930 case WDA_ENTER_IMPS_REQ:
9931 {
9932 if(pWDA->wdaState == WDA_READY_STATE)
9933 {
9934 WDA_ProcessEnterImpsReq(pWDA);
9935 }
9936 else
9937 {
9938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9939 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9940 }
9941 break;
9942 }
9943 case WDA_EXIT_IMPS_REQ:
9944 {
9945 if(pWDA->wdaState == WDA_READY_STATE)
9946 {
9947 WDA_ProcessExitImpsReq(pWDA);
9948 }
9949 else
9950 {
9951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9952 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9953 }
9954 break;
9955 }
9956 case WDA_ENTER_BMPS_REQ:
9957 {
9958 if(pWDA->wdaState == WDA_READY_STATE)
9959 {
9960 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9961 }
9962 else
9963 {
9964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9965 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9966 }
9967 break;
9968 }
9969 case WDA_EXIT_BMPS_REQ:
9970 {
9971 if(pWDA->wdaState == WDA_READY_STATE)
9972 {
9973 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9974 }
9975 else
9976 {
9977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9978 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9979 }
9980 break;
9981 }
9982 case WDA_ENTER_UAPSD_REQ:
9983 {
9984 if(pWDA->wdaState == WDA_READY_STATE)
9985 {
9986 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9987 }
9988 else
9989 {
9990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9991 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9992 }
9993 break;
9994 }
9995 case WDA_EXIT_UAPSD_REQ:
9996 {
9997 if(pWDA->wdaState == WDA_READY_STATE)
9998 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009999 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 }
10001 else
10002 {
10003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10004 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10005 }
10006 break;
10007 }
10008 case WDA_UPDATE_UAPSD_IND:
10009 {
10010 if(pWDA->wdaState == WDA_READY_STATE)
10011 {
10012 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10013 }
10014 else
10015 {
10016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10017 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10018 }
10019 break;
10020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 case WDA_REGISTER_PE_CALLBACK :
10022 {
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10024 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10025 /*TODO: store the PE callback */
10026 /* Do Nothing? MSG Body should be freed at here */
10027 if(NULL != pMsg->bodyptr)
10028 {
10029 vos_mem_free(pMsg->bodyptr);
10030 }
10031 break;
10032 }
10033 case WDA_SYS_READY_IND :
10034 {
10035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10036 "Handling msg type WDA_SYS_READY_IND " );
10037 pWDA->wdaState = WDA_READY_STATE;
10038 if(NULL != pMsg->bodyptr)
10039 {
10040 vos_mem_free(pMsg->bodyptr);
10041 }
10042 break;
10043 }
10044 case WDA_BEACON_FILTER_IND :
10045 {
10046 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10047 break;
10048 }
10049 case WDA_BTC_SET_CFG:
10050 {
10051 /*TODO: handle this while dealing with BTC */
10052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10053 "Handling msg type WDA_BTC_SET_CFG " );
10054 /* Do Nothing? MSG Body should be freed at here */
10055 if(NULL != pMsg->bodyptr)
10056 {
10057 vos_mem_free(pMsg->bodyptr);
10058 }
10059 break;
10060 }
10061 case WDA_SIGNAL_BT_EVENT:
10062 {
10063 /*TODO: handle this while dealing with BTC */
10064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10065 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10066 /* Do Nothing? MSG Body should be freed at here */
10067 if(NULL != pMsg->bodyptr)
10068 {
10069 vos_mem_free(pMsg->bodyptr);
10070 }
10071 break;
10072 }
10073 case WDA_CFG_RXP_FILTER_REQ:
10074 {
10075 WDA_ProcessConfigureRxpFilterReq(pWDA,
10076 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10077 break;
10078 }
10079 case WDA_SET_HOST_OFFLOAD:
10080 {
10081 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10082 break;
10083 }
10084 case WDA_SET_KEEP_ALIVE:
10085 {
10086 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10087 break;
10088 }
10089#ifdef WLAN_NS_OFFLOAD
10090 case WDA_SET_NS_OFFLOAD:
10091 {
10092 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10093 break;
10094 }
10095#endif //WLAN_NS_OFFLOAD
10096 case WDA_ADD_STA_SELF_REQ:
10097 {
10098 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10099 break;
10100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 case WDA_DEL_STA_SELF_REQ:
10102 {
10103 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10104 break;
10105 }
10106 case WDA_WOWL_ADD_BCAST_PTRN:
10107 {
10108 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10109 break;
10110 }
10111 case WDA_WOWL_DEL_BCAST_PTRN:
10112 {
10113 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10114 break;
10115 }
10116 case WDA_WOWL_ENTER_REQ:
10117 {
10118 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10119 break;
10120 }
10121 case WDA_WOWL_EXIT_REQ:
10122 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010123 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 break;
10125 }
10126 case WDA_TL_FLUSH_AC_REQ:
10127 {
10128 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10129 break;
10130 }
10131 case WDA_SIGNAL_BTAMP_EVENT:
10132 {
10133 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10134 break;
10135 }
10136#ifdef WDA_UT
10137 case WDA_WDI_EVENT_MSG:
10138 {
10139 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10140 break ;
10141 }
10142#endif
10143 case WDA_UPDATE_BEACON_IND:
10144 {
10145 WDA_ProcessUpdateBeaconParams(pWDA,
10146 (tUpdateBeaconParams *)pMsg->bodyptr);
10147 break;
10148 }
10149 case WDA_SEND_BEACON_REQ:
10150 {
10151 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10152 break;
10153 }
10154 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10155 {
10156 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10157 (tSendProbeRespParams *)pMsg->bodyptr);
10158 break;
10159 }
10160#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10161 case WDA_SET_MAX_TX_POWER_REQ:
10162 {
10163 WDA_ProcessSetMaxTxPowerReq(pWDA,
10164 (tMaxTxPowerParams *)pMsg->bodyptr);
10165 break;
10166 }
10167#endif
schang86c22c42013-03-13 18:41:24 -070010168 case WDA_SET_TX_POWER_REQ:
10169 {
10170 WDA_ProcessSetTxPowerReq(pWDA,
10171 (tSirSetTxPowerReq *)pMsg->bodyptr);
10172 break;
10173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 case WDA_SET_P2P_GO_NOA_REQ:
10175 {
10176 WDA_ProcessSetP2PGONOAReq(pWDA,
10177 (tP2pPsParams *)pMsg->bodyptr);
10178 break;
10179 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010180 /* timer related messages */
10181 case WDA_TIMER_BA_ACTIVITY_REQ:
10182 {
10183 WDA_BaCheckActivity(pWDA) ;
10184 break ;
10185 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010186
10187 /* timer related messages */
10188 case WDA_TIMER_TRAFFIC_STATS_IND:
10189 {
10190 WDA_TimerTrafficStatsInd(pWDA);
10191 break;
10192 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010193#ifdef WLAN_FEATURE_VOWIFI_11R
10194 case WDA_AGGR_QOS_REQ:
10195 {
10196 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
10197 break;
10198 }
10199#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 case WDA_FTM_CMD_REQ:
10201 {
10202 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
10203 break ;
10204 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010205#ifdef FEATURE_OEM_DATA_SUPPORT
10206 case WDA_START_OEM_DATA_REQ:
10207 {
10208 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
10209 break;
10210 }
10211#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010212 /* Tx Complete Time out Indication */
10213 case WDA_TX_COMPLETE_TIMEOUT_IND:
10214 {
10215 WDA_ProcessTxCompleteTimeOutInd(pWDA);
10216 break;
10217 }
10218 case WDA_WLAN_SUSPEND_IND:
10219 {
10220 WDA_ProcessWlanSuspendInd(pWDA,
10221 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
10222 break;
10223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 case WDA_WLAN_RESUME_REQ:
10225 {
10226 WDA_ProcessWlanResumeReq(pWDA,
10227 (tSirWlanResumeParam *)pMsg->bodyptr) ;
10228 break;
10229 }
10230
10231 case WDA_UPDATE_CF_IND:
10232 {
10233 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
10234 pMsg->bodyptr = NULL;
10235 break;
10236 }
10237#ifdef FEATURE_WLAN_SCAN_PNO
10238 case WDA_SET_PNO_REQ:
10239 {
10240 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
10241 break;
10242 }
10243 case WDA_UPDATE_SCAN_PARAMS_REQ:
10244 {
10245 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
10246 break;
10247 }
10248 case WDA_SET_RSSI_FILTER_REQ:
10249 {
10250 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10251 break;
10252 }
10253#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 case WDA_SET_TX_PER_TRACKING_REQ:
10255 {
10256 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10257 break;
10258 }
10259
10260#ifdef WLAN_FEATURE_PACKET_FILTERING
10261 case WDA_8023_MULTICAST_LIST_REQ:
10262 {
10263 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10264 break;
10265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10267 {
10268 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10269 break;
10270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10272 {
10273 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10274 break;
10275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10277 {
10278 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10279 break;
10280 }
10281#endif // WLAN_FEATURE_PACKET_FILTERING
10282
10283
10284 case WDA_TRANSMISSION_CONTROL_IND:
10285 {
10286 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10287 break;
10288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 case WDA_SET_POWER_PARAMS_REQ:
10290 {
10291 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10292 break;
10293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010294#ifdef WLAN_FEATURE_GTK_OFFLOAD
10295 case WDA_GTK_OFFLOAD_REQ:
10296 {
10297 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10298 break;
10299 }
10300
10301 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10302 {
10303 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10304 break;
10305 }
10306#endif //WLAN_FEATURE_GTK_OFFLOAD
10307
10308 case WDA_SET_TM_LEVEL_REQ:
10309 {
10310 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10311 break;
10312 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010313#ifdef WLAN_FEATURE_11AC
10314 case WDA_UPDATE_OP_MODE:
10315 {
10316 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10317 {
10318 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10319 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10320 else
10321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10322 " VHT OpMode Feature is Not Supported \n");
10323 }
10324 else
10325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10326 " 11AC Feature is Not Supported \n");
10327 break;
10328 }
10329#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070010330#ifdef WLAN_FEATURE_11W
10331 case WDA_EXCLUDE_UNENCRYPTED_IND:
10332 {
10333 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
10334 break;
10335 }
10336#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 default:
10338 {
10339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10340 "No Handling for msg type %x in WDA "
10341 ,pMsg->type);
10342 /* Do Nothing? MSG Body should be freed at here */
10343 if(NULL != pMsg->bodyptr)
10344 {
10345 vos_mem_free(pMsg->bodyptr);
10346 }
10347 //WDA_VOS_ASSERT(0) ;
10348 }
10349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 return status ;
10351}
10352
Jeff Johnson295189b2012-06-20 16:38:30 -070010353/*
10354 * FUNCTION: WDA_LowLevelIndCallback
10355 * IND API callback from WDI, send Ind to PE
10356 */
10357void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10358 void* pUserData )
10359{
10360 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10361#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10362 tSirRSSINotification rssiNotification;
10363#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 if(NULL == pWDA)
10365 {
10366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010367 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 VOS_ASSERT(0);
10369 return ;
10370 }
10371
10372 switch(wdiLowLevelInd->wdiIndicationType)
10373 {
10374 case WDI_RSSI_NOTIFICATION_IND:
10375 {
10376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10377 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010378#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10379 rssiNotification.bReserved =
10380 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10381 rssiNotification.bRssiThres1NegCross =
10382 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10383 rssiNotification.bRssiThres1PosCross =
10384 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10385 rssiNotification.bRssiThres2NegCross =
10386 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10387 rssiNotification.bRssiThres2PosCross =
10388 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10389 rssiNotification.bRssiThres3NegCross =
10390 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10391 rssiNotification.bRssiThres3PosCross =
10392 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010393 rssiNotification.avgRssi = (v_S7_t)
10394 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 WLANTL_BMPSRSSIRegionChangedNotification(
10396 pWDA->pVosContext,
10397 &rssiNotification);
10398#endif
10399 break ;
10400 }
10401 case WDI_MISSED_BEACON_IND:
10402 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010403 tpSirSmeMissedBeaconInd pMissBeacInd =
10404 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10406 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010408 if(NULL == pMissBeacInd)
10409 {
10410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10411 "%s: VOS MEM Alloc Failure", __func__);
10412 break;
10413 }
10414 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10415 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10416 pMissBeacInd->bssIdx =
10417 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10418 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 break ;
10420 }
10421 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10422 {
10423 /* TODO: Decode Ind and send Ind to PE */
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10425 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10426 break ;
10427 }
10428
10429 case WDI_MIC_FAILURE_IND:
10430 {
10431 tpSirSmeMicFailureInd pMicInd =
10432 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10433
10434 if(NULL == pMicInd)
10435 {
10436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 break;
10439 }
10440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10441 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10443 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10444 vos_mem_copy(pMicInd->bssId,
10445 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10446 sizeof(tSirMacAddr));
10447 vos_mem_copy(pMicInd->info.srcMacAddr,
10448 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10449 sizeof(tSirMacAddr));
10450 vos_mem_copy(pMicInd->info.taMacAddr,
10451 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10452 sizeof(tSirMacAddr));
10453 vos_mem_copy(pMicInd->info.dstMacAddr,
10454 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10455 sizeof(tSirMacAddr));
10456 vos_mem_copy(pMicInd->info.rxMacAddr,
10457 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10458 sizeof(tSirMacAddr));
10459 pMicInd->info.multicast =
10460 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10461 pMicInd->info.keyId=
10462 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10463 pMicInd->info.IV1=
10464 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10465 vos_mem_copy(pMicInd->info.TSC,
10466 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10468 (void *)pMicInd , 0) ;
10469 break ;
10470 }
10471 case WDI_FATAL_ERROR_IND:
10472 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010473 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 /* TODO: Decode Ind and send Ind to PE */
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10476 "Received WDI_FATAL_ERROR_IND from WDI ");
10477 break ;
10478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 case WDI_DEL_STA_IND:
10480 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 tpDeleteStaContext pDelSTACtx =
10482 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10483
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10485 "Received WDI_DEL_STA_IND from WDI ");
10486 if(NULL == pDelSTACtx)
10487 {
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010490 break;
10491 }
10492 vos_mem_copy(pDelSTACtx->addr2,
10493 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10494 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 vos_mem_copy(pDelSTACtx->bssId,
10496 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10497 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 pDelSTACtx->assocId =
10499 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10500 pDelSTACtx->reasonCode =
10501 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10502 pDelSTACtx->staId =
10503 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10505 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 break ;
10507 }
10508 case WDI_COEX_IND:
10509 {
10510 tANI_U32 index;
10511 vos_msg_t vosMsg;
10512 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10513 if(NULL == pSmeCoexInd)
10514 {
10515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010516 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 break;
10518 }
10519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10520 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 /* Message Header */
10522 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10523 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 /* Info from WDI Indication */
10525 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10526 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10527 {
10528 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 /* VOS message wrapper */
10531 vosMsg.type = eWNI_SME_COEX_IND;
10532 vosMsg.bodyptr = (void *)pSmeCoexInd;
10533 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 /* Send message to SME */
10535 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10536 {
10537 /* free the mem and return */
10538 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10539 }
10540 else
10541 {
10542 /* DEBUG */
10543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10544 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10545 pSmeCoexInd->coexIndType,
10546 pSmeCoexInd->coexIndData[0],
10547 pSmeCoexInd->coexIndData[1],
10548 pSmeCoexInd->coexIndData[2],
10549 pSmeCoexInd->coexIndData[3]);
10550 }
10551 break;
10552 }
10553 case WDI_TX_COMPLETE_IND:
10554 {
10555 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10556 /* Calling TxCompleteAck Indication from wda context*/
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10558 "Complete Indication received from HAL");
10559 if( pWDA->pAckTxCbFunc )
10560 {
10561 if( VOS_STATUS_SUCCESS !=
10562 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10565 "Tx Complete timeout Timer Stop Failed ");
10566 }
10567 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10568 pWDA->pAckTxCbFunc = NULL;
10569 }
10570 else
10571 {
10572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10573 "Tx Complete Indication is received after timeout ");
10574 }
10575 break;
10576 }
Viral Modid86bde22012-12-10 13:09:21 -080010577 case WDI_P2P_NOA_START_IND :
10578 {
10579 tSirP2PNoaStart *pP2pNoaStart =
10580 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10581
10582 if (NULL == pP2pNoaStart)
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10585 "Memory allocation failure, "
10586 "WDI_P2P_NOA_START_IND not forwarded");
10587 break;
10588 }
10589 pP2pNoaStart->status =
10590 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10591 pP2pNoaStart->bssIdx =
10592 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10593 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10594 (void *)pP2pNoaStart , 0) ;
10595 break;
10596 }
10597
Jeff Johnson295189b2012-06-20 16:38:30 -070010598 case WDI_P2P_NOA_ATTR_IND :
10599 {
10600 tSirP2PNoaAttr *pP2pNoaAttr =
10601 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10603 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 if (NULL == pP2pNoaAttr)
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10607 "Memory allocation failure, "
10608 "WDI_P2P_NOA_ATTR_IND not forwarded");
10609 break;
10610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 pP2pNoaAttr->index =
10612 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10613 pP2pNoaAttr->oppPsFlag =
10614 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10615 pP2pNoaAttr->ctWin =
10616 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10617
10618 pP2pNoaAttr->uNoa1IntervalCnt =
10619 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10620 pP2pNoaAttr->uNoa1Duration =
10621 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10622 pP2pNoaAttr->uNoa1Interval =
10623 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10624 pP2pNoaAttr->uNoa1StartTime =
10625 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010626 pP2pNoaAttr->uNoa2IntervalCnt =
10627 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10628 pP2pNoaAttr->uNoa2Duration =
10629 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10630 pP2pNoaAttr->uNoa2Interval =
10631 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10632 pP2pNoaAttr->uNoa2StartTime =
10633 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10635 (void *)pP2pNoaAttr , 0) ;
10636 break;
10637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010638#ifdef FEATURE_WLAN_SCAN_PNO
10639 case WDI_PREF_NETWORK_FOUND_IND:
10640 {
10641 vos_msg_t vosMsg;
10642 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10644 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 if (NULL == pPrefNetworkFoundInd)
10646 {
10647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10648 "Memory allocation failure, "
10649 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10650 break;
10651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 /* Message Header */
10653 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10654 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10655
10656 /* Info from WDI Indication */
10657 pPrefNetworkFoundInd->ssId.length =
10658 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10661 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10662 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 /* VOS message wrapper */
10665 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10666 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10667 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 /* Send message to SME */
10669 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10670 {
10671 /* free the mem and return */
10672 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 break;
10675 }
10676#endif // FEATURE_WLAN_SCAN_PNO
10677
10678#ifdef WLAN_WAKEUP_EVENTS
10679 case WDI_WAKE_REASON_IND:
10680 {
10681 vos_msg_t vosMsg;
10682 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10683 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10684 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10685
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10687 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10688 wdiLowLevelInd->wdiIndicationType,
10689 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10690 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10691 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10692
10693 if (NULL == pWakeReasonInd)
10694 {
10695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10696 "Memory allocation failure, "
10697 "WDI_WAKE_REASON_IND not forwarded");
10698 break;
10699 }
10700
10701 vos_mem_zero(pWakeReasonInd, allocSize);
10702
10703 /* Message Header */
10704 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10705 pWakeReasonInd->mesgLen = allocSize;
10706
10707 /* Info from WDI Indication */
10708 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10709 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10710 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10711 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10712 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10713 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10714 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10715 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10716
10717 /* VOS message wrapper */
10718 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10719 vosMsg.bodyptr = (void *) pWakeReasonInd;
10720 vosMsg.bodyval = 0;
10721
10722 /* Send message to SME */
10723 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10724 {
10725 /* free the mem and return */
10726 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10727 }
10728
10729 break;
10730 }
10731#endif // WLAN_WAKEUP_EVENTS
10732
10733 case WDI_TX_PER_HIT_IND:
10734 {
10735 vos_msg_t vosMsg;
10736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10737 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10738 /* VOS message wrapper */
10739 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10740 vosMsg.bodyptr = NULL;
10741 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 /* Send message to SME */
10743 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10744 {
10745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10746 }
10747 break;
10748 }
10749
10750 default:
10751 {
10752 /* TODO error */
10753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10754 "Received UNKNOWN Indication from WDI ");
10755 }
10756 }
10757 return ;
10758}
10759
Jeff Johnson295189b2012-06-20 16:38:30 -070010760/*
10761 * BA related processing in WDA.
10762 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010763void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10764 void* pUserData)
10765{
10766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10767 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 if(NULL == pWdaParams)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 VOS_ASSERT(0) ;
10773 return ;
10774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 vos_mem_free(pWdaParams->wdaMsgParam) ;
10777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10778 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10782 {
10783 tANI_U8 i = 0 ;
10784 tBaActivityInd *baActivityInd = NULL ;
10785 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10786 tANI_U8 allocSize = sizeof(tBaActivityInd)
10787 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10788 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10789 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010790 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 if(NULL == baActivityInd)
10792 {
10793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010795 VOS_ASSERT(0) ;
10796 return;
10797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10799 sizeof(tSirMacAddr)) ;
10800 baActivityInd->baCandidateCnt = baCandidateCount ;
10801
10802 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10803 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10804
10805 for(i = 0 ; i < baCandidateCount ; i++)
10806 {
10807 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010808 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10809 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10811 {
10812 baCandidate->baInfo[tid].fBaEnable =
10813 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10814 baCandidate->baInfo[tid].startingSeqNum =
10815 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10816 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010817 wdiBaCandidate++ ;
10818 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010820 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10821 }
10822 else
10823 {
10824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10825 "BA Trigger RSP with Failure received ");
10826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010828}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010829
10830
10831/*
10832 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10833 * during MCC
10834 */
10835void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10836{
10837 wpt_uint32 enabled;
10838 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10839 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10840 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10841
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010842 if (NULL == pMac )
10843 {
10844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10845 "%s: Invoked with invalid MAC context ", __func__ );
10846 VOS_ASSERT(0);
10847 return;
10848 }
10849
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010850 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10851 != eSIR_SUCCESS)
10852 {
10853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10854 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10855 return;
10856 }
10857
10858 if(!enabled)
10859 {
10860 return;
10861 }
10862
10863 if(NULL == pWDA)
10864 {
10865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10866 "%s:WDA context is NULL", __func__);
10867 VOS_ASSERT(0);
10868 return;
10869 }
10870
10871 if(activate)
10872 {
10873 if( VOS_STATUS_SUCCESS !=
10874 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10875 {
10876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10877 "Traffic Stats Timer Start Failed ");
10878 return;
10879 }
10880 WDI_DS_ActivateTrafficStats();
10881 }
10882 else
10883 {
10884 WDI_DS_DeactivateTrafficStats();
10885 WDI_DS_ClearTrafficStats();
10886
10887 if( VOS_STATUS_SUCCESS !=
10888 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10889 {
10890 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10891 "Traffic Stats Timer Stop Failed ");
10892 return;
10893 }
10894 }
10895}
10896
10897/*
10898 * Traffic Stats Timer handler
10899 */
10900void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10901{
10902 WDI_Status wdiStatus;
10903 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10904 WDI_TrafficStatsIndType trafficStatsIndParams;
10905 wpt_uint32 length, enabled;
10906 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10907
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010908 if (NULL == pMac )
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10911 "%s: Invoked with invalid MAC context ", __func__ );
10912 VOS_ASSERT(0);
10913 return;
10914 }
10915
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010916 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10917 != eSIR_SUCCESS)
10918 {
10919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10920 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10921 return;
10922 }
10923
10924 if(!enabled)
10925 {
10926 WDI_DS_DeactivateTrafficStats();
10927 return;
10928 }
10929
10930 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10931
10932 if(pWdiTrafficStats != NULL)
10933 {
10934 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10935 trafficStatsIndParams.length = length;
10936 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010937 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010938 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10939 trafficStatsIndParams.pUserData = pWDA;
10940
10941 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10942
10943 if(WDI_STATUS_PENDING == wdiStatus)
10944 {
10945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10946 "Pending received for %s:%d ",__func__,__LINE__ );
10947 }
10948 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10949 {
10950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10951 "Failure in %s:%d ",__func__,__LINE__ );
10952 }
10953
10954 WDI_DS_ClearTrafficStats();
10955 }
10956 else
10957 {
10958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10959 "pWdiTrafficStats is Null");
10960 }
10961
10962 if( VOS_STATUS_SUCCESS !=
10963 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10964 {
10965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10966 "Traffic Stats Timer Start Failed ");
10967 return;
10968 }
10969}
10970
Jeff Johnson295189b2012-06-20 16:38:30 -070010971/*
10972 * BA Activity check timer handler
10973 */
10974void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10975{
10976 tANI_U8 curSta = 0 ;
10977 tANI_U8 tid = 0 ;
10978 tANI_U8 size = 0 ;
10979 tANI_U8 baCandidateCount = 0 ;
10980 tANI_U8 newBaCandidate = 0 ;
10981 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10982
10983 if(NULL == pWDA)
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 VOS_ASSERT(0);
10988 return ;
10989 }
10990 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10991 {
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10993 "Inconsistent STA entries in WDA");
10994 VOS_ASSERT(0) ;
10995 }
10996 /* walk through all STA entries and find out TX packet count */
10997 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10998 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010999#ifdef WLAN_SOFTAP_VSTA_FEATURE
11000 // We can only do BA on "hard" STAs.
11001 if (!(IS_HWSTA_IDX(curSta)))
11002 {
11003 continue;
11004 }
11005#endif //WLAN_SOFTAP_VSTA_FEATURE
11006 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11007 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011008 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 tANI_U32 txPktCount = 0 ;
11010 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011011 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011012 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11013 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11015 curSta, tid, &txPktCount)))
11016 {
11017#if 0
11018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11019 "************* %d:%d, %d ",curSta, txPktCount,
11020 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11021#endif
11022 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011023 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11025 curSta, tid)))
11026 {
11027 /* get prepare for sending message to HAL */
11028 //baCandidate[baCandidateCount].staIdx = curSta ;
11029 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11030 newBaCandidate = WDA_ENABLE_BA ;
11031 }
11032 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11033 }
11034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 /* fill the entry for all the sta with given TID's */
11036 if(WDA_ENABLE_BA == newBaCandidate)
11037 {
11038 /* move to next BA candidate */
11039 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11040 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11041 baCandidateCount++ ;
11042 newBaCandidate = WDA_DISABLE_BA ;
11043 }
11044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 /* prepare and send message to hal */
11046 if( 0 < baCandidateCount)
11047 {
11048 WDI_Status status = WDI_STATUS_SUCCESS ;
11049 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11050 tWDA_ReqParams *pWdaParams =
11051 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 if(NULL == pWdaParams)
11053 {
11054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 VOS_ASSERT(0) ;
11057 return;
11058 }
11059 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11060 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11061 if(NULL == wdiTriggerBaReq)
11062 {
11063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 VOS_ASSERT(0) ;
11066 vos_mem_free(pWdaParams);
11067 return;
11068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 do
11070 {
11071 WDI_TriggerBAReqinfoType *triggerBaInfo =
11072 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11073 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11074 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11075 * for each request */
11076 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11077 triggerBaInfo->ucBASessionID = 0;
11078 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11079 } while(0) ;
11080 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011082 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 pWdaParams->pWdaContext = pWDA;
11084 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11085 pWdaParams->wdaMsgParam = NULL;
11086 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11087 WDA_TriggerBaReqCallback, pWdaParams) ;
11088 if(IS_WDI_STATUS_FAILURE(status))
11089 {
11090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11091 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11092 vos_mem_free(pWdaParams->wdaMsgParam) ;
11093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11094 vos_mem_free(pWdaParams) ;
11095 }
11096 }
11097 else
11098 {
11099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11100 "There is no TID for initiating BA");
11101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 if( VOS_STATUS_SUCCESS !=
11103 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11106 "BA Activity Timer Stop Failed ");
11107 return ;
11108 }
11109 if( VOS_STATUS_SUCCESS !=
11110 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11113 "BA Activity Timer Start Failed ");
11114 return;
11115 }
11116 return ;
11117}
Jeff Johnson295189b2012-06-20 16:38:30 -070011118/*
11119 * WDA common routine to create timer used by WDA.
11120 */
11121static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
11122{
Jeff Johnson295189b2012-06-20 16:38:30 -070011123 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11124 tANI_U32 val = 0 ;
11125 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11126
11127 if(NULL == pMac)
11128 {
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011130 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 VOS_ASSERT(0);
11132 return VOS_STATUS_E_FAILURE;
11133 }
11134 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
11135 != eSIR_SUCCESS)
11136 {
11137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11138 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
11139 return VOS_STATUS_E_FAILURE;
11140 }
11141 val = SYS_MS_TO_TICKS(val) ;
11142
11143 /* BA activity check timer */
11144 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
11145 "BA Activity Check timer", WDA_TimerHandler,
11146 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
11147 if(status != TX_SUCCESS)
11148 {
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011151 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 /* Tx Complete Timeout timer */
11155 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
11156 "Tx Complete Check timer", WDA_TimerHandler,
11157 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011158 if(status != TX_SUCCESS)
11159 {
11160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11161 "Unable to create Tx Complete Timeout timer");
11162 /* Destroy timer of BA activity check timer */
11163 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11164 if(status != TX_SUCCESS)
11165 {
11166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11167 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011168 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011170 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011172
11173 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
11174
11175 /* Traffic Stats timer */
11176 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
11177 "Traffic Stats timer", WDA_TimerHandler,
11178 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
11179 if(status != TX_SUCCESS)
11180 {
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11182 "Unable to create traffic stats timer");
11183 /* Destroy timer of BA activity check timer */
11184 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11185 if(status != TX_SUCCESS)
11186 {
11187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11188 "Unable to Destroy BA activity timer");
11189 }
11190 /* Destroy timer of tx complete timer */
11191 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11192 if(status != TX_SUCCESS)
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11195 "Unable to Tx complete timer");
11196 }
11197 return VOS_STATUS_E_FAILURE ;
11198 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011199 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011200}
Jeff Johnson295189b2012-06-20 16:38:30 -070011201/*
11202 * WDA common routine to destroy timer used by WDA.
11203 */
11204static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
11205{
11206 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11208 if(status != TX_SUCCESS)
11209 {
11210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11211 "Unable to Destroy Tx Complete Timeout timer");
11212 return eSIR_FAILURE ;
11213 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11215 if(status != TX_SUCCESS)
11216 {
11217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11218 "Unable to Destroy BA activity timer");
11219 return eSIR_FAILURE ;
11220 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011221 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
11222 if(status != TX_SUCCESS)
11223 {
11224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11225 "Unable to Destroy traffic stats timer");
11226 return eSIR_FAILURE ;
11227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011228 return eSIR_SUCCESS ;
11229}
Jeff Johnson295189b2012-06-20 16:38:30 -070011230/*
11231 * WDA timer handler.
11232 */
11233void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
11234{
11235 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
11236 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 /*
11238 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
11239 */
11240 wdaMsg.type = timerInfo ;
11241 wdaMsg.bodyptr = NULL;
11242 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 /* post the message.. */
11244 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
11245 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
11246 {
11247 vosStatus = VOS_STATUS_E_BADMSG;
11248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011249}
Jeff Johnson295189b2012-06-20 16:38:30 -070011250/*
11251 * WDA Tx Complete timeout Indication.
11252 */
11253void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
11254{
11255 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 if( pWDA->pAckTxCbFunc )
11257 {
11258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11259 "TxComplete timer expired\n");
11260 pWDA->pAckTxCbFunc( pMac, 0);
11261 pWDA->pAckTxCbFunc = NULL;
11262 }
11263 else
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "There is no request pending for TxComplete and wait timer expired\n");
11267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011268}
Jeff Johnson295189b2012-06-20 16:38:30 -070011269/*
11270 * WDA Set REG Domain to VOS NV
11271 */
11272eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
11273{
11274 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
11275 {
11276 return eHAL_STATUS_INVALID_PARAMETER;
11277 }
11278 return eHAL_STATUS_SUCCESS;
11279}
Jeff Johnson295189b2012-06-20 16:38:30 -070011280
Jeff Johnson295189b2012-06-20 16:38:30 -070011281#ifdef FEATURE_WLAN_SCAN_PNO
11282/*
11283 * FUNCTION: WDA_PNOScanReqCallback
11284 *
11285 */
11286void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11287{
11288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 if(NULL == pWdaParams)
11292 {
11293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 VOS_ASSERT(0) ;
11296 return ;
11297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 if( pWdaParams != NULL )
11299 {
11300 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11301 {
11302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 if( pWdaParams->wdaMsgParam != NULL)
11305 {
11306 vos_mem_free(pWdaParams->wdaMsgParam);
11307 }
11308
11309 vos_mem_free(pWdaParams) ;
11310 }
11311
11312 return ;
11313}
Jeff Johnson295189b2012-06-20 16:38:30 -070011314/*
11315 * FUNCTION: WDA_UpdateScanParamsCallback
11316 *
11317 */
11318void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11319{
11320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011322 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011323 if(NULL == pWdaParams)
11324 {
11325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011326 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 VOS_ASSERT(0) ;
11328 return ;
11329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 if( pWdaParams != NULL )
11331 {
11332 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11333 {
11334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 if( pWdaParams->wdaMsgParam != NULL)
11337 {
11338 vos_mem_free(pWdaParams->wdaMsgParam);
11339 }
11340 vos_mem_free(pWdaParams) ;
11341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 return ;
11343}
Jeff Johnson295189b2012-06-20 16:38:30 -070011344/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11346 * Request to WDI to set Preferred Network List.Offload
11347 */
11348VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11349 tSirPNOScanReq *pPNOScanReqParams)
11350{
Jeff Johnson43971f52012-07-17 12:26:56 -070011351 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11353 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11354 tWDA_ReqParams *pWdaParams ;
11355 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011357 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 if(NULL == pwdiPNOScanReqInfo)
11359 {
11360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 VOS_ASSERT(0);
11363 return VOS_STATUS_E_NOMEM;
11364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11366 if(NULL == pWdaParams)
11367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 VOS_ASSERT(0);
11371 vos_mem_free(pwdiPNOScanReqInfo);
11372 return VOS_STATUS_E_NOMEM;
11373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 //
11375 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11376 //
11377 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11378 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011379 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11380 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11381 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011382 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11383 {
11384 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11385 &pPNOScanReqParams->aNetworks[i],
11386 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 /*Scan timer intervals*/
11389 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11390 &pPNOScanReqParams->scanTimers,
11391 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 /*Probe template for 2.4GHz band*/
11393 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11394 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11395 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11397 pPNOScanReqParams->p24GProbeTemplate,
11398 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 /*Probe template for 5GHz band*/
11400 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11401 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11402 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11404 pPNOScanReqParams->p5GProbeTemplate,
11405 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011407
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 /* Store Params pass it to WDI */
11409 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11410 pWdaParams->pWdaContext = pWDA;
11411 /* Store param pointer as passed in by caller */
11412 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11414 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 if(IS_WDI_STATUS_FAILURE(status))
11416 {
11417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11418 "Failure in Set PNO REQ WDI API, free all the memory " );
11419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11420 vos_mem_free(pWdaParams->wdaMsgParam);
11421 pWdaParams->wdaWdiApiMsgParam = NULL;
11422 pWdaParams->wdaMsgParam = NULL;
11423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 return CONVERT_WDI2VOS_STATUS(status) ;
11425}
Jeff Johnson295189b2012-06-20 16:38:30 -070011426/*
11427 * FUNCTION: WDA_RssiFilterCallback
11428 *
11429 */
11430void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11431{
11432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11433
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011435 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011437 if(NULL == pWdaParams)
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11440 "%s: pWdaParams is NULL", __func__);
11441 VOS_ASSERT(0);
11442 return ;
11443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 vos_mem_free(pWdaParams->wdaMsgParam) ;
11445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11446 vos_mem_free(pWdaParams) ;
11447
11448 return ;
11449}
11450/*
11451 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11452 * Request to WDI to set Preferred Network List.Offload
11453 */
11454VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11455 tSirSetRSSIFilterReq* pRssiFilterParams)
11456{
Jeff Johnson43971f52012-07-17 12:26:56 -070011457 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11459 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11460 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011462 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 if(NULL == pwdiSetRssiFilterReqInfo)
11464 {
11465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 VOS_ASSERT(0);
11468 return VOS_STATUS_E_NOMEM;
11469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11471 if(NULL == pWdaParams)
11472 {
11473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 VOS_ASSERT(0);
11476 vos_mem_free(pwdiSetRssiFilterReqInfo);
11477 return VOS_STATUS_E_NOMEM;
11478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11480 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011481
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 /* Store Params pass it to WDI */
11483 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11484 pWdaParams->pWdaContext = pWDA;
11485 /* Store param pointer as passed in by caller */
11486 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11488 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11489 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 if(IS_WDI_STATUS_FAILURE(status))
11491 {
11492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11493 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11495 vos_mem_free(pWdaParams->wdaMsgParam);
11496 pWdaParams->wdaWdiApiMsgParam = NULL;
11497 pWdaParams->wdaMsgParam = NULL;
11498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 return CONVERT_WDI2VOS_STATUS(status) ;
11500}
11501
Jeff Johnson295189b2012-06-20 16:38:30 -070011502/*
11503 * FUNCTION: WDA_ProcessUpdateScanParams
11504 * Request to WDI to update Scan Parameters
11505 */
11506VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11507 tSirUpdateScanParams *pUpdateScanParams)
11508{
Jeff Johnson43971f52012-07-17 12:26:56 -070011509 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11511 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11512 sizeof(WDI_UpdateScanParamsInfoType)) ;
11513 tWDA_ReqParams *pWdaParams ;
11514 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011516 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 if(NULL == wdiUpdateScanParamsInfoType)
11518 {
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 VOS_ASSERT(0);
11522 return VOS_STATUS_E_NOMEM;
11523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11525 if ( NULL == pWdaParams )
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 VOS_ASSERT(0);
11530 vos_mem_free(wdiUpdateScanParamsInfoType);
11531 return VOS_STATUS_E_NOMEM;
11532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 //
11534 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11535 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11537 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11538 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11539 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11540 "sir struct %d wdi struct %d",
11541 pUpdateScanParams->b11dEnabled,
11542 pUpdateScanParams->b11dResolved,
11543 pUpdateScanParams->ucChannelCount,
11544 pUpdateScanParams->usPassiveMinChTime,
11545 pUpdateScanParams->usPassiveMaxChTime,
11546 pUpdateScanParams->usActiveMinChTime,
11547 pUpdateScanParams->usActiveMaxChTime,
11548 sizeof(tSirUpdateScanParams),
11549 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11550
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11552 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11554 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11556 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11558 pUpdateScanParams->usActiveMaxChTime;
11559 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11560 pUpdateScanParams->usActiveMinChTime;
11561 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11562 pUpdateScanParams->usPassiveMaxChTime;
11563 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11564 pUpdateScanParams->usPassiveMinChTime;
11565
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011567 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11568 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011569
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 for ( i = 0; i <
11571 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11572 i++)
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11575 "Update Scan Parameters channel: %d",
11576 pUpdateScanParams->aChannels[i]);
11577
11578 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11579 pUpdateScanParams->aChannels[i];
11580 }
11581
Jeff Johnson295189b2012-06-20 16:38:30 -070011582 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011583
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 /* Store Params pass it to WDI */
11585 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11586 pWdaParams->pWdaContext = pWDA;
11587 /* Store param pointer as passed in by caller */
11588 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011589
Jeff Johnson295189b2012-06-20 16:38:30 -070011590
11591
11592 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11593 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11594 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 if(IS_WDI_STATUS_FAILURE(status))
11596 {
11597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11598 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11600 vos_mem_free(pWdaParams->wdaMsgParam);
11601 vos_mem_free(pWdaParams);
11602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 return CONVERT_WDI2VOS_STATUS(status) ;
11604}
11605#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011606/*
11607 * FUNCTION: WDA_SetPowerParamsCallback
11608 *
11609 */
11610void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11611{
11612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11613
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11615 "<------ %s " ,__func__);
11616
11617 if(NULL == pWdaParams)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11620 "%s: pWdaParams received NULL", __func__);
11621 VOS_ASSERT(0);
11622 return;
11623 }
11624 if( pWdaParams != NULL )
11625 {
11626 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11627 {
11628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11629 }
11630 if( pWdaParams->wdaMsgParam != NULL)
11631 {
11632 vos_mem_free(pWdaParams->wdaMsgParam);
11633 }
11634 vos_mem_free(pWdaParams);
11635 }
11636 return;
11637}
11638
Jeff Johnson295189b2012-06-20 16:38:30 -070011639#ifdef WLAN_FEATURE_PACKET_FILTERING
11640/*
11641 * FUNCTION: WDA_8023MulticastListReqCallback
11642 *
11643 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011644void WDA_8023MulticastListReqCallback(
11645 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11646 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011647{
11648 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011650 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 if(NULL == pWdaParams)
11652 {
11653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011654 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 VOS_ASSERT(0) ;
11656 return ;
11657 }
11658
11659 vos_mem_free(pWdaParams->wdaMsgParam) ;
11660 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11661 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 //print a msg, nothing else to do
11663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11664 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 return ;
11666}
Jeff Johnson295189b2012-06-20 16:38:30 -070011667/*
11668 * FUNCTION: WDA_Process8023MulticastListReq
11669 * Request to WDI to add 8023 Multicast List
11670 */
11671VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11672 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11673{
Jeff Johnson43971f52012-07-17 12:26:56 -070011674 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11676 tWDA_ReqParams *pWdaParams ;
11677 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 pwdiFltPktSetMcListReqParamsType =
11681 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11682 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11683 ) ;
11684 if(NULL == pwdiFltPktSetMcListReqParamsType)
11685 {
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011688 return VOS_STATUS_E_NOMEM;
11689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11691 if(NULL == pWdaParams)
11692 {
11693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11696 return VOS_STATUS_E_NOMEM;
11697 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011698
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 //
11700 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11701 //
11702 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011703 pRcvFltMcAddrList->ulMulticastAddrCnt;
11704
11705 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11706 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11707 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11708 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11709
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11711 {
11712 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11713 &(pRcvFltMcAddrList->multicastAddr[i]),
11714 sizeof(tSirMacAddr));
11715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011716 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011717
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 /* Store Params pass it to WDI */
11719 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11720 pWdaParams->pWdaContext = pWDA;
11721 /* Store param pointer as passed in by caller */
11722 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 status = WDI_8023MulticastListReq(
11724 pwdiFltPktSetMcListReqParamsType,
11725 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11726 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 if(IS_WDI_STATUS_FAILURE(status))
11728 {
11729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11730 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11732 vos_mem_free(pWdaParams->wdaMsgParam);
11733 vos_mem_free(pWdaParams);
11734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 return CONVERT_WDI2VOS_STATUS(status) ;
11736}
Jeff Johnson295189b2012-06-20 16:38:30 -070011737/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011738 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 *
11740 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011741void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011742 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11743 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011744{
11745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011747 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 if(NULL == pWdaParams)
11750 {
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011752 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 VOS_ASSERT(0) ;
11754 return ;
11755 }
11756
11757 vos_mem_free(pWdaParams->wdaMsgParam) ;
11758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11759 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 //print a msg, nothing else to do
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011762 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 return ;
11764}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011765
11766/*
11767 * FUNCTION: WDA_ReqCallback
11768 *
11769 */
11770void WDA_ReqCallback(WDI_Status wdiStatus,
11771 void* pUserData)
11772{
11773 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11774
11775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11776 "<------ %s, wdiStatus: %d",
11777 __func__, wdiStatus);
11778
11779 if (NULL == pWdaParams)
11780 {
11781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11782 "%s: Invalid pWdaParams pointer", __func__);
11783 VOS_ASSERT(0);
11784 return;
11785 }
11786
11787 if (IS_WDI_STATUS_FAILURE(wdiStatus))
11788 {
11789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11790 vos_mem_free(pWdaParams->wdaMsgParam);
11791 vos_mem_free(pWdaParams);
11792 }
11793
11794 return;
11795}
11796
Jeff Johnson295189b2012-06-20 16:38:30 -070011797/*
11798 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11799 * Request to WDI to set Receive Filters
11800 */
11801VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11802 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11803{
Jeff Johnson43971f52012-07-17 12:26:56 -070011804 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11806 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11807 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11808 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11809 tWDA_ReqParams *pWdaParams ;
11810 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011812 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011817 VOS_ASSERT(0);
11818 return VOS_STATUS_E_NOMEM;
11819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11821 if(NULL == pWdaParams)
11822 {
11823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 VOS_ASSERT(0);
11826 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11827 return VOS_STATUS_E_NOMEM;
11828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011829 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11830 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11831 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11832 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011833 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11834 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11835
11836 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11837 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011838
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11840 "FID %d FT %d NParams %d CT %d",
11841 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11842 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11843 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11844 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11846 {
11847 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11848 &pRcvPktFilterCfg->paramsData[i],
11849 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11851 "Proto %d Comp Flag %d \n",
11852 pwdiSetRcvPktFilterReqParamsType->
11853 wdiPktFilterCfg.paramsData[i].protocolLayer,
11854 pwdiSetRcvPktFilterReqParamsType->
11855 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11857 "Data Offset %d Data Len %d\n",
11858 pwdiSetRcvPktFilterReqParamsType->
11859 wdiPktFilterCfg.paramsData[i].dataOffset,
11860 pwdiSetRcvPktFilterReqParamsType->
11861 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11863 "CData: %d:%d:%d:%d:%d:%d\n",
11864 pwdiSetRcvPktFilterReqParamsType->
11865 wdiPktFilterCfg.paramsData[i].compareData[0],
11866 pwdiSetRcvPktFilterReqParamsType->
11867 wdiPktFilterCfg.paramsData[i].compareData[1],
11868 pwdiSetRcvPktFilterReqParamsType->
11869 wdiPktFilterCfg.paramsData[i].compareData[2],
11870 pwdiSetRcvPktFilterReqParamsType->
11871 wdiPktFilterCfg.paramsData[i].compareData[3],
11872 pwdiSetRcvPktFilterReqParamsType->
11873 wdiPktFilterCfg.paramsData[i].compareData[4],
11874 pwdiSetRcvPktFilterReqParamsType->
11875 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11877 "MData: %d:%d:%d:%d:%d:%d\n",
11878 pwdiSetRcvPktFilterReqParamsType->
11879 wdiPktFilterCfg.paramsData[i].dataMask[0],
11880 pwdiSetRcvPktFilterReqParamsType->
11881 wdiPktFilterCfg.paramsData[i].dataMask[1],
11882 pwdiSetRcvPktFilterReqParamsType->
11883 wdiPktFilterCfg.paramsData[i].dataMask[2],
11884 pwdiSetRcvPktFilterReqParamsType->
11885 wdiPktFilterCfg.paramsData[i].dataMask[3],
11886 pwdiSetRcvPktFilterReqParamsType->
11887 wdiPktFilterCfg.paramsData[i].dataMask[4],
11888 pwdiSetRcvPktFilterReqParamsType->
11889 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 }
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011891 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
11892 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 /* Store Params pass it to WDI */
11894 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11895 pWdaParams->pWdaContext = pWDA;
11896 /* Store param pointer as passed in by caller */
11897 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011899 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 if(IS_WDI_STATUS_FAILURE(status))
11902 {
11903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11904 "Failure in SetFilter(),free all the memory,status %d ",status);
11905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11906 vos_mem_free(pWdaParams->wdaMsgParam);
11907 vos_mem_free(pWdaParams);
11908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 return CONVERT_WDI2VOS_STATUS(status) ;
11910}
Jeff Johnson295189b2012-06-20 16:38:30 -070011911/*
11912 * FUNCTION: WDA_FilterMatchCountReqCallback
11913 *
11914 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011915void WDA_FilterMatchCountReqCallback(
11916 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11917 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011918{
11919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11920 tWDA_CbContext *pWDA;
11921 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11922 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11923 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11924 tANI_U8 i;
11925 vos_msg_t vosMsg;
11926
11927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11930
Jeff Johnsone7245742012-09-05 17:12:55 -070011931 if(NULL == pRcvFltPktMatchCntRsp)
11932 {
11933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011934 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011935 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011936 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011937 return ;
11938 }
11939
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 if(NULL == pWdaParams)
11941 {
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011943 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011944 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011945 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 return ;
11947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11949 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11951 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11952
11953 /* Message Header */
11954 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11955 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11956
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011957 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011958
11959 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11960 {
11961 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11962 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 /* VOS message wrapper */
11965 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11966 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11967 vosMsg.bodyval = 0;
11968 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11969 {
11970 /* free the mem and return */
11971 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11972 }
11973
11974 vos_mem_free(pWdaParams->wdaMsgParam) ;
11975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11976 vos_mem_free(pWdaParams) ;
11977}
Jeff Johnson295189b2012-06-20 16:38:30 -070011978/*
11979 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11980 * Request to WDI to get PC Filter Match Count
11981 */
11982VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11983{
Jeff Johnson43971f52012-07-17 12:26:56 -070011984 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11986 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11987 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011990 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011994 VOS_ASSERT(0);
11995 return VOS_STATUS_E_NOMEM;
11996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11998 if(NULL == pWdaParams)
11999 {
12000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012002 VOS_ASSERT(0);
12003 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
12004 return VOS_STATUS_E_NOMEM;
12005 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012006
Jeff Johnson295189b2012-06-20 16:38:30 -070012007 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
12008
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012009 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
12010 pRcvFltPktMatchRsp->bssId,
12011 sizeof(wpt_macAddr));
12012
Jeff Johnson295189b2012-06-20 16:38:30 -070012013 /* Store Params pass it to WDI */
12014 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
12015 pWdaParams->pWdaContext = pWDA;
12016 /* Store param pointer as passed in by caller */
12017 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070012018 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
12019 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
12020 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012021 if(IS_WDI_STATUS_FAILURE(status))
12022 {
12023 /* failure returned by WDI API */
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12025 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
12026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12027 vos_mem_free(pWdaParams) ;
12028 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
12029 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
12030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 return CONVERT_WDI2VOS_STATUS(status) ;
12032}
Jeff Johnson295189b2012-06-20 16:38:30 -070012033/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012034 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 *
12036 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012037void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012038 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
12039 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012040{
12041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012044/* WDA_VOS_ASSERT(NULL != pWdaParams); */
12045 if(NULL == pWdaParams)
12046 {
12047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 VOS_ASSERT(0) ;
12050 return ;
12051 }
12052
12053 vos_mem_free(pWdaParams->wdaMsgParam) ;
12054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12055 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 //print a msg, nothing else to do
12057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012058 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 return ;
12060}
Jeff Johnson295189b2012-06-20 16:38:30 -070012061/*
12062 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
12063 * Request to WDI to clear Receive Filters
12064 */
12065VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
12066 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
12067{
Jeff Johnson43971f52012-07-17 12:26:56 -070012068 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
12070 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
12071 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 if(NULL == pwdiRcvFltPktClearReqParamsType)
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 VOS_ASSERT(0);
12079 return VOS_STATUS_E_NOMEM;
12080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12082 if(NULL == pWdaParams)
12083 {
12084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012086 VOS_ASSERT(0);
12087 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
12088 return VOS_STATUS_E_NOMEM;
12089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
12091 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070012092 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
12093 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
12094 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
12095 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012096
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012097 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
12098 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 /* Store Params pass it to WDI */
12100 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
12101 pWdaParams->pWdaContext = pWDA;
12102 /* Store param pointer as passed in by caller */
12103 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012105 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 if(IS_WDI_STATUS_FAILURE(status))
12108 {
12109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12110 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
12111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080012112 vos_mem_free(pWdaParams->wdaMsgParam);
12113 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 return CONVERT_WDI2VOS_STATUS(status) ;
12116}
12117#endif // WLAN_FEATURE_PACKET_FILTERING
12118
Jeff Johnson295189b2012-06-20 16:38:30 -070012119/*
12120 * FUNCTION: WDA_ProcessSetPowerParamsReq
12121 * Request to WDI to set power params
12122 */
12123VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
12124 tSirSetPowerParamsReq *pPowerParams)
12125{
Jeff Johnson43971f52012-07-17 12:26:56 -070012126 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
12128 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 if(NULL == pwdiSetPowerParamsReqInfo)
12133 {
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 VOS_ASSERT(0);
12137 return VOS_STATUS_E_NOMEM;
12138 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12140 if(NULL == pWdaParams)
12141 {
12142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 VOS_ASSERT(0);
12145 vos_mem_free(pwdiSetPowerParamsReqInfo);
12146 return VOS_STATUS_E_NOMEM;
12147 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012148
Jeff Johnson295189b2012-06-20 16:38:30 -070012149
12150 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
12151 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070012152 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
12153 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
12155 pPowerParams->uListenInterval;
12156 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
12157 pPowerParams->uBcastMcastFilter;
12158 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
12159 pPowerParams->uEnableBET;
12160 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
12161 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070012162 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012163
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 /* Store Params pass it to WDI */
12165 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
12166 pWdaParams->pWdaContext = pWDA;
12167 /* Store param pointer as passed in by caller */
12168 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012169 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
12170 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
12171 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 if(IS_WDI_STATUS_FAILURE(status))
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12175 "Failure in Set power params REQ WDI API, free all the memory " );
12176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12177 vos_mem_free(pWdaParams->wdaMsgParam);
12178 pWdaParams->wdaWdiApiMsgParam = NULL;
12179 pWdaParams->wdaMsgParam = NULL;
12180 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012181 return CONVERT_WDI2VOS_STATUS(status) ;
12182}
12183
12184/*
12185 * FUNCTION: WDA_SetTmLevelRspCallback
12186 * Set TM Level response
12187 */
12188void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
12189{
12190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12191
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012194
12195 if(NULL == pWdaParams)
12196 {
12197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012198 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012199 VOS_ASSERT(0) ;
12200 return ;
12201 }
12202
12203 /* Dose not need to send notification to upper layer
12204 * Just free allocated resources */
12205 if( pWdaParams != NULL )
12206 {
12207 if( pWdaParams->wdaWdiApiMsgParam != NULL )
12208 {
12209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12210 }
12211 vos_mem_free(pWdaParams->wdaMsgParam) ;
12212 vos_mem_free(pWdaParams) ;
12213 }
12214}
12215
12216/*
12217 * FUNCTION: WDA_ProcessSetTmLevelReq
12218 * Set TM Level request
12219 */
12220VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
12221 tAniSetTmLevelReq *setTmLevelReq)
12222{
12223 WDI_Status status = WDI_STATUS_SUCCESS ;
12224 tWDA_ReqParams *pWdaParams ;
12225 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
12226 (WDI_SetTmLevelReqType *)vos_mem_malloc(
12227 sizeof(WDI_SetTmLevelReqType)) ;
12228 if(NULL == wdiSetTmLevelReq)
12229 {
12230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012232 VOS_ASSERT(0);
12233 return VOS_STATUS_E_NOMEM;
12234 }
12235
12236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12237 if(NULL == pWdaParams)
12238 {
12239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012241 VOS_ASSERT(0);
12242 vos_mem_free(wdiSetTmLevelReq);
12243 return VOS_STATUS_E_NOMEM;
12244 }
12245
12246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012248
12249 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
12250 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
12251
12252 pWdaParams->pWdaContext = pWDA;
12253 pWdaParams->wdaMsgParam = setTmLevelReq;
12254 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
12255
12256 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
12257 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
12258
12259 if(IS_WDI_STATUS_FAILURE(status))
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080012262 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070012263 vos_mem_free(pWdaParams->wdaMsgParam) ;
12264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12265 vos_mem_free(pWdaParams) ;
12266 }
12267
12268 return CONVERT_WDI2VOS_STATUS(status) ;
12269}
12270
12271VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
12272 tpTxControlParams pTxCtrlParam)
12273{
12274 VOS_STATUS wdaStatus;
12275
12276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 if( pTxCtrlParam == NULL )
12279 {
12280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012281 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 return VOS_STATUS_E_FAILURE;
12283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012284 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
12285 {
12286 wdaStatus = WDA_SuspendDataTx(pWDA);
12287 }
12288 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
12289 {
12290 wdaStatus = WDA_ResumeDataTx(pWDA);
12291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 return wdaStatus;
12293}
12294
12295 /* FUNCTION WDA_featureCapsExchange
12296 * WDA API to invoke capability exchange between host and FW.
12297 */
12298void WDA_featureCapsExchange(v_PVOID_t pVosContext)
12299{
12300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012301 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012302 WDI_featureCapsExchangeReq( NULL, pVosContext);
12303}
12304
Yathish9f22e662012-12-10 14:21:35 -080012305/* FUNCTION WDA_disableCapablityFeature
12306 * WDA API to diable Active mode offload in host.
12307 */
12308void WDA_disableCapablityFeature(tANI_U8 feature_index)
12309{
12310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12311 "%s:enter", __func__ );
12312 WDI_disableCapablityFeature(feature_index);
12313}
12314
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 /* FUNCTION WDA_getHostWlanFeatCaps
12316 * Wrapper for WDI API, that will return if the feature (enum value).passed
12317 * to this API is supported or not in Host
12318 * return value
12319 * 0 - implies feature is NOT Supported
12320 * any non zero value - implies feature is SUPPORTED
12321 */
12322tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
12323{
12324 return WDI_getHostWlanFeatCaps(featEnumValue);
12325}
12326
12327 /* FUNCTION WDA_getFwWlanFeatCaps
12328 * Wrapper for WDI API, that will return if the feature (enum value).passed
12329 * to this API is supported or not in FW
12330 * return value
12331 * 0 - implies feature is NOT Supported
12332 * any non zero value - implies feature is SUPPORTED
12333 */
12334tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12335{
12336 return WDI_getFwWlanFeatCaps(featEnumValue);
12337}
12338
12339/*
12340 * FUNCTION: WDA_shutdown
12341 * Shutdown WDA/WDI without handshaking with Riva.
12342 * Synchronous function.
12343 */
12344VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12345{
12346 WDI_Status wdiStatus;
12347 //tANI_U8 eventIdx = 0;
12348 VOS_STATUS status = VOS_STATUS_SUCCESS;
12349 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012350 if (NULL == pWDA)
12351 {
12352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012353 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 VOS_ASSERT(0);
12355 return VOS_STATUS_E_FAILURE;
12356 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 /* FTM mode stay START_STATE */
12358 if( (WDA_READY_STATE != pWDA->wdaState) &&
12359 (WDA_INIT_STATE != pWDA->wdaState) &&
12360 (WDA_START_STATE != pWDA->wdaState) )
12361 {
12362 VOS_ASSERT(0);
12363 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012364
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012365 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12366 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 {
12368 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012369 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012371
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 /* call WDI shutdown */
12373 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012374 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12375 {
12376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12377 "error in WDA Stop" );
12378 status = VOS_STATUS_E_FAILURE;
12379 }
12380 /* WDI stop is synchrnous, shutdown is complete when it returns */
12381 pWDA->wdaState = WDA_STOP_STATE;
12382
Jeff Johnson295189b2012-06-20 16:38:30 -070012383 /* shutdown should perform the stop & close actions. */
12384 /* Destroy the event */
12385 status = vos_event_destroy(&pWDA->txFrameEvent);
12386 if(!VOS_IS_STATUS_SUCCESS(status))
12387 {
12388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12389 "VOS Event destroy failed - status = %d\n", status);
12390 status = VOS_STATUS_E_FAILURE;
12391 }
12392 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12393 if(!VOS_IS_STATUS_SUCCESS(status))
12394 {
12395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12396 "VOS Event destroy failed - status = %d\n", status);
12397 status = VOS_STATUS_E_FAILURE;
12398 }
12399 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12400 if(!VOS_IS_STATUS_SUCCESS(status))
12401 {
12402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12403 "VOS Event destroy failed - status = %d\n", status);
12404 status = VOS_STATUS_E_FAILURE;
12405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012406 /* free WDA context */
12407 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12408 if ( !VOS_IS_STATUS_SUCCESS(status) )
12409 {
12410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12411 "error in WDA close " );
12412 status = VOS_STATUS_E_FAILURE;
12413 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012414 return status;
12415}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012416
Jeff Johnsone7245742012-09-05 17:12:55 -070012417/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012418 * FUNCTION: WDA_setNeedShutdown
12419 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012420 */
12421
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012422void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012423{
12424 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012425 if(pWDA == NULL)
12426 {
12427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12428 "Could not get the WDA Context pointer" );
12429 return;
12430 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012431 pWDA->needShutdown = TRUE;
12432}
12433/*
12434 * FUNCTION: WDA_needShutdown
12435 * WDA needs a shutdown
12436 */
12437
12438v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12439{
12440 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012441 if(pWDA == NULL)
12442 {
12443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12444 "Could not get the WDA Context pointer" );
12445 return 0;
12446 }
12447 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012448}
12449
Mohit Khanna4a70d262012-09-11 16:30:12 -070012450#ifdef WLAN_FEATURE_11AC
12451/*
12452 * FUNCTION: WDA_SetBeaconFilterReqCallback
12453 *
12454 */
12455void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12456{
12457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012459 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012460 if(NULL == pWdaParams)
12461 {
12462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012463 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012464 VOS_ASSERT(0) ;
12465 return ;
12466 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012467
Mohit Khanna4a70d262012-09-11 16:30:12 -070012468 vos_mem_free(pWdaParams->wdaMsgParam) ;
12469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12470 vos_mem_free(pWdaParams) ;
12471 /*
12472 * No respone required for SetBeaconFilter req so just free the request
12473 * param here
12474 */
12475
12476 return ;
12477}
12478
12479VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12480 tUpdateVHTOpMode *pData)
12481{
12482 WDI_Status status = WDI_STATUS_SUCCESS ;
12483 tWDA_ReqParams *pWdaParams ;
12484 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12485 sizeof(WDI_UpdateVHTOpMode)) ;
12486 if(NULL == wdiTemp)
12487 {
12488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012489 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012490 VOS_ASSERT(0);
12491 return VOS_STATUS_E_NOMEM;
12492 }
12493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12494 if(NULL == pWdaParams)
12495 {
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012497 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012498 VOS_ASSERT(0);
12499 vos_mem_free(wdiTemp);
12500 return VOS_STATUS_E_NOMEM;
12501 }
12502
12503 wdiTemp->opMode = pData->opMode;
12504 wdiTemp->staId = pData->staId;
12505
12506 pWdaParams->pWdaContext = pWDA;
12507 /* Store Req pointer, as this will be used for response */
12508 pWdaParams->wdaMsgParam = (void *)pData;
12509 /* store Params pass it to WDI */
12510 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12511
12512 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12513
12514 if(IS_WDI_STATUS_FAILURE(status))
12515 {
12516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12517 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12519 vos_mem_free(pWdaParams->wdaMsgParam);
12520 vos_mem_free(pWdaParams);
12521 }
12522 return CONVERT_WDI2VOS_STATUS(status) ;
12523}
12524#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012525
12526/*==========================================================================
12527 FUNCTION WDA_TransportChannelDebug
12528
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012529 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012530 Display Transport Channel debugging information
12531 User may request to display DXE channel snapshot
12532 Or if host driver detects any abnormal stcuk may display
12533
12534 PARAMETERS
schang6295e542013-03-12 15:31:23 -070012535 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080012536 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012537 enableStallDetect : Enable stall detect feature
12538 This feature will take effect to data performance
12539 Not integrate till fully verification
12540
12541 RETURN VALUE
12542 NONE
12543
12544===========================================================================*/
12545void WDA_TransportChannelDebug
12546(
schang6295e542013-03-12 15:31:23 -070012547 tpAniSirGlobal pMac,
12548 v_BOOL_t displaySnapshot,
12549 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012550)
12551{
schang6295e542013-03-12 15:31:23 -070012552 if (NULL != pMac)
12553 {
12554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12555 "HAL BMU DUMP Request" );
12556 /* 17 is BMU dump opcode */
12557 WDA_HALDumpCmdReq(pMac, 17, 0, 0, 0, 0, NULL);
12558 }
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012559 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012560 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012561}