blob: 3eaa5185c7e723517be749bdac4fd822a2e534af [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;
1871
1872 v_BOOL_t bStatus = VOS_FALSE;
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 Johnson295189b2012-06-20 16:38:30 -07001929 if( pFileImage != NULL )
1930 {
1931 vos_mem_free( pFileImage );
1932 }
1933 return vosStatus;
1934
1935fail:
1936 if(pCfgBinary != NULL)
1937 vos_mem_free( pFileImage );
1938
1939 return vosStatus;
1940}
Jeff Johnson295189b2012-06-20 16:38:30 -07001941/* -----------------------------------------------------------------
1942 * WDI interface
1943 * -----------------------------------------------------------------
1944 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001945/*
1946 * FUNCTION: WDA_suspendDataTxCallback
1947 * call back function called from TL after suspend Transmission
1948 */
1949VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1950 v_U8_t* ucSTAId,
1951 VOS_STATUS vosStatus)
1952{
1953 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001955 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 if (NULL == pWDA )
1957 {
1958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001959 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 VOS_ASSERT(0);
1961 return VOS_STATUS_E_FAILURE;
1962 }
1963 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1964 {
1965 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1966 }
1967 else
1968 {
1969 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001971 /* Trigger the event to bring the WDA TL suspend function to come
1972 * out of wait*/
1973 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1974 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1975 {
1976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1977 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 /* If TL suspended had timedout before this callback was called, resume back
1980 * TL.*/
1981 if (pWDA->txSuspendTimedOut)
1982 {
1983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1984 "Late TLSuspendCallback, resuming TL back again\n");
1985 WDA_ResumeDataTx(pWDA);
1986 pWDA->txSuspendTimedOut = FALSE;
1987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 return VOS_STATUS_SUCCESS;
1989}
Jeff Johnson295189b2012-06-20 16:38:30 -07001990/*
1991 * FUNCTION: WDA_suspendDataTx
1992 * Update TL to suspend the data Transmission
1993 */
1994VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1995{
1996 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1997 tANI_U8 eventIdx = 0;
1998 tANI_U8 ucSTAId = 0;
1999
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002001 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 if (pWDA->txSuspendTimedOut)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "TL suspend timedout previously, CB not called yet\n");
2007 return status;
2008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /* Reset the event to be not signalled */
2010 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2011 if(!VOS_IS_STATUS_SUCCESS(status))
2012 {
2013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2014 "VOS Event reset failed - status = %d\n",status);
2015 return VOS_STATUS_E_FAILURE;
2016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 /*Indicate TL to suspend transmission for all Sta Id */
2018 ucSTAId = WLAN_ALL_STA;
2019 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2020 WDA_SuspendDataTxCallback);
2021 if(status != VOS_STATUS_SUCCESS)
2022 {
2023 return status;
2024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 /* Wait for the event to be set by the TL, to get the response of
2026 * suspending the TX queues, this event should be set by the Callback
2027 * function called by TL*/
2028 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2029 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2030 if(!VOS_IS_STATUS_SUCCESS(status))
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002034 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002035 /* Set this flag to true when TL suspend times out, so that when TL
2036 * suspend eventually happens and calls the callback, TL can be resumed
2037 * right away by looking at this flag when true.*/
2038 pWDA->txSuspendTimedOut = TRUE;
2039 }
2040 else
2041 {
2042 pWDA->txSuspendTimedOut = FALSE;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2045 {
2046 status = VOS_STATUS_SUCCESS;
2047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 return status;
2049}
Jeff Johnson295189b2012-06-20 16:38:30 -07002050/*
2051 * FUNCTION: WDA_resumeDataTx
2052 * Update TL to resume the data Transmission
2053 */
2054VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2055{
2056 VOS_STATUS status = VOS_STATUS_SUCCESS;
2057 tANI_U8 ucSTAId = 0;
2058
2059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002060 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 ucSTAId = WLAN_ALL_STA;
2062 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2063 return status;
2064}
Jeff Johnson295189b2012-06-20 16:38:30 -07002065/*
2066 * FUNCTION: WDA_InitScanReqCallback
2067 * Trigger Init SCAN callback
2068 */
2069void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2070{
2071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2072 tWDA_CbContext *pWDA;
2073 tInitScanParams *pWDA_ScanParam ;
2074 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002076 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 if(NULL == pWdaParams)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002080 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 VOS_ASSERT(0) ;
2082 return ;
2083 }
2084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2085 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if(NULL == pWDA_ScanParam)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002090 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2092 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 return ;
2094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if(WDI_STATUS_SUCCESS != wdiStatus)
2096 {
2097 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 if(VOS_STATUS_SUCCESS != status)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002101 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 }
2103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 /* free WDI command buffer */
2105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002107
Jeff Johnson295189b2012-06-20 16:38:30 -07002108
2109 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002110 /* without converting the Status to Failure or Success Just
2111 pass the same status to lim */
2112 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 /* send SCAN RSP message back to PE */
2114 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 return ;
2116}
2117
2118/*
2119 * FUNCTION: WDA_ProcessInitScanReq
2120 * Trigger Init SCAN in DAL
2121 */
2122VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2123 tInitScanParams *initScanParams)
2124{
2125 WDI_Status status = WDI_STATUS_SUCCESS ;
2126 WDI_InitScanReqParamsType *wdiInitScanParam =
2127 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2128 sizeof(WDI_InitScanReqParamsType)) ;
2129 tWDA_ReqParams *pWdaParams;
2130 tANI_U8 i = 0;
2131
2132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 if(NULL == wdiInitScanParam)
2135 {
2136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002137 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 VOS_ASSERT(0);
2139 return VOS_STATUS_E_NOMEM;
2140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2142 if(NULL == pWdaParams)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 VOS_ASSERT(0);
2147 vos_mem_free(wdiInitScanParam);
2148 return VOS_STATUS_E_NOMEM;
2149 }
2150
2151 /* Copy init Scan params to WDI structure */
2152 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2153 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2154 sizeof(tSirMacAddr)) ;
2155 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2156 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2157 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2159 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2161 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2163 {
2164 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2165 initScanParams->scanEntry.bssIdx[i] ;
2166 }
2167
2168 /* if Frame length, copy macMgmtHdr or WDI structure */
2169 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2170 {
2171 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2172 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2173 }
2174 wdiInitScanParam->wdiReqStatusCB = NULL ;
2175
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 /* Store Init Req pointer, as this will be used for response */
2177 pWdaParams->pWdaContext = pWDA;
2178 pWdaParams->wdaMsgParam = initScanParams;
2179 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 /* first try to suspend TX */
2181 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if(WDI_STATUS_SUCCESS != status)
2183 {
2184 goto handleWdiFailure;
2185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 /* call DAL API to pass init scan request to DAL */
2187 status = WDI_InitScanReq(wdiInitScanParam,
2188 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 if(IS_WDI_STATUS_FAILURE(status))
2190 {
2191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2192 "error in WDA Init Scan, Resume Tx " );
2193 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0) ;
2195
2196 goto handleWdiFailure;
2197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002199handleWdiFailure:
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Failure in WDI Api, free all the memory " );
2202 /* free WDI command buffer */
2203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2204 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 /* send Failure to PE */
2206 initScanParams->status = eSIR_FAILURE ;
2207 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 return CONVERT_WDI2VOS_STATUS(status) ;
2209}
2210
Jeff Johnson295189b2012-06-20 16:38:30 -07002211/*
2212 * FUNCTION: WDA_StartScanReqCallback
2213 * send Start SCAN RSP back to PE
2214 */
2215void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2216 void* pUserData)
2217{
2218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2219 tWDA_CbContext *pWDA;
2220 tStartScanParams *pWDA_ScanParam;
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002222 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 if(NULL == pWdaParams)
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_ASSERT(0) ;
2228 return ;
2229 }
2230 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2231 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 if(NULL == pWDA_ScanParam)
2233 {
2234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002235 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002237 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 return ;
2239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2241 {
2242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002243 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002245 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 return ;
2247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2249 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002250
Jeff Johnson295189b2012-06-20 16:38:30 -07002251
2252 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002253 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* send SCAN RSP message back to PE */
2255 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 return ;
2257}
2258
Jeff Johnson295189b2012-06-20 16:38:30 -07002259/*
2260 * FUNCTION: WDA_ProcessStartScanReq
2261 * Trigger start SCAN in WDI
2262 */
2263VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2264 tStartScanParams *startScanParams)
2265{
2266 WDI_Status status = WDI_STATUS_SUCCESS;
2267 WDI_StartScanReqParamsType *wdiStartScanParams =
2268 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2269 sizeof(WDI_StartScanReqParamsType)) ;
2270 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002272 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 if(NULL == wdiStartScanParams)
2274 {
2275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 VOS_ASSERT(0);
2278 return VOS_STATUS_E_NOMEM;
2279 }
2280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2281 if(NULL == pWdaParams)
2282 {
2283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 VOS_ASSERT(0);
2286 vos_mem_free(wdiStartScanParams);
2287 return VOS_STATUS_E_NOMEM;
2288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* Copy init Scan params to WDI structure */
2290 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2291 wdiStartScanParams->wdiReqStatusCB = NULL ;
2292
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 /* Store Init Req pointer, as this will be used for response */
2294 /* store Params pass it to WDI */
2295 pWdaParams->pWdaContext = pWDA;
2296 pWdaParams->wdaMsgParam = startScanParams;
2297 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 /* call DAL API to pass init scan request to DAL */
2299 status = WDI_StartScanReq(wdiStartScanParams,
2300 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 /* failure returned by WDI API */
2302 if(IS_WDI_STATUS_FAILURE(status))
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failure in Start Scan WDI API, free all the memory "
2306 "It should be due to previous abort scan." );
2307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2308 vos_mem_free(pWdaParams) ;
2309 startScanParams->status = eSIR_FAILURE ;
2310 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 return CONVERT_WDI2VOS_STATUS(status) ;
2313}
Jeff Johnson295189b2012-06-20 16:38:30 -07002314/*
2315 * FUNCTION: WDA_EndScanReqCallback
2316 * END SCAN callback
2317 */
2318void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2319{
2320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2321 tWDA_CbContext *pWDA;
2322 tEndScanParams *endScanParam;
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if(NULL == pWdaParams)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 VOS_ASSERT(0) ;
2330 return ;
2331 }
2332 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2333 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 if(NULL == endScanParam)
2335 {
2336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002337 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2340 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 return ;
2342 }
2343
2344 /* Free WDI command buffer */
2345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2346 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002348 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 /* send response back to PE */
2350 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2351 return ;
2352}
2353
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_ProcessEndScanReq
2356 * Trigger END SCAN in WDI
2357 */
2358VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2359 tEndScanParams *endScanParams)
2360{
2361 WDI_Status status = WDI_STATUS_SUCCESS;
2362 WDI_EndScanReqParamsType *wdiEndScanParams =
2363 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2364 sizeof(WDI_EndScanReqParamsType)) ;
2365 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002367 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 if(NULL == wdiEndScanParams)
2369 {
2370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002371 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 VOS_ASSERT(0);
2373 return VOS_STATUS_E_NOMEM;
2374 }
2375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2376 if(NULL == pWdaParams)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 VOS_ASSERT(0);
2381 vos_mem_free(wdiEndScanParams);
2382 return VOS_STATUS_E_NOMEM;
2383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 /* Copy init Scan params to WDI structure */
2385 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2386 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 /* Store Init Req pointer, as this will be used for response */
2388 /* store Params pass it to WDI */
2389 pWdaParams->pWdaContext = pWDA;
2390 pWdaParams->wdaMsgParam = endScanParams;
2391 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 /* call DAL API to pass init scan request to DAL */
2393 status = WDI_EndScanReq(wdiEndScanParams,
2394 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 if(IS_WDI_STATUS_FAILURE(status))
2396 {
2397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2398 "Failure in End Scan WDI API, free all the memory "
2399 "It should be due to previous abort scan." );
2400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2401 vos_mem_free(pWdaParams) ;
2402 endScanParams->status = eSIR_FAILURE ;
2403 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 return CONVERT_WDI2VOS_STATUS(status) ;
2406}
Jeff Johnson295189b2012-06-20 16:38:30 -07002407/*
2408 * FUNCTION: WDA_FinishScanReqCallback
2409 * Trigger Finish SCAN callback
2410 */
2411void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2412{
2413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2414 tWDA_CbContext *pWDA;
2415 tFinishScanParams *finishScanParam;
2416 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002418 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 if(NULL == pWdaParams)
2420 {
2421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002422 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 VOS_ASSERT(0) ;
2424 return ;
2425 }
2426
2427 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2428 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 if(NULL == finishScanParam)
2430 {
2431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002432 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2435 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return ;
2437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2439 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /*
2441 * Now Resume TX, if we reached here means, TX is already suspended, we
2442 * have to resume it unconditionaly
2443 */
2444 status = WDA_ResumeDataTx(pWDA) ;
2445
2446 if(VOS_STATUS_SUCCESS != status)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002451 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2453 return ;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_ProcessFinshScanReq
2457 * Trigger Finish SCAN in WDI
2458 */
2459VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2460 tFinishScanParams *finishScanParams)
2461{
2462 WDI_Status status = WDI_STATUS_SUCCESS;
2463 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2464 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2465 sizeof(WDI_FinishScanReqParamsType)) ;
2466 tWDA_ReqParams *pWdaParams ;
2467 tANI_U8 i = 0;
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 if(NULL == wdiFinishScanParams)
2471 {
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 VOS_ASSERT(0);
2475 return VOS_STATUS_E_NOMEM;
2476 }
2477 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2478 if(NULL == pWdaParams)
2479 {
2480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 VOS_ASSERT(0);
2483 vos_mem_free(wdiFinishScanParams);
2484 return VOS_STATUS_E_NOMEM;
2485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* Copy init Scan params to WDI structure */
2487 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2488 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2489 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2491 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2492 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2493 finishScanParams->frameLength ;
2494 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2495 finishScanParams->currentOperChannel ;
2496 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2497 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2498 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2500 {
2501 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2502 finishScanParams->scanEntry.bssIdx[i] ;
2503 }
2504
2505
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 /* if Frame length, copy macMgmtHdr ro WDI structure */
2507 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2508 {
2509 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2510 &finishScanParams->macMgmtHdr,
2511 sizeof(WDI_MacMgmtHdr)) ;
2512 }
2513 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 /* Store Init Req pointer, as this will be used for response */
2515 /* store Params pass it to WDI */
2516 pWdaParams->pWdaContext = pWDA;
2517 pWdaParams->wdaMsgParam = finishScanParams;
2518 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 /* call DAL API to pass init scan request to DAL */
2520 status = WDI_FinishScanReq(wdiFinishScanParams,
2521 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002522
Jeff Johnson295189b2012-06-20 16:38:30 -07002523
2524 /*
2525 * WDI API returns failure..
2526 */
2527 if(IS_WDI_STATUS_FAILURE( status))
2528 {
2529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2530 "Failure in Finish Scan WDI API, free all the memory " );
2531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2532 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 finishScanParams->status = eSIR_FAILURE ;
2534 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 return CONVERT_WDI2VOS_STATUS(status) ;
2537}
Jeff Johnson295189b2012-06-20 16:38:30 -07002538/*---------------------------------------------------------------------
2539 * ASSOC API's
2540 *---------------------------------------------------------------------
2541 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002542/*
2543 * FUNCTION: WDA_JoinReqCallback
2544 * Trigger Init SCAN callback
2545 */
2546void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2547{
2548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2549 tWDA_CbContext *pWDA;
2550 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 if(NULL == pWdaParams)
2554 {
2555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 VOS_ASSERT(0) ;
2558 return ;
2559 }
2560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2561 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2563 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 /* reset macBSSID */
2565 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 /* reset macSTASelf */
2567 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002568 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 return ;
2571}
Jeff Johnson295189b2012-06-20 16:38:30 -07002572/*
2573 * FUNCTION: WDA_ProcessJoinReq
2574 * Trigger Join REQ in WDI
2575 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002576VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2577 tSwitchChannelParams* joinReqParam)
2578{
2579 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDI_JoinReqParamsType *wdiJoinReqParam =
2581 (WDI_JoinReqParamsType *)vos_mem_malloc(
2582 sizeof(WDI_JoinReqParamsType)) ;
2583 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 if(NULL == wdiJoinReqParam)
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002591 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return VOS_STATUS_E_NOMEM;
2593 }
2594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2595 if(NULL == pWdaParams)
2596 {
2597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 VOS_ASSERT(0);
2600 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002601 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 return VOS_STATUS_E_NOMEM;
2603 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002604
2605 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2606 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2607 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2608 {
2609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2610 "%s: received join request when BSSID or self-STA is NULL "
2611 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002613 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2614 VOS_ASSERT(0);
2615 vos_mem_free(wdiJoinReqParam);
2616 vos_mem_free(pWdaParams);
2617 joinReqParam->status = eSIR_FAILURE ;
2618 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2619 return VOS_STATUS_E_INVAL;
2620 }
2621
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* copy the BSSID for pWDA */
2623 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2624 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2626 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2628 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002629#ifdef WLAN_FEATURE_VOWIFI
2630 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2631 joinReqParam->maxTxPower ;
2632#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2634 joinReqParam->localPowerConstraint ;
2635#endif
2636 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2637 joinReqParam->secondaryChannelOffset ;
2638 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2639
2640 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* Store Init Req pointer, as this will be used for response */
2642 /* store Params pass it to WDI */
2643 pWdaParams->pWdaContext = pWDA;
2644 pWdaParams->wdaMsgParam = joinReqParam;
2645 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 status = WDI_JoinReq(wdiJoinReqParam,
2647 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 if(IS_WDI_STATUS_FAILURE(status))
2649 {
2650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2651 "Failure in Join WDI API, free all the memory " );
2652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2653 vos_mem_free(pWdaParams) ;
2654 joinReqParam->status = eSIR_FAILURE ;
2655 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 return CONVERT_WDI2VOS_STATUS(status) ;
2658}
Jeff Johnson295189b2012-06-20 16:38:30 -07002659/*
2660 * FUNCTION: WDA_SwitchChannelReqCallback
2661 * send Switch channel RSP back to PE
2662 */
2663void WDA_SwitchChannelReqCallback(
2664 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2665{
2666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2667 tWDA_CbContext *pWDA;
2668 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 if(NULL == pWdaParams)
2672 {
2673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 VOS_ASSERT(0) ;
2676 return ;
2677 }
2678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2679 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2680
2681#ifdef WLAN_FEATURE_VOWIFI
2682 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2683#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2685 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002687 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 return ;
2690}
Jeff Johnson295189b2012-06-20 16:38:30 -07002691/*
2692 * FUNCTION: WDA_ProcessChannelSwitchReq
2693 * Request to WDI to switch channel REQ params.
2694 */
2695VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2696 tSwitchChannelParams *pSwitchChanParams)
2697{
2698 WDI_Status status = WDI_STATUS_SUCCESS ;
2699 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2700 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2701 sizeof(WDI_SwitchChReqParamsType)) ;
2702 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 if(NULL == wdiSwitchChanParam)
2706 {
2707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 VOS_ASSERT(0);
2710 return VOS_STATUS_E_NOMEM;
2711 }
2712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2713 if(NULL == pWdaParams)
2714 {
2715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 VOS_ASSERT(0);
2718 vos_mem_free(wdiSwitchChanParam);
2719 return VOS_STATUS_E_NOMEM;
2720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2722#ifndef WLAN_FEATURE_VOWIFI
2723 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2724 pSwitchChanParams->localPowerConstraint;
2725#endif
2726 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2727 pSwitchChanParams->secondaryChannelOffset;
2728 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 /* Store req pointer, as this will be used for response */
2730 /* store Params pass it to WDI */
2731 pWdaParams->pWdaContext = pWDA;
2732 pWdaParams->wdaMsgParam = pSwitchChanParams;
2733 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002734#ifdef WLAN_FEATURE_VOWIFI
2735 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2736 = pSwitchChanParams->maxTxPower;
2737 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2738 pSwitchChanParams ->selfStaMacAddr,
2739 sizeof(tSirMacAddr));
2740#endif
2741 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2742 pSwitchChanParams->bssId,
2743 sizeof(tSirMacAddr));
2744
2745 status = WDI_SwitchChReq(wdiSwitchChanParam,
2746 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 if(IS_WDI_STATUS_FAILURE(status))
2748 {
2749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2750 "Failure in process channel switch Req WDI API, free all the memory " );
2751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2752 vos_mem_free(pWdaParams) ;
2753 pSwitchChanParams->status = eSIR_FAILURE ;
2754 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 return CONVERT_WDI2VOS_STATUS(status) ;
2757}
Jeff Johnson295189b2012-06-20 16:38:30 -07002758/*
2759 * FUNCTION: WDA_ConfigBssReqCallback
2760 * config BSS Req Callback, called by WDI
2761 */
2762void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2763 ,void* pUserData)
2764{
2765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2766 tWDA_CbContext *pWDA;
2767 tAddBssParams *configBssReqParam;
2768 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002770 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 if(NULL == pWdaParams)
2772 {
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 VOS_ASSERT(0) ;
2776 return ;
2777 }
2778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2779 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2780 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002782 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2784 {
2785 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2786 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2788 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2789 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2790
2791 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2792 {
2793 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2794 {
2795 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2796 staConfigBssParam->staType = STA_ENTRY_BSSID;
2797 }
2798 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2799 (staConfigBssParam->staType == STA_ENTRY_SELF))
2800 {
2801 /* This is the 1st add BSS Req for the BTAMP STA */
2802 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2803 staConfigBssParam->staType = STA_ENTRY_BSSID;
2804 }
2805 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2806 (staConfigBssParam->staType == STA_ENTRY_PEER))
2807 {
2808 /* This is the 2nd ADD BSS Request that is sent
2809 * on the BTAMP STA side. The Sta type is
2810 * set to STA_ENTRY_PEER here.*/
2811 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2812 }
2813 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2814 (staConfigBssParam->staType == STA_ENTRY_SELF))
2815 {
2816 /* statype is already set by PE.
2817 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2818 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2819 staConfigBssParam->staType = STA_ENTRY_BSSID;
2820 }
2821 else
2822 {
2823 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2824 staConfigBssParam->staType = STA_ENTRY_PEER;
2825 }
2826 }
2827 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2828 {
2829 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2830 staConfigBssParam->staType = STA_ENTRY_SELF;
2831 }
2832 else
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2835 "Invalid operation mode specified");
2836 VOS_ASSERT(0);
2837 }
2838
2839 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2844 sizeof(tSirMacAddr));
2845 staConfigBssParam->txChannelWidthSet =
2846 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2848 staConfigBssParam->htCapable)
2849 {
2850 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2851 wdiConfigBssRsp->ucBSSIdx;
2852 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2853 WDA_VALID_STA_INDEX ;
2854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2856 wdiConfigBssRsp->ucBSSIdx,
2857 wdiConfigBssRsp->ucSTAIdx))
2858 {
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002860 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 VOS_ASSERT(0) ;
2862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2864 {
2865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002866 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 VOS_ASSERT(0) ;
2868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002869#ifdef WLAN_FEATURE_VOWIFI
2870 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2871#endif
2872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2874 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 return ;
2877}
Jeff Johnson295189b2012-06-20 16:38:30 -07002878/*
2879 * FUNCTION: WDA_UpdateEdcaParamsForAC
2880 * Update WDI EDCA params with PE edca params
2881 */
2882void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2883 WDI_EdcaParamRecord *wdiEdcaParam,
2884 tSirMacEdcaParamRecord *macEdcaParam)
2885{
2886 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2887 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2888 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2889 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2890 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2891 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2892}
Jeff Johnson295189b2012-06-20 16:38:30 -07002893/*
2894 * FUNCTION: WDA_ProcessConfigBssReq
2895 * Configure BSS before starting Assoc with AP
2896 */
2897VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2898 tAddBssParams* configBssReqParam)
2899{
2900 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2902 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2903 sizeof(WDI_ConfigBSSReqParamsType)) ;
2904 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if(NULL == wdiConfigBssReqParam)
2908 {
2909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 VOS_ASSERT(0);
2912 return VOS_STATUS_E_NOMEM;
2913 }
2914 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2915 if(NULL == pWdaParams)
2916 {
2917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 VOS_ASSERT(0);
2920 vos_mem_free(wdiConfigBssReqParam);
2921 return VOS_STATUS_E_NOMEM;
2922 }
Kiran4a17ebe2013-01-31 10:43:43 -08002923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2924 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2927 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 /* Store Init Req pointer, as this will be used for response */
2929 /* store Params pass it to WDI */
2930 pWdaParams->pWdaContext = pWDA;
2931 pWdaParams->wdaMsgParam = configBssReqParam;
2932 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2934 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 if(IS_WDI_STATUS_FAILURE(status))
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2938 "Failure in Config BSS WDI API, free all the memory " );
2939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2940 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 return CONVERT_WDI2VOS_STATUS(status) ;
2945}
Jeff Johnson295189b2012-06-20 16:38:30 -07002946#ifdef ENABLE_HAL_COMBINED_MESSAGES
2947/*
2948 * FUNCTION: WDA_PostAssocReqCallback
2949 * Post ASSOC req callback, send RSP back to PE
2950 */
2951void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2952 void* pUserData)
2953{
2954 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2955 tPostAssocParams *postAssocReqParam =
2956 (tPostAssocParams *)pWDA->wdaMsgParam ;
2957 /*STA context within the BSS Params*/
2958 tAddStaParams *staPostAssocParam =
2959 &postAssocReqParam->addBssParams.staContext ;
2960 /*STA Params for self STA*/
2961 tAddStaParams *selfStaPostAssocParam =
2962 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002964 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002966 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2968 {
2969 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2970 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2971 sizeof(tSirMacAddr)) ;
2972 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2973 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2974 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2976 }
2977 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2978 pWDA->wdaWdiApiMsgParam = NULL;
2979 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 return ;
2982}
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_ProcessPostAssocReq
2985 * Trigger POST ASSOC processing in WDI
2986 */
2987VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2988 tPostAssocParams *postAssocReqParam)
2989{
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 WDI_Status status = WDI_STATUS_SUCCESS ;
2991
2992 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2993 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2994 sizeof(WDI_PostAssocReqParamsType)) ;
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 if(NULL == wdiPostAssocReqParam)
2999 {
3000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 VOS_ASSERT(0);
3003 return VOS_STATUS_E_NOMEM;
3004 }
3005
3006 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3007 {
3008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_ASSERT(0);
3011 return VOS_STATUS_E_FAILURE;
3012 }
3013
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 /* update BSS params into WDI structure */
3015 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3016 &postAssocReqParam->addBssParams) ;
3017 /* update STA params into WDI structure */
3018 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3019 &postAssocReqParam->addStaParams) ;
3020
3021 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3022 postAssocReqParam->addBssParams.highPerformance;
3023 WDA_UpdateEdcaParamsForAC(pWDA,
3024 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3025 &postAssocReqParam->addBssParams.acbe);
3026 WDA_UpdateEdcaParamsForAC(pWDA,
3027 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3028 &postAssocReqParam->addBssParams.acbk);
3029 WDA_UpdateEdcaParamsForAC(pWDA,
3030 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3031 &postAssocReqParam->addBssParams.acvi);
3032 WDA_UpdateEdcaParamsForAC(pWDA,
3033 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3034 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 /* Store Init Req pointer, as this will be used for response */
3036 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 /* store Params pass it to WDI */
3038 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3040 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 if(IS_WDI_STATUS_FAILURE(status))
3042 {
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3044 "Failure in Post Assoc WDI API, free all the memory " );
3045 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3046 pWDA->wdaWdiApiMsgParam = NULL;
3047 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 return CONVERT_WDI2VOS_STATUS(status) ;
3052}
3053#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003054/*
3055 * FUNCTION: WDA_AddStaReqCallback
3056 * ADD STA req callback, send RSP back to PE
3057 */
3058void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3059 void* pUserData)
3060{
3061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3062 tWDA_CbContext *pWDA;
3063 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 if(NULL == pWdaParams)
3067 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 VOS_ASSERT(0) ;
3070 return ;
3071 }
3072 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3073 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003075 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3077 {
3078 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3079 /*TODO: UMAC structure doesn't have these fields*/
3080 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3081 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3082 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3083 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3084 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3085 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003086#ifdef FEATURE_WLAN_TDLS
3087 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3088 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3089#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003091#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 {
3093 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3094 wdiConfigStaRsp->ucBssIdx;
3095 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3096 WDA_VALID_STA_INDEX ;
3097 }
3098 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3099 {
3100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003101 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 VOS_ASSERT(0) ;
3103 return ;
3104 }
3105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 return ;
3110}
Jeff Johnson295189b2012-06-20 16:38:30 -07003111/*
3112 * FUNCTION: WDA_ConfigStaReq
3113 * Trigger Config STA processing in WDI
3114 */
3115VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3116 tAddStaParams *addStaReqParam)
3117{
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3120 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3121 sizeof(WDI_ConfigSTAReqParamsType)) ;
3122 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if(NULL == wdiConfigStaReqParam)
3126 {
3127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 VOS_ASSERT(0);
3130 return VOS_STATUS_E_NOMEM;
3131 }
3132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3133 if(NULL == pWdaParams)
3134 {
3135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 VOS_ASSERT(0);
3138 vos_mem_free(wdiConfigStaReqParam);
3139 return VOS_STATUS_E_NOMEM;
3140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 /* update STA params into WDI structure */
3143 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3144 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 /* Store Init Req pointer, as this will be used for response */
3146 /* store Params pass it to WDI */
3147 pWdaParams->pWdaContext = pWDA;
3148 pWdaParams->wdaMsgParam = addStaReqParam;
3149 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3151 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 if(IS_WDI_STATUS_FAILURE(status))
3153 {
3154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3155 "Failure in Config STA WDI API, free all the memory " );
3156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3157 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 return CONVERT_WDI2VOS_STATUS(status) ;
3162}
Jeff Johnson295189b2012-06-20 16:38:30 -07003163/*
3164 * FUNCTION: WDA_DelBSSReqCallback
3165 * Dens DEL BSS RSP back to PE
3166 */
3167void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3168 void* pUserData)
3169{
3170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3171 tWDA_CbContext *pWDA;
3172 tDeleteBssParams *delBssReqParam;
3173 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 if(NULL == pWdaParams)
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 VOS_ASSERT(0) ;
3181 return ;
3182 }
3183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3184 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003185 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3187 {
3188 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3189 sizeof(tSirMacAddr)) ;
3190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3192 {
3193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003194 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 VOS_ASSERT(0) ;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3198 {
3199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_ASSERT(0) ;
3202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0) ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3210 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 /* reset the the system role*/
3212 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3213
3214 /* Reset the BA related information */
3215 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3216 {
3217 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3218 {
3219 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3220 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3221 /* Reset framesTxed counters here */
3222 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3223 {
3224 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3225 }
3226 }
3227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 return ;
3230}
3231
Jeff Johnson295189b2012-06-20 16:38:30 -07003232/*
3233 * FUNCTION: WDA_ProcessDelBssReq
3234 * Init DEL BSS req with WDI
3235 */
3236VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3237 tDeleteBssParams *delBssParam)
3238{
3239 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3241 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3242 sizeof(WDI_DelBSSReqParamsType)) ;
3243 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 if(NULL == wdiDelBssReqParam)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 VOS_ASSERT(0);
3251 return VOS_STATUS_E_NOMEM;
3252 }
3253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3254 if(NULL == pWdaParams)
3255 {
3256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 VOS_ASSERT(0);
3259 vos_mem_free(wdiDelBssReqParam);
3260 return VOS_STATUS_E_NOMEM;
3261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3263 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3264
3265 /* Store Init Req pointer, as this will be used for response */
3266 /* store Params pass it to WDI */
3267 pWdaParams->pWdaContext = pWDA;
3268 pWdaParams->wdaMsgParam = delBssParam;
3269 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 status = WDI_DelBSSReq(wdiDelBssReqParam,
3271 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 if(IS_WDI_STATUS_FAILURE(status))
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3275 "Failure in Del BSS WDI API, free all the memory " );
3276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3277 vos_mem_free(pWdaParams) ;
3278 delBssParam->status = eSIR_FAILURE ;
3279 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 return CONVERT_WDI2VOS_STATUS(status) ;
3282}
Jeff Johnson295189b2012-06-20 16:38:30 -07003283/*
3284 * FUNCTION: WDA_DelSTAReqCallback
3285 * Dens DEL STA RSP back to PE
3286 */
3287void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3288 void* pUserData)
3289{
3290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3291 tWDA_CbContext *pWDA;
3292 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 if(NULL == pWdaParams)
3296 {
3297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 VOS_ASSERT(0) ;
3300 return ;
3301 }
3302 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3303 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003304 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3306 {
3307 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003310 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_ASSERT(0) ;
3312 }
3313 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3314 }
3315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3316 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 /*Reset the BA information corresponding to this STAIdx */
3318 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3319 WDA_INVALID_STA_INDEX;
3320 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3321
3322 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 return ;
3324}
Jeff Johnson295189b2012-06-20 16:38:30 -07003325/*
3326 * FUNCTION: WDA_ProcessDelStaReq
3327 * Init DEL STA req with WDI
3328 */
3329VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3330 tDeleteStaParams *delStaParam)
3331{
3332 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3334 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3335 sizeof(WDI_DelSTAReqParamsType)) ;
3336 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 if(NULL == wdiDelStaReqParam)
3340 {
3341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 VOS_ASSERT(0);
3344 return VOS_STATUS_E_NOMEM;
3345 }
3346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3347 if(NULL == pWdaParams)
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0);
3352 vos_mem_free(wdiDelStaReqParam);
3353 return VOS_STATUS_E_NOMEM;
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3356 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 /* Store Init Req pointer, as this will be used for response */
3358 /* store Params pass it to WDI */
3359 pWdaParams->pWdaContext = pWDA;
3360 pWdaParams->wdaMsgParam = delStaParam;
3361 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 status = WDI_DelSTAReq(wdiDelStaReqParam,
3363 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 if(IS_WDI_STATUS_FAILURE(status))
3365 {
3366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3367 "Failure in Del STA WDI API, free all the memory status = %d",
3368 status );
3369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams) ;
3371 delStaParam->status = eSIR_FAILURE ;
3372 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 return CONVERT_WDI2VOS_STATUS(status) ;
3375}
Jeff Johnson295189b2012-06-20 16:38:30 -07003376void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3377{
3378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3379 tWDA_CbContext *pWDA;
3380 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 if(NULL == pWdaParams)
3384 {
3385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 VOS_ASSERT(0) ;
3388 return ;
3389 }
3390 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3391 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3395 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3396 pwdiAddSTASelfRsp->macSelfSta,
3397 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 return ;
3400}
Jeff Johnson295189b2012-06-20 16:38:30 -07003401/*
3402 * FUNCTION: WDA_ProcessAddStaSelfReq
3403 *
3404 */
3405VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3406{
3407 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003408 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3410 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3411 sizeof(WDI_AddSTASelfReqParamsType)) ;
3412 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 if( NULL == wdiAddStaSelfReq )
3416 {
3417 VOS_ASSERT( 0 );
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003419 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 return( VOS_STATUS_E_NOMEM );
3421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 if( NULL == pWdaParams )
3424 {
3425 VOS_ASSERT( 0 );
3426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003427 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 vos_mem_free(wdiAddStaSelfReq) ;
3429 return( VOS_STATUS_E_NOMEM );
3430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3433 /* Store Init Req pointer, as this will be used for response */
3434 /* store Params pass it to WDI */
3435 pWdaParams->pWdaContext = pWDA;
3436 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3437 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003438 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 {
3442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3443 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003444 wstatus );
3445 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3447 vos_mem_free(pWdaParams) ;
3448 pAddStaSelfReq->status = eSIR_FAILURE ;
3449 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3450 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003451 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452}
Jeff Johnson295189b2012-06-20 16:38:30 -07003453/*
3454 * FUNCTION: WDA_DelSTASelfRespCallback
3455 *
3456 */
3457void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3458 wdiDelStaSelfRspParams , void* pUserData)
3459{
3460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3461 tWDA_CbContext *pWDA;
3462 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003464 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 if (NULL == pWdaParams)
3466 {
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003468 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_ASSERT(0);
3470 return;
3471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3473 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003475 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476
3477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3478 vos_mem_free(pWdaParams) ;
3479
3480 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 return ;
3482}
Jeff Johnson295189b2012-06-20 16:38:30 -07003483/*
3484 * FUNCTION: WDA_DelSTASelfReqCallback
3485 *
3486 */
3487void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3488 void* pUserData)
3489{
3490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3491 tWDA_CbContext *pWDA;
3492 tDelStaSelfParams *delStaSelfParams;
3493
3494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3495 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003496 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497
3498 if (NULL == pWdaParams)
3499 {
3500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003501 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 VOS_ASSERT(0);
3503 return;
3504 }
3505
3506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3507 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3508
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003509 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510
3511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3512 {
3513 VOS_ASSERT(0);
3514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3515 vos_mem_free(pWdaParams) ;
3516 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3517 }
3518
3519 return ;
3520}
3521
3522/*
3523 * FUNCTION: WDA_DelSTASelfReq
3524 * Trigger Config STA processing in WDI
3525 */
3526VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3527 tDelStaSelfParams* pDelStaSelfReqParam)
3528{
3529 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003530 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 tWDA_ReqParams *pWdaParams = NULL;
3532 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3533 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3534 sizeof(WDI_DelSTASelfReqParamsType)) ;
3535
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 if( NULL == wdiDelStaSelfReq )
3539 {
3540 VOS_ASSERT( 0 );
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003542 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 return( VOS_STATUS_E_NOMEM );
3544 }
3545
3546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3547 if( NULL == pWdaParams )
3548 {
3549 VOS_ASSERT( 0 );
3550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003551 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 vos_mem_free(wdiDelStaSelfReq) ;
3553 return( VOS_STATUS_E_NOMEM );
3554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 pWdaParams->pWdaContext = pWDA;
3556 /* Store param pointer as passed in by caller */
3557 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3558 /* store Params pass it to WDI */
3559 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3561 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3562
3563 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3564 wdiDelStaSelfReq->pUserData = pWdaParams;
3565
Jeff Johnson43971f52012-07-17 12:26:56 -07003566 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3568
Jeff Johnson43971f52012-07-17 12:26:56 -07003569 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 {
3571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3572 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3573 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003574 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3576 vos_mem_free(pWdaParams) ;
3577 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3578 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3579 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003580 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581}
3582
Jeff Johnson295189b2012-06-20 16:38:30 -07003583/*
3584 * FUNCTION: WDA_SendMsg
3585 * Send Message back to PE
3586 */
3587void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3588 void *pBodyptr, tANI_U32 bodyVal)
3589{
3590 tSirMsgQ msg = {0} ;
3591 tANI_U32 status = VOS_STATUS_SUCCESS ;
3592 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 msg.type = msgType;
3594 msg.bodyval = bodyVal;
3595 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 if (VOS_STATUS_SUCCESS != status)
3598 {
3599 if(NULL != pBodyptr)
3600 {
3601 vos_mem_free(pBodyptr);
3602 }
3603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003604 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 VOS_ASSERT(0) ;
3606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 return ;
3608}
Jeff Johnson295189b2012-06-20 16:38:30 -07003609/*
3610 * FUNCTION: WDA_UpdateBSSParams
3611 * Translated WDA/PE BSS info into WDI BSS info..
3612 */
3613void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3614 WDI_ConfigBSSReqInfoType *wdiBssParams,
3615 tAddBssParams *wdaBssParams)
3616{
3617 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 /* copy bssReq Params to WDI structure */
3619 vos_mem_copy(wdiBssParams->macBSSID,
3620 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3621 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3622 sizeof(tSirMacAddr)) ;
3623 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3624 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3625 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 wdiBssParams->ucShortSlotTimeSupported =
3627 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3629 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3630 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3631 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3632 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3633
3634 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3635 wdiBssParams->ucTXOPProtectionFullSupport =
3636 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3638 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3641 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3642 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3643 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3644
Chet Lanctot186b5732013-03-18 10:26:30 -07003645 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3646
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 /* copy SSID into WDI structure */
3648 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3649 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3650 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3652 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654#ifdef WLAN_FEATURE_VOWIFI
3655 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3656#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659#ifdef WLAN_FEATURE_VOWIFI_11R
3660 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 if(wdiBssParams->bExtSetStaKeyParamValid)
3662 {
3663 /* copy set STA key params to WDI structure */
3664 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3665 wdaBssParams->extSetStaKeyParam.staIdx;
3666 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3667 wdaBssParams->extSetStaKeyParam.encType;
3668 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3669 wdaBssParams->extSetStaKeyParam.wepType;
3670 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3671 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3673 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003674 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3676 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3677 {
3678 WDA_GetWepKeysFromCfg( pWDA,
3679 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3680 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3681 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3682 }
3683 else
3684 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3686 keyIndex++)
3687 {
3688 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3690 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3691 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3692 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3693 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3695 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3696 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3697 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3698 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3699 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3700 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3701 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3704 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 }
3706 }
3707 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3708 }
3709 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3710 {
3711 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3712 sizeof(wdaBssParams->extSetStaKeyParam) );
3713 }
3714#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003715#ifdef WLAN_FEATURE_11AC
3716 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3717 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3718#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003719
3720 return ;
3721}
Jeff Johnson295189b2012-06-20 16:38:30 -07003722/*
3723 * FUNCTION: WDA_UpdateSTAParams
3724 * Translated WDA/PE BSS info into WDI BSS info..
3725 */
3726void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3727 WDI_ConfigStaReqInfoType *wdiStaParams,
3728 tAddStaParams *wdaStaParams)
3729{
3730 tANI_U8 i = 0;
3731 /* Update STA params */
3732 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3733 sizeof(tSirMacAddr)) ;
3734 wdiStaParams->usAssocId = wdaStaParams->assocId;
3735 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3736
3737 wdiStaParams->ucShortPreambleSupported =
3738 wdaStaParams->shortPreambleSupported;
3739 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3740 sizeof(tSirMacAddr)) ;
3741 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3742
3743 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3744
3745 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3746 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3747 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3748 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3749 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3750 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3751 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3752
3753 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3754 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003755 wdiStaParams->wdiSupportedRates.opRateMode =
3756 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3758 {
3759 wdiStaParams->wdiSupportedRates.llbRates[i] =
3760 wdaStaParams->supportedRates.llbRates[i];
3761 }
3762 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3763 {
3764 wdiStaParams->wdiSupportedRates.llaRates[i] =
3765 wdaStaParams->supportedRates.llaRates[i];
3766 }
3767 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3768 {
3769 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3770 wdaStaParams->supportedRates.aniLegacyRates[i];
3771 }
3772 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3773 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003774#ifdef WLAN_FEATURE_11AC
3775 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3776 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3777 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3778 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3779#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3781 {
3782 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3783 wdaStaParams->supportedRates.supportedMCSSet[i];
3784 }
3785 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3786 wdaStaParams->supportedRates.rxHighestDataRate;
3787
3788 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3789
3790 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3791
3792 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3793 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3794 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3795
3796 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3797 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3798 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3799 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003801#ifdef WLAN_FEATURE_11AC
3802 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3803 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003804 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003805#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003806 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3807 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 return ;
3809}
Jeff Johnson295189b2012-06-20 16:38:30 -07003810/*
3811 * -------------------------------------------------------------------------
3812 * CFG update to WDI
3813 * -------------------------------------------------------------------------
3814 */
3815
3816 /*
3817 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3818 * Convert the WNI CFG ID to HAL CFG ID
3819 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003820static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003821{
3822 switch(wniCfgId)
3823 {
3824 case WNI_CFG_STA_ID:
3825 return QWLAN_HAL_CFG_STA_ID;
3826 case WNI_CFG_CURRENT_TX_ANTENNA:
3827 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3828 case WNI_CFG_CURRENT_RX_ANTENNA:
3829 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3830 case WNI_CFG_LOW_GAIN_OVERRIDE:
3831 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3832 case WNI_CFG_POWER_STATE_PER_CHAIN:
3833 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3834 case WNI_CFG_CAL_PERIOD:
3835 return QWLAN_HAL_CFG_CAL_PERIOD;
3836 case WNI_CFG_CAL_CONTROL:
3837 return QWLAN_HAL_CFG_CAL_CONTROL;
3838 case WNI_CFG_PROXIMITY:
3839 return QWLAN_HAL_CFG_PROXIMITY;
3840 case WNI_CFG_NETWORK_DENSITY:
3841 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3842 case WNI_CFG_MAX_MEDIUM_TIME:
3843 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3844 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3845 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3846 case WNI_CFG_RTS_THRESHOLD:
3847 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3848 case WNI_CFG_SHORT_RETRY_LIMIT:
3849 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3850 case WNI_CFG_LONG_RETRY_LIMIT:
3851 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3852 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3853 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3854 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3855 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3856 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3857 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3858 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3859 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3860 case WNI_CFG_FIXED_RATE:
3861 return QWLAN_HAL_CFG_FIXED_RATE;
3862 case WNI_CFG_RETRYRATE_POLICY:
3863 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3864 case WNI_CFG_RETRYRATE_SECONDARY:
3865 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3866 case WNI_CFG_RETRYRATE_TERTIARY:
3867 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3868 case WNI_CFG_FORCE_POLICY_PROTECTION:
3869 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3870 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3871 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3872 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3873 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3874 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3875 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3876 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3877 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3878 case WNI_CFG_MAX_BA_SESSIONS:
3879 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3880 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3881 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3882 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3883 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3884 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3885 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3886 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3887 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3888 case WNI_CFG_STATS_PERIOD:
3889 return QWLAN_HAL_CFG_STATS_PERIOD;
3890 case WNI_CFG_CFP_MAX_DURATION:
3891 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3892#if 0 /*This is not part of CFG*/
3893 case WNI_CFG_FRAME_TRANS_ENABLED:
3894 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3895#endif
3896 case WNI_CFG_DTIM_PERIOD:
3897 return QWLAN_HAL_CFG_DTIM_PERIOD;
3898 case WNI_CFG_EDCA_WME_ACBK:
3899 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3900 case WNI_CFG_EDCA_WME_ACBE:
3901 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3902 case WNI_CFG_EDCA_WME_ACVI:
3903 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3904 case WNI_CFG_EDCA_WME_ACVO:
3905 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3906#if 0
3907 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3908 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3909 case WNI_CFG_TELE_BCN_TRANS_LI:
3910 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3911 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3912 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3913 case WNI_CFG_TELE_BCN_MAX_LI:
3914 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3915 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3916 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3917#endif
3918 case WNI_CFG_ENABLE_CLOSE_LOOP:
3919 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003920 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3921 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 default:
3923 {
3924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3925 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3926 wniCfgId);
3927 return VOS_STATUS_E_INVAL;
3928 }
3929 }
3930}
Jeff Johnson295189b2012-06-20 16:38:30 -07003931/*
3932 * FUNCTION: WDA_UpdateCfgCallback
3933 *
3934 */
3935void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3936{
3937 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3938 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3939 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003941 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 /*
3943 * currently there is no response message is expected between PE and
3944 * WDA, Failure return from WDI is a ASSERT condition
3945 */
3946 if(WDI_STATUS_SUCCESS != wdiStatus)
3947 {
3948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003949 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3951 }
3952
3953 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3954 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3955 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 return ;
3957}
Jeff Johnson295189b2012-06-20 16:38:30 -07003958/*
3959 * FUNCTION: WDA_UpdateCfg
3960 *
3961 */
3962VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3963{
3964
3965 WDI_Status status = WDI_STATUS_SUCCESS ;
3966 tANI_U32 val =0;
3967 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3968 tHalCfg *configData;
3969 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3970 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 if (NULL == pMac )
3974 {
3975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003976 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 return VOS_STATUS_E_FAILURE;
3978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 if(WDA_START_STATE != pWDA->wdaState)
3980 {
3981 return VOS_STATUS_E_FAILURE;
3982 }
3983
3984 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3985 {
3986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003987 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 VOS_ASSERT(0);
3989 return VOS_STATUS_E_FAILURE;
3990 }
3991
3992 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3993 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 if(NULL == wdiCfgReqParam)
3995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 VOS_ASSERT(0);
3999 return VOS_STATUS_E_NOMEM;
4000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4002 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 if(NULL == wdiCfgReqParam->pConfigBuffer)
4004 {
4005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004006 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 vos_mem_free(wdiCfgReqParam);
4008 VOS_ASSERT(0);
4009 return VOS_STATUS_E_NOMEM;
4010 }
4011
4012 /*convert the WNI CFG Id to HAL CFG Id*/
4013 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4014 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4015
4016 /*TODO: revisit this for handling string parameters */
4017 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4018 &val) != eSIR_SUCCESS)
4019 {
4020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4021 "Failed to cfg get id %d\n", cfgParam->bodyval);
4022 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4023 vos_mem_free(wdiCfgReqParam);
4024 return eSIR_FAILURE;
4025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004026 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4027 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4028 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4029 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4030 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4031
4032 /* store Params pass it to WDI */
4033 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4035 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4036 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 if(IS_WDI_STATUS_FAILURE(status))
4038 {
4039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4040 "Failure in Update CFG WDI API, free all the memory " );
4041 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4042 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4043 pWDA->wdaWdiCfgApiMsgParam = NULL;
4044 /* Failure is not expected */
4045 VOS_ASSERT(0) ;
4046 }
4047#else
4048 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4049 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4050 pWDA->wdaWdiCfgApiMsgParam = NULL;
4051#endif
4052 return CONVERT_WDI2VOS_STATUS(status) ;
4053}
4054
Jeff Johnson295189b2012-06-20 16:38:30 -07004055VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4056 v_U8_t *pDefaultKeyId,
4057 v_U8_t *pNumKeys,
4058 WDI_KeysType *pWdiKeys )
4059{
4060 v_U32_t i, j, defKeyId = 0;
4061 v_U32_t val = SIR_MAC_KEY_LENGTH;
4062 VOS_STATUS status = WDI_STATUS_SUCCESS;
4063 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 if (NULL == pMac )
4065 {
4066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004067 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 return VOS_STATUS_E_FAILURE;
4069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4071 &defKeyId ))
4072 {
4073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4074 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4075 }
4076
4077 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 /* Need to extract ALL of the configured WEP Keys */
4079 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4080 {
4081 val = SIR_MAC_KEY_LENGTH;
4082 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4083 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4084 pWdiKeys[j].key,
4085 &val ))
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4088 "WEP Key index [%d] may not configured in CFG\n",i);
4089 }
4090 else
4091 {
4092 pWdiKeys[j].keyId = (tANI_U8) i;
4093 /*
4094 * Actually, a DC (Don't Care) because
4095 * this is determined (and set) by PE/MLME
4096 */
4097 pWdiKeys[j].unicast = 0;
4098 /*
4099 * Another DC (Don't Care)
4100 */
4101 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4102 /* Another DC (Don't Care). Unused for WEP */
4103 pWdiKeys[j].paeRole = 0;
4104 /* Determined from wlan_cfgGetStr() above.*/
4105 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 j++;
4107 *pNumKeys = (tANI_U8) j;
4108 }
4109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 return status;
4111}
Jeff Johnson295189b2012-06-20 16:38:30 -07004112/*
4113 * FUNCTION: WDA_SetBssKeyReqCallback
4114 * send SET BSS key RSP back to PE
4115 */
4116void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4117{
4118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4119 tWDA_CbContext *pWDA;
4120 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004122 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 if(NULL == pWdaParams)
4124 {
4125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004126 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 VOS_ASSERT(0) ;
4128 return ;
4129 }
4130 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4131 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4133 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004134 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 return ;
4137}
Jeff Johnson295189b2012-06-20 16:38:30 -07004138/*
4139 * FUNCTION: WDA_ProcessSetBssKeyReq
4140 * Request to WDI for programming the BSS key( key for
4141 * broadcast/multicast frames Encryption)
4142 */
4143VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4144 tSetBssKeyParams *setBssKeyParams )
4145{
4146 WDI_Status status = WDI_STATUS_SUCCESS ;
4147 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4148 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4149 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4150 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 if(NULL == wdiSetBssKeyParam)
4155 {
4156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 VOS_ASSERT(0);
4159 return VOS_STATUS_E_NOMEM;
4160 }
4161 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4162 if(NULL == pWdaParams)
4163 {
4164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 VOS_ASSERT(0);
4167 vos_mem_free(wdiSetBssKeyParam);
4168 return VOS_STATUS_E_NOMEM;
4169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 /* copy set BSS params to WDI structure */
4172 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4173 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4174 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 if(setBssKeyParams->encType != eSIR_ED_NONE)
4176 {
4177 if( setBssKeyParams->numKeys == 0 &&
4178 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4179 setBssKeyParams->encType == eSIR_ED_WEP104))
4180 {
4181 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4183 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4184 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4185 }
4186 else
4187 {
4188 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4189 {
4190 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4191 setBssKeyParams->key[keyIndex].keyId;
4192 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4193 setBssKeyParams->key[keyIndex].unicast;
4194 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4195 setBssKeyParams->key[keyIndex].keyDirection;
4196 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4197 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4198 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4199 setBssKeyParams->key[keyIndex].paeRole;
4200 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4201 setBssKeyParams->key[keyIndex].keyLength;
4202 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4203 setBssKeyParams->key[keyIndex].key,
4204 SIR_MAC_MAX_KEY_LENGTH);
4205 }
4206 }
4207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4209 setBssKeyParams->singleTidRc;
4210 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 /* Store set key pointer, as this will be used for response */
4212 /* store Params pass it to WDI */
4213 pWdaParams->pWdaContext = pWDA;
4214 pWdaParams->wdaMsgParam = setBssKeyParams;
4215 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4217 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4218
4219 if(IS_WDI_STATUS_FAILURE(status))
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4222 "Failure in Set BSS Key Req WDI API, free all the memory " );
4223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4224 vos_mem_free(pWdaParams) ;
4225 setBssKeyParams->status = eSIR_FAILURE ;
4226 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 return CONVERT_WDI2VOS_STATUS(status) ;
4229}
Jeff Johnson295189b2012-06-20 16:38:30 -07004230/*
4231 * FUNCTION: WDA_RemoveBssKeyReqCallback
4232 * send SET BSS key RSP back to PE
4233 */
4234void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4235{
4236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4237 tWDA_CbContext *pWDA;
4238 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 if(NULL == pWdaParams)
4242 {
4243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 VOS_ASSERT(0) ;
4246 return ;
4247 }
4248 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4249 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4251 vos_mem_free(pWdaParams) ;
4252
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004253 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 return ;
4256}
Jeff Johnson295189b2012-06-20 16:38:30 -07004257/*
4258 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4259 * Request to WDI to remove the BSS key( key for broadcast/multicast
4260 * frames Encryption)
4261 */
4262VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4263 tRemoveBssKeyParams *removeBssKeyParams )
4264{
4265 WDI_Status status = WDI_STATUS_SUCCESS ;
4266 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4267 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4268 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4269 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 if(NULL == wdiRemoveBssKeyParam)
4273 {
4274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 VOS_ASSERT(0);
4277 return VOS_STATUS_E_NOMEM;
4278 }
4279 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4280 if(NULL == pWdaParams)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 vos_mem_free(wdiRemoveBssKeyParam);
4286 return VOS_STATUS_E_NOMEM;
4287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 /* copy Remove BSS key params to WDI structure*/
4289 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4290 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4291 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4292 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4293 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 /* Store remove key pointer, as this will be used for response */
4295 /* store Params pass it to WDI */
4296 pWdaParams->pWdaContext = pWDA;
4297 pWdaParams->wdaMsgParam = removeBssKeyParams;
4298 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4300 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 if(IS_WDI_STATUS_FAILURE(status))
4302 {
4303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4304 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4306 vos_mem_free(pWdaParams) ;
4307 removeBssKeyParams->status = eSIR_FAILURE ;
4308 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 return CONVERT_WDI2VOS_STATUS(status) ;
4311}
Jeff Johnson295189b2012-06-20 16:38:30 -07004312/*
4313 * FUNCTION: WDA_SetBssKeyReqCallback
4314 * send SET BSS key RSP back to PE
4315 */
4316void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4317{
4318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4319 tWDA_CbContext *pWDA;
4320 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004322 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 if(NULL == pWdaParams)
4324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004326 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 VOS_ASSERT(0) ;
4328 return ;
4329 }
4330 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4331 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4333 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004334 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 return ;
4337}
Jeff Johnson295189b2012-06-20 16:38:30 -07004338/*
4339 * FUNCTION: WDA_ProcessSetStaKeyReq
4340 * Request to WDI for programming the STA key( key for Unicast frames
4341 * Encryption)
4342 */
4343VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4344 tSetStaKeyParams *setStaKeyParams )
4345{
4346 WDI_Status status = WDI_STATUS_SUCCESS ;
4347 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4348 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4349 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4350 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004353 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 if(NULL == wdiSetStaKeyParam)
4355 {
4356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 VOS_ASSERT(0);
4359 return VOS_STATUS_E_NOMEM;
4360 }
4361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4362 if(NULL == pWdaParams)
4363 {
4364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 VOS_ASSERT(0);
4367 vos_mem_free(wdiSetStaKeyParam);
4368 return VOS_STATUS_E_NOMEM;
4369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 /* copy set STA key params to WDI structure */
4373 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4374 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4375 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4376 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 if(setStaKeyParams->encType != eSIR_ED_NONE)
4378 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004379 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4381 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4382 {
4383 WDA_GetWepKeysFromCfg( pWDA,
4384 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4385 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4386 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4387 }
4388 else
4389 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4391 keyIndex++)
4392 {
4393 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4394 setStaKeyParams->key[keyIndex].keyId;
4395 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4396 setStaKeyParams->key[keyIndex].unicast;
4397 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4398 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4400 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4401 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4402 setStaKeyParams->key[keyIndex].paeRole;
4403 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4404 setStaKeyParams->key[keyIndex].keyLength;
4405 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4406 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4407 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4408 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4409 {
4410 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4411 }
4412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4414 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 }
4416 }
4417 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4418 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 /* Store set key pointer, as this will be used for response */
4420 /* store Params pass it to WDI */
4421 pWdaParams->pWdaContext = pWDA;
4422 pWdaParams->wdaMsgParam = setStaKeyParams;
4423 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4425 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 if(IS_WDI_STATUS_FAILURE(status))
4427 {
4428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4429 "Failure in set STA Key Req WDI API, free all the memory " );
4430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4431 vos_mem_free(pWdaParams) ;
4432 setStaKeyParams->status = eSIR_FAILURE ;
4433 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 return CONVERT_WDI2VOS_STATUS(status) ;
4436}
Jeff Johnson295189b2012-06-20 16:38:30 -07004437/*
4438 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4439 * send SET Bcast STA key RSP back to PE
4440 */
4441void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4442{
4443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4444 tWDA_CbContext *pWDA;
4445 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004447 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 if(NULL == pWdaParams)
4449 {
4450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004451 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_ASSERT(0) ;
4453 return ;
4454 }
4455 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4456 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4458 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004459 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 return ;
4462}
4463
Jeff Johnson295189b2012-06-20 16:38:30 -07004464/*
4465 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4466 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4467 * Encryption)
4468 */
4469VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4470 tSetStaKeyParams *setStaKeyParams )
4471{
4472 WDI_Status status = WDI_STATUS_SUCCESS ;
4473 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4474 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4475 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004479 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 if(NULL == wdiSetStaKeyParam)
4481 {
4482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004483 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 VOS_ASSERT(0);
4485 return VOS_STATUS_E_NOMEM;
4486 }
4487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4488 if(NULL == pWdaParams)
4489 {
4490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 VOS_ASSERT(0);
4493 vos_mem_free(wdiSetStaKeyParam);
4494 return VOS_STATUS_E_NOMEM;
4495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 /* copy set STA key params to WDI structure */
4499 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4500 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4501 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4502 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 if(setStaKeyParams->encType != eSIR_ED_NONE)
4504 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4506 keyIndex++)
4507 {
4508 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4509 setStaKeyParams->key[keyIndex].keyId;
4510 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4511 setStaKeyParams->key[keyIndex].unicast;
4512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4513 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4515 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4516 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4517 setStaKeyParams->key[keyIndex].paeRole;
4518 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4519 setStaKeyParams->key[keyIndex].keyLength;
4520 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4521 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4524 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 }
4526 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 /* Store set key pointer, as this will be used for response */
4528 /* store Params pass it to WDI */
4529 pWdaParams->pWdaContext = pWDA;
4530 pWdaParams->wdaMsgParam = setStaKeyParams;
4531 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4533 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 if(IS_WDI_STATUS_FAILURE(status))
4535 {
4536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4537 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4539 vos_mem_free(pWdaParams) ;
4540 setStaKeyParams->status = eSIR_FAILURE ;
4541 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 return CONVERT_WDI2VOS_STATUS(status) ;
4544}
Jeff Johnson295189b2012-06-20 16:38:30 -07004545/*
4546 * FUNCTION: WDA_RemoveStaKeyReqCallback
4547 * send SET BSS key RSP back to PE
4548 */
4549void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4550{
4551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4552 tWDA_CbContext *pWDA;
4553 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004555 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 if(NULL == pWdaParams)
4557 {
4558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004559 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 VOS_ASSERT(0) ;
4561 return ;
4562 }
4563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4564 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4566 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004567 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 return ;
4570}
4571
Jeff Johnson295189b2012-06-20 16:38:30 -07004572/*
4573 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4574 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4575 */
4576VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4577 tRemoveStaKeyParams *removeStaKeyParams )
4578{
4579 WDI_Status status = WDI_STATUS_SUCCESS ;
4580 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4581 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4582 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4583 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 if(NULL == wdiRemoveStaKeyParam)
4587 {
4588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_ASSERT(0);
4591 return VOS_STATUS_E_NOMEM;
4592 }
4593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4594 if(NULL == pWdaParams)
4595 {
4596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 VOS_ASSERT(0);
4599 vos_mem_free(wdiRemoveStaKeyParam);
4600 return VOS_STATUS_E_NOMEM;
4601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 /* copy remove STA key params to WDI structure*/
4603 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4604 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4605 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4606 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4607 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 /* Store remove key pointer, as this will be used for response */
4609 /* store Params pass it to WDI */
4610 pWdaParams->pWdaContext = pWDA;
4611 pWdaParams->wdaMsgParam = removeStaKeyParams;
4612 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4614 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 if(IS_WDI_STATUS_FAILURE(status))
4616 {
4617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4618 "Failure in remove STA Key Req WDI API, free all the memory " );
4619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4620 vos_mem_free(pWdaParams) ;
4621 removeStaKeyParams->status = eSIR_FAILURE ;
4622 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004624 return CONVERT_WDI2VOS_STATUS(status) ;
4625}
Jeff Johnson295189b2012-06-20 16:38:30 -07004626/*
4627 * FUNCTION: WDA_IsHandleSetLinkStateReq
4628 * Update the WDA state and return the status to handle this message or not
4629 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004630WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4631 tWDA_CbContext *pWDA,
4632 tLinkStateParams *linkStateParams)
4633{
4634 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 switch(linkStateParams->state)
4636 {
4637 case eSIR_LINK_PREASSOC_STATE:
4638 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4639 /*
4640 * set the WDA state to PRE ASSOC
4641 * copy the BSSID into pWDA to use it in join request and return,
4642 * No need to handle these messages.
4643 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004644 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4645 {
4646 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004648 }
4649 else
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004652 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004653 VOS_ASSERT(0);
4654 }
4655
4656 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4657 {
4658 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004660 }
4661 else
4662 {
4663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004664 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004665 VOS_ASSERT(0);
4666 }
4667
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4669 *channel and after ) so reset the WDA state to ready when the second
4670 * time UMAC issue the link state with PREASSOC
4671 */
4672 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4673 {
4674 /* RESET WDA state back to WDA_READY_STATE */
4675 pWDA->wdaState = WDA_READY_STATE;
4676 }
4677 else
4678 {
4679 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4680 }
4681 //populate linkState info in WDACbCtxt
4682 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 default:
4685 if(pWDA->wdaState != WDA_READY_STATE)
4686 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004687 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4688 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4689 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4690 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4691 *the ASSERT in WDA_Stop during module unload.*/
4692 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4693 {
4694 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004695 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004696 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004697 else
4698 {
4699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004700 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004701 status = WDA_IGNORE_SET_LINK_STATE;
4702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 }
4704 break;
4705 }
4706
4707 return status;
4708}
Jeff Johnson295189b2012-06-20 16:38:30 -07004709/*
4710 * FUNCTION: WDA_SetLinkStateCallback
4711 * call back function for set link state from WDI
4712 */
4713void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4714{
4715 tWDA_CbContext *pWDA;
4716 tLinkStateParams *linkStateParams;
4717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004719 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 if(NULL == pWdaParams)
4721 {
4722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004723 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 VOS_ASSERT(0) ;
4725 return ;
4726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 /*
4730 * In STA mode start the BA activity check timer after association
4731 * and in AP mode start BA activity check timer after BSS start */
4732 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4733 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4734 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4735 {
4736 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 /*
4740 * No respone required for WDA_SET_LINK_STATE so free the request
4741 * param here
4742 */
4743 if( pWdaParams != NULL )
4744 {
4745 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4746 {
4747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4748 }
4749 vos_mem_free(pWdaParams);
4750 }
4751 return ;
4752}
Jeff Johnson295189b2012-06-20 16:38:30 -07004753/*
4754 * FUNCTION: WDA_ProcessSetLinkState
4755 * Request to WDI to set the link status.
4756 */
4757VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4758 tLinkStateParams *linkStateParams)
4759{
4760 WDI_Status status = WDI_STATUS_SUCCESS ;
4761 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4762 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4763 sizeof(WDI_SetLinkReqParamsType)) ;
4764 tWDA_ReqParams *pWdaParams ;
4765 tpAniSirGlobal pMac;
4766 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4767
4768 if(NULL == pMac)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004771 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004773 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 return VOS_STATUS_E_FAILURE;
4775 }
4776
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004778 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 if(NULL == wdiSetLinkStateParam)
4780 {
4781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 VOS_ASSERT(0);
4784 return VOS_STATUS_E_NOMEM;
4785 }
4786 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4787 if(NULL == pWdaParams)
4788 {
4789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 VOS_ASSERT(0);
4792 vos_mem_free(wdiSetLinkStateParam);
4793 return VOS_STATUS_E_NOMEM;
4794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 if(WDA_IGNORE_SET_LINK_STATE ==
4796 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4797 {
4798 status = WDI_STATUS_E_FAILURE;
4799 }
4800 else
4801 {
4802 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4803 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4805 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4807 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 pWdaParams->pWdaContext = pWDA;
4809 /* Store remove key pointer, as this will be used for response */
4810 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 /* store Params pass it to WDI */
4812 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4813 /* Stop Timer only other than GO role and concurrent session */
4814 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4815 && !vos_concurrent_sessions_running() &&
4816 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4817 {
4818 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4821 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 if(IS_WDI_STATUS_FAILURE(status))
4823 {
4824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4825 "Failure in set link state Req WDI API, free all the memory " );
4826 }
4827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 if(IS_WDI_STATUS_FAILURE(status))
4829 {
4830 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004831 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 vos_mem_free(pWdaParams);
4833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 return CONVERT_WDI2VOS_STATUS(status) ;
4835}
Jeff Johnson295189b2012-06-20 16:38:30 -07004836/*
4837 * FUNCTION: WDA_GetStatsReqParamsCallback
4838 * send the response to PE with Stats received from WDI
4839 */
4840void WDA_GetStatsReqParamsCallback(
4841 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4842 void* pUserData)
4843{
4844 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4845 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4846
4847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004848 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 pGetPEStatsRspParams =
4850 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4851 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4852
4853 if(NULL == pGetPEStatsRspParams)
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 VOS_ASSERT(0);
4858 return;
4859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4861 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4862 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4863 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4864 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4865
4866 //Fill the Session Id Properly in PE
4867 pGetPEStatsRspParams->sessionId = 0;
4868 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004869 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4871 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 vos_mem_copy( pGetPEStatsRspParams + 1,
4873 wdiGetStatsRsp + 1,
4874 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 /* send response to UMAC*/
4876 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4877
4878 return;
4879}
4880
Jeff Johnson295189b2012-06-20 16:38:30 -07004881/*
4882 * FUNCTION: WDA_ProcessGetStatsReq
4883 * Request to WDI to get the statistics
4884 */
4885VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4886 tAniGetPEStatsReq *pGetStatsParams)
4887{
4888 WDI_Status status = WDI_STATUS_SUCCESS ;
4889 WDI_GetStatsReqParamsType wdiGetStatsParam;
4890 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4894 pGetStatsParams->staId;
4895 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4896 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 status = WDI_GetStatsReq(&wdiGetStatsParam,
4899 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 if(IS_WDI_STATUS_FAILURE(status))
4901 {
4902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4903 "Failure in Get Stats Req WDI API, free all the memory " );
4904 pGetPEStatsRspParams =
4905 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4906 if(NULL == pGetPEStatsRspParams)
4907 {
4908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004911 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 return VOS_STATUS_E_NOMEM;
4913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4915 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4916 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4917 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4918 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4919 (void *)pGetPEStatsRspParams, 0) ;
4920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 /* Free the request message */
4922 vos_mem_free(pGetStatsParams);
4923 return CONVERT_WDI2VOS_STATUS(status);
4924}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004925
4926#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4927/*
4928 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4929 * send the response to PE with roam Rssi received from WDI
4930 */
4931void WDA_GetRoamRssiReqParamsCallback(
4932 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4933 void* pUserData)
4934{
4935 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4936 tWDA_CbContext *pWDA = NULL;
4937 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4938 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4940 "<------ %s " ,__func__);
4941 if(NULL == pWdaParams)
4942 {
4943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4944 "%s: pWdaParams received NULL", __func__);
4945 VOS_ASSERT(0) ;
4946 return ;
4947 }
4948 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4949 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
4950
4951 if(NULL == pGetRoamRssiReqParams)
4952 {
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4954 "%s: pGetRoamRssiReqParams received NULL", __func__);
4955 VOS_ASSERT(0);
4956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4957 vos_mem_free(pWdaParams);
4958 return ;
4959 }
4960 pGetRoamRssiRspParams =
4961 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
4962
4963 if(NULL == pGetRoamRssiRspParams)
4964 {
4965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4966 "%s: VOS MEM Alloc Failure", __func__);
4967 VOS_ASSERT(0);
4968 return;
4969 }
4970 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
4971 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004972 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004973 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
4974 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
4975
4976 /* Assign get roam rssi req (backup) in to the response */
4977 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
4978
4979 /* free WDI command buffer */
4980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4981 vos_mem_free(pWdaParams) ;
4982
4983 /* send response to UMAC*/
4984 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
4985
4986 return;
4987}
4988
4989
4990
4991/*
4992 * FUNCTION: WDA_ProcessGetRoamRssiReq
4993 * Request to WDI to get the statistics
4994 */
4995VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
4996 tAniGetRssiReq *pGetRoamRssiParams)
4997{
4998 WDI_Status status = WDI_STATUS_SUCCESS ;
4999 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5000 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5001 tWDA_ReqParams *pWdaParams = NULL;
5002
5003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5004 "------> %s " ,__func__);
5005 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5006 pGetRoamRssiParams->staId;
5007 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5008
5009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5010 if(NULL == pWdaParams)
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "%s: VOS MEM Alloc Failure", __func__);
5014 VOS_ASSERT(0);
5015 return VOS_STATUS_E_NOMEM;
5016 }
5017
5018 /* Store Init Req pointer, as this will be used for response */
5019 pWdaParams->pWdaContext = pWDA;
5020
5021 /* Take Get roam Rssi req backup as it stores the callback to be called after
5022 receiving the response */
5023 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5024 pWdaParams->wdaWdiApiMsgParam = NULL;
5025
5026 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5027 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5028 if(IS_WDI_STATUS_FAILURE(status))
5029 {
5030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5031 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5032 pGetRoamRssiRspParams =
5033 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5034 if(NULL == pGetRoamRssiRspParams)
5035 {
5036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5037 "%s: VOS MEM Alloc Failure", __func__);
5038 VOS_ASSERT(0);
5039 vos_mem_free(pGetRoamRssiParams);
5040 vos_mem_free(pWdaParams);
5041 return VOS_STATUS_E_NOMEM;
5042 }
5043 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5044 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5045 pGetRoamRssiRspParams->rssi = 0;
5046 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5047 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5048 (void *)pGetRoamRssiRspParams, 0) ;
5049 }
5050 return CONVERT_WDI2VOS_STATUS(status);
5051}
5052#endif
5053
5054
Jeff Johnson295189b2012-06-20 16:38:30 -07005055/*
5056 * FUNCTION: WDA_UpdateEDCAParamCallback
5057 * call back function for Update EDCA params from WDI
5058 */
5059void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5060{
5061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5062 tEdcaParams *pEdcaParams;
5063
5064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 if(NULL == pWdaParams)
5067 {
5068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 VOS_ASSERT(0) ;
5071 return ;
5072 }
5073 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5075 vos_mem_free(pWdaParams);
5076 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 return ;
5078}
Jeff Johnson295189b2012-06-20 16:38:30 -07005079/*
5080 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5081 * Request to WDI to Update the EDCA params.
5082 */
5083VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5084 tEdcaParams *pEdcaParams)
5085{
5086 WDI_Status status = WDI_STATUS_SUCCESS ;
5087 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5088 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5089 sizeof(WDI_UpdateEDCAParamsType)) ;
5090 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 if(NULL == wdiEdcaParam)
5094 {
5095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005098 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 return VOS_STATUS_E_NOMEM;
5100 }
5101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5102 if(NULL == pWdaParams)
5103 {
5104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 VOS_ASSERT(0);
5107 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005108 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 return VOS_STATUS_E_NOMEM;
5110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5112 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5113 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5114 &pEdcaParams->acbe);
5115 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5116 &pEdcaParams->acbk);
5117 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5118 &pEdcaParams->acvi);
5119 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5120 &pEdcaParams->acvo);
5121 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 pWdaParams->pWdaContext = pWDA;
5123 /* Store remove key pointer, as this will be used for response */
5124 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 /* store Params pass it to WDI */
5126 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5128 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 if(IS_WDI_STATUS_FAILURE(status))
5130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5132 "Failure in Update EDCA Params WDI API, free all the memory " );
5133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5134 vos_mem_free(pWdaParams);
5135 vos_mem_free(pEdcaParams);
5136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 return CONVERT_WDI2VOS_STATUS(status) ;
5138}
Jeff Johnson295189b2012-06-20 16:38:30 -07005139/*
5140 * FUNCTION: WDA_AddBAReqCallback
5141 * send ADD BA RSP back to PE
5142 */
5143void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5144 void* pUserData)
5145{
5146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5147 tWDA_CbContext *pWDA;
5148 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 if(NULL == pWdaParams)
5152 {
5153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 VOS_ASSERT(0) ;
5156 return ;
5157 }
5158 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5159 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5161 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005162 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 return ;
5165}
5166
Jeff Johnson295189b2012-06-20 16:38:30 -07005167/*
5168 * FUNCTION: WDA_ProcessAddBAReq
5169 * Request to WDI to Update the ADDBA REQ params.
5170 */
5171VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5172 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5173{
Jeff Johnson43971f52012-07-17 12:26:56 -07005174 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5176 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5177 sizeof(WDI_AddBAReqParamsType)) ;
5178 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005180 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 if(NULL == wdiAddBAReqParam)
5182 {
5183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 VOS_ASSERT(0);
5186 return VOS_STATUS_E_NOMEM;
5187 }
5188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5189 if(NULL == pWdaParams)
5190 {
5191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 VOS_ASSERT(0);
5194 vos_mem_free(wdiAddBAReqParam);
5195 return VOS_STATUS_E_NOMEM;
5196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 do
5198 {
5199 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 wdiAddBaInfo->ucSTAIdx = staIdx ;
5201 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5202 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 } while(0) ;
5204 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 pWdaParams->pWdaContext = pWDA;
5206 /* store Params pass it to WDI */
5207 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5208 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005209 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5210 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005211
Jeff Johnson43971f52012-07-17 12:26:56 -07005212 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 {
5214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005215 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5216 status = CONVERT_WDI2VOS_STATUS(wstatus);
5217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 vos_mem_free(pWdaParams);
5219 pAddBAReqParams->status = eSIR_FAILURE;
5220 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5221 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005222 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005223}
Jeff Johnson295189b2012-06-20 16:38:30 -07005224/*
5225 * FUNCTION: WDA_AddBASessionReqCallback
5226 * send ADD BA SESSION RSP back to PE/(or TL)
5227 */
5228void WDA_AddBASessionReqCallback(
5229 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5230{
5231 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5233 tWDA_CbContext *pWDA;
5234 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 if(NULL == pWdaParams)
5238 {
5239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 VOS_ASSERT(0) ;
5242 return ;
5243 }
5244 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5245 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 if( NULL == pAddBAReqParams )
5247 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005249 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5252 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 return ;
5254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5256 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 /*
5258 * if WDA in update TL state, update TL with BA session parama and send
5259 * another request to HAL(/WDI) (ADD_BA_REQ)
5260 */
5261
5262 if((VOS_STATUS_SUCCESS ==
5263 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5264 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5265 {
5266 /* Update TL with BA info received from HAL/WDI */
5267 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5268 wdiAddBaSession->usBaSessionID,
5269 wdiAddBaSession->ucSTAIdx,
5270 wdiAddBaSession->ucBaTID,
5271 wdiAddBaSession->ucBaBufferSize,
5272 wdiAddBaSession->ucWinSize,
5273 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5275 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5276 }
5277 else
5278 {
5279 pAddBAReqParams->status =
5280 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5281
5282 /* Setting Flag to indicate that Set BA is success */
5283 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5284 {
5285 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5286 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5287 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 /*Reset the WDA state to READY */
5292 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 return ;
5294}
5295
Jeff Johnson295189b2012-06-20 16:38:30 -07005296/*
5297 * FUNCTION: WDA_ProcessAddBASessionReq
5298 * Request to WDI to Update the ADDBA REQ params.
5299 */
5300VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5301 tAddBAParams *pAddBAReqParams)
5302{
5303 WDI_Status status = WDI_STATUS_SUCCESS ;
5304 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5305 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5306 sizeof(WDI_AddBASessionReqParamsType)) ;
5307 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005309 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 if(NULL == wdiAddBASessionReqParam)
5311 {
5312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 VOS_ASSERT(0);
5315 return VOS_STATUS_E_NOMEM;
5316 }
5317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5318 if(NULL == pWdaParams)
5319 {
5320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 VOS_ASSERT(0);
5323 vos_mem_free(wdiAddBASessionReqParam);
5324 return VOS_STATUS_E_NOMEM;
5325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 /*
5327 * Populate ADD BA parameters and pass these paarmeters to WDI.
5328 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5329 * the state to track if these is BA recipient case or BA initiator
5330 * case.
5331 */
5332 do
5333 {
5334 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5335 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5336 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5337 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5338 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5339 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5340 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5343 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5344 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5345 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5346 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 /* check the BA direction and update state accordingly */
5348 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5349 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5350 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5351
5352 }while(0) ;
5353 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 pWdaParams->pWdaContext = pWDA;
5355 /* Store ADD BA pointer, as this will be used for response */
5356 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5357 /* store Params pass it to WDI */
5358 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5360 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 if(IS_WDI_STATUS_FAILURE(status))
5362 {
5363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005364 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Send ADD BA failure response to PE\n");
5367 pAddBAReqParams->status =
5368 CONVERT_WDI2SIR_STATUS(status) ;
5369 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 vos_mem_free(pWdaParams);
5372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005374}
Jeff Johnson295189b2012-06-20 16:38:30 -07005375/*
5376 * FUNCTION: WDA_DelBANotifyTL
5377 * send DEL BA IND to TL
5378 */
5379void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5380 tDelBAParams *pDelBAReqParams)
5381{
5382 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5383 //tSirMsgQ msg;
5384 vos_msg_t vosMsg;
5385 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 if(NULL == pDelBAInd)
5387 {
5388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 VOS_ASSERT(0) ;
5391 return;
5392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5394 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5395 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5396 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005397
Jeff Johnson295189b2012-06-20 16:38:30 -07005398
5399 vosMsg.type = WDA_DELETEBA_IND;
5400 vosMsg.bodyptr = pDelBAInd;
5401 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5402 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5403 {
5404 vosStatus = VOS_STATUS_E_BADMSG;
5405 }
5406}
Jeff Johnson295189b2012-06-20 16:38:30 -07005407/*
5408 * FUNCTION: WDA_DelBAReqCallback
5409 * send DEL BA RSP back to PE
5410 */
5411void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5412{
5413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5414 tWDA_CbContext *pWDA;
5415 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 if(NULL == pWdaParams)
5419 {
5420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005421 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 VOS_ASSERT(0) ;
5423 return ;
5424 }
5425 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5426 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 /* Notify TL about DEL BA in case of recipinet */
5428 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5429 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5430 {
5431 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 /*
5434 * No respone required for WDA_DELBA_IND so just free the request
5435 * param here
5436 */
5437 vos_mem_free(pDelBAReqParams);
5438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5439 vos_mem_free(pWdaParams);
5440 return ;
5441}
5442
Jeff Johnson295189b2012-06-20 16:38:30 -07005443/*
5444 * FUNCTION: WDA_ProcessDelBAReq
5445 * Request to WDI to Update the DELBA REQ params.
5446 */
5447VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5448 tDelBAParams *pDelBAReqParams)
5449{
5450 WDI_Status status = WDI_STATUS_SUCCESS ;
5451 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5452 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5453 sizeof(WDI_DelBAReqParamsType)) ;
5454 tWDA_ReqParams *pWdaParams ;
5455 tANI_U16 staIdx = 0;
5456 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 if(NULL == wdiDelBAReqParam)
5460 {
5461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 VOS_ASSERT(0);
5464 return VOS_STATUS_E_NOMEM;
5465 }
5466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5467 if(NULL == pWdaParams)
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 VOS_ASSERT(0);
5472 vos_mem_free(wdiDelBAReqParam);
5473 return VOS_STATUS_E_NOMEM;
5474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5476 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5477 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5478 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 pWdaParams->pWdaContext = pWDA;
5480 /* Store DEL BA pointer, as this will be used for response */
5481 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 /* store Params pass it to WDI */
5483 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5485 * maintained in WDA, so that WDA can retry for another BA session
5486 */
5487 staIdx = pDelBAReqParams->staIdx;
5488 tid = pDelBAReqParams->baTID;
5489 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = WDI_DelBAReq(wdiDelBAReqParam,
5491 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 if(IS_WDI_STATUS_FAILURE(status))
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5495 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5497 vos_mem_free(pWdaParams->wdaMsgParam);
5498 vos_mem_free(pWdaParams);
5499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005501}
Jeff Johnson295189b2012-06-20 16:38:30 -07005502/*
5503 * FUNCTION: WDA_AddTSReqCallback
5504 * send ADD TS RSP back to PE
5505 */
5506void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5507{
5508 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5509 tWDA_CbContext *pWDA;
5510 tAddTsParams *pAddTsReqParams;
5511
5512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 if(NULL == pWdaParams)
5515 {
5516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 VOS_ASSERT(0) ;
5519 return ;
5520 }
5521 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5522 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5524 vos_mem_free(pWdaParams);
5525
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005526 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 return ;
5529}
5530
Jeff Johnson295189b2012-06-20 16:38:30 -07005531/*
5532 * FUNCTION: WDA_ProcessAddTSReq
5533 * Request to WDI to Update the ADD TS REQ params.
5534 */
5535VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5536 tAddTsParams *pAddTsReqParams)
5537{
5538 WDI_Status status = WDI_STATUS_SUCCESS ;
5539 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5540 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5541 sizeof(WDI_AddTSReqParamsType)) ;
5542 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 if(NULL == wdiAddTSReqParam)
5546 {
5547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 VOS_ASSERT(0);
5550 return VOS_STATUS_E_NOMEM;
5551 }
5552 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5553 if(NULL == pWdaParams)
5554 {
5555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 VOS_ASSERT(0);
5558 vos_mem_free(wdiAddTSReqParam);
5559 return VOS_STATUS_E_NOMEM;
5560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5562 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 //TS IE
5564 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5566 pAddTsReqParams->tspec.length;
5567
5568 //TS IE : TS INFO : TRAFFIC
5569 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5570 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5571 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5572 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5573 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5574 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5575 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5576 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5577 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5578 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5579 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5580 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5581 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5582 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5583 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5584 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5585
5586 //TS IE : TS INFO : SCHEDULE
5587 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5588 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5589 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5590 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 //TS IE
5592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5593 pAddTsReqParams->tspec.nomMsduSz;
5594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5595 pAddTsReqParams->tspec.maxMsduSz;
5596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5597 pAddTsReqParams->tspec.minSvcInterval;
5598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5599 pAddTsReqParams->tspec.maxSvcInterval;
5600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5601 pAddTsReqParams->tspec.inactInterval;
5602 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5603 pAddTsReqParams->tspec.suspendInterval;
5604 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5605 pAddTsReqParams->tspec.svcStartTime;
5606 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5607 pAddTsReqParams->tspec.minDataRate;
5608 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5609 pAddTsReqParams->tspec.meanDataRate;
5610 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5611 pAddTsReqParams->tspec.peakDataRate;
5612 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5613 pAddTsReqParams->tspec.maxBurstSz;
5614 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5615 pAddTsReqParams->tspec.delayBound;
5616 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5617 pAddTsReqParams->tspec.minPhyRate;
5618 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5619 pAddTsReqParams->tspec.surplusBw;
5620 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5621 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 /* TODO: tAddTsParams doesn't have the following fields */
5623#if 0
5624 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5625 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5626 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5627 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5628#endif
5629 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5630
5631 pWdaParams->pWdaContext = pWDA;
5632 /* Store ADD TS pointer, as this will be used for response */
5633 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 /* store Params pass it to WDI */
5635 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 status = WDI_AddTSReq(wdiAddTSReqParam,
5637 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 if(IS_WDI_STATUS_FAILURE(status))
5639 {
5640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5641 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5643 vos_mem_free(pWdaParams);
5644 pAddTsReqParams->status = eSIR_FAILURE ;
5645 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005648}
5649
Jeff Johnson295189b2012-06-20 16:38:30 -07005650/*
5651 * FUNCTION: WDA_DelTSReqCallback
5652 * send DEL TS RSP back to PE
5653 */
5654void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5655{
5656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5660 vos_mem_free(pWdaParams->wdaMsgParam) ;
5661 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 /*
5663 * No respone required for WDA_DEL_TS_REQ so just free the request
5664 * param here
5665 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 return ;
5667}
5668
Jeff Johnson295189b2012-06-20 16:38:30 -07005669/*
5670 * FUNCTION: WDA_ProcessDelTSReq
5671 * Request to WDI to Update the DELTS REQ params.
5672 */
5673VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5674 tDelTsParams *pDelTSReqParams)
5675{
5676 WDI_Status status = WDI_STATUS_SUCCESS ;
5677 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5678 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5679 sizeof(WDI_DelTSReqParamsType)) ;
5680 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005682 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 if(NULL == wdiDelTSReqParam)
5684 {
5685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 VOS_ASSERT(0);
5688 return VOS_STATUS_E_NOMEM;
5689 }
5690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5691 if(NULL == pWdaParams)
5692 {
5693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 VOS_ASSERT(0);
5696 vos_mem_free(wdiDelTSReqParam);
5697 return VOS_STATUS_E_NOMEM;
5698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5700 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5701 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5702 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5703 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 pWdaParams->pWdaContext = pWDA;
5705 /* Store DEL TS pointer, as this will be used for response */
5706 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 /* store Params pass it to WDI */
5708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 status = WDI_DelTSReq(wdiDelTSReqParam,
5710 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 if(IS_WDI_STATUS_FAILURE(status))
5712 {
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5714 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5716 vos_mem_free(pWdaParams->wdaMsgParam);
5717 vos_mem_free(pWdaParams);
5718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005720}
Jeff Johnson295189b2012-06-20 16:38:30 -07005721/*
5722 * FUNCTION: WDA_UpdateBeaconParamsCallback
5723 * Free the memory. No need to send any response to PE in this case
5724 */
5725void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5726{
5727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(NULL == pWdaParams)
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005733 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005734 VOS_ASSERT(0) ;
5735 return ;
5736 }
5737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5738 vos_mem_free(pWdaParams->wdaMsgParam) ;
5739 vos_mem_free(pWdaParams);
5740 /*
5741 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5742 * param here
5743 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 return ;
5745}
Jeff Johnson295189b2012-06-20 16:38:30 -07005746/*
5747 * FUNCTION: WDA_ProcessUpdateBeaconParams
5748 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5749 */
5750VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5751 tUpdateBeaconParams *pUpdateBeaconParams)
5752{
5753 WDI_Status status = WDI_STATUS_SUCCESS ;
5754 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5755 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5756 sizeof(WDI_UpdateBeaconParamsType)) ;
5757 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005760 if(NULL == wdiUpdateBeaconParams)
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 VOS_ASSERT(0);
5765 return VOS_STATUS_E_NOMEM;
5766 }
5767 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5768 if(NULL == pWdaParams)
5769 {
5770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 VOS_ASSERT(0);
5773 vos_mem_free(wdiUpdateBeaconParams);
5774 return VOS_STATUS_E_NOMEM;
5775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5777 pUpdateBeaconParams->bssIdx;
5778 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5779 pUpdateBeaconParams->fShortPreamble;
5780 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5781 pUpdateBeaconParams->fShortSlotTime;
5782 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5783 pUpdateBeaconParams->beaconInterval;
5784 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5785 pUpdateBeaconParams->llaCoexist;
5786 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5787 pUpdateBeaconParams->llbCoexist;
5788 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5789 pUpdateBeaconParams->llgCoexist;
5790 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5791 pUpdateBeaconParams->ht20MhzCoexist;
5792 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5793 pUpdateBeaconParams->llnNonGFCoexist;
5794 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5795 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5796 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5797 pUpdateBeaconParams->fRIFSMode;
5798 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5799 pUpdateBeaconParams->paramChangeBitmap;
5800 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5801
5802 pWdaParams->pWdaContext = pWDA;
5803 /* Store UpdateBeacon Req pointer, as this will be used for response */
5804 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005805 /* store Params pass it to WDI */
5806 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5808 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5809 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 if(IS_WDI_STATUS_FAILURE(status))
5811 {
5812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5813 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5815 vos_mem_free(pWdaParams->wdaMsgParam);
5816 vos_mem_free(pWdaParams);
5817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005819}
Jeff Johnson295189b2012-06-20 16:38:30 -07005820#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005821/*
5822 * FUNCTION: WDA_TSMStatsReqCallback
5823 * send TSM Stats RSP back to PE
5824 */
5825void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5826{
5827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5828 tWDA_CbContext *pWDA = NULL;
5829 tTSMStats *pTsmRspParams = NULL;
5830
5831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 if(NULL == pWdaParams)
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005836 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 VOS_ASSERT(0) ;
5838 return ;
5839 }
5840 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5841 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 if( NULL == pTsmRspParams )
5843 {
5844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005845 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 VOS_ASSERT( 0 );
5847 return ;
5848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5850 vos_mem_free(pWdaParams);
5851
5852 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5853 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5854 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5855 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5856 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5857 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5858 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5859 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5860 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5861 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 return ;
5864}
5865
5866
Jeff Johnson295189b2012-06-20 16:38:30 -07005867/*
5868 * FUNCTION: WDA_ProcessTsmStatsReq
5869 * Request to WDI to get the TSM Stats params.
5870 */
5871VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5872 tTSMStats *pTsmStats)
5873{
5874 WDI_Status status = WDI_STATUS_SUCCESS ;
5875 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5876 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005878 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5880 sizeof(WDI_TSMStatsReqParamsType));
5881 if(NULL == wdiTSMReqParam)
5882 {
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 VOS_ASSERT(0);
5886 return VOS_STATUS_E_NOMEM;
5887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5889 if(NULL == pWdaParams)
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 VOS_ASSERT(0);
5894 vos_mem_free(wdiTSMReqParam);
5895 return VOS_STATUS_E_NOMEM;
5896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5898 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5899 pTsmStats->bssId,
5900 sizeof(wpt_macAddr));
5901 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5902
5903 pWdaParams->pWdaContext = pWDA;
5904 /* Store TSM Stats pointer, as this will be used for response */
5905 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 /* store Params pass it to WDI */
5907 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 status = WDI_TSMStatsReq(wdiTSMReqParam,
5909 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 if(IS_WDI_STATUS_FAILURE(status))
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5913 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5915 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005916 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 return CONVERT_WDI2VOS_STATUS(status) ;
5919}
5920#endif
5921/*
5922 * FUNCTION: WDA_SendBeaconParamsCallback
5923 * No need to send any response to PE in this case
5924 */
5925void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5926{
5927
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005929 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 return ;
5931}
Jeff Johnson295189b2012-06-20 16:38:30 -07005932/*
5933 * FUNCTION: WDA_ProcessSendBeacon
5934 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5935 * start beacon trasmission
5936 */
5937VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5938 tSendbeaconParams *pSendbeaconParams)
5939{
5940 WDI_Status status = WDI_STATUS_SUCCESS ;
5941 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5945 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5946 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5947 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5949 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05305950 /* p2pIeOffset should be atleast greater than timIeOffset */
5951 if ((pSendbeaconParams->p2pIeOffset != 0) &&
5952 (pSendbeaconParams->p2pIeOffset <
5953 pSendbeaconParams->timIeOffset))
5954 {
5955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5956 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
5957 VOS_ASSERT( 0 );
5958 return WDI_STATUS_E_FAILURE;
5959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5961 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 /* Copy the beacon template to local buffer */
5963 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5964 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5965 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5966
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5968 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 if(IS_WDI_STATUS_FAILURE(status))
5970 {
5971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5972 "Failure in SEND BEACON REQ Params WDI API" );
5973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 vos_mem_free(pSendbeaconParams);
5975 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005976}
Jeff Johnson295189b2012-06-20 16:38:30 -07005977/*
5978 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5979 * No need to send any response to PE in this case
5980 */
5981void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5982{
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 return ;
5986}
5987
Jeff Johnson295189b2012-06-20 16:38:30 -07005988/*
5989 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5990 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5991 * send probe response
5992 */
5993VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5994 tSendProbeRespParams *pSendProbeRspParams)
5995{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005996 WDI_Status status = WDI_STATUS_SUCCESS;
5997 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5998 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006000 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006001
6002 if (!wdiSendProbeRspParam)
6003 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6004
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006006 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006008 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 /* Copy the Probe Response template to local buffer */
6011 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006012 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 pSendProbeRspParams->pProbeRespTemplate,
6014 pSendProbeRspParams->probeRespTemplateLen);
6015 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006016 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6018 WDI_PROBE_REQ_BITMAP_IE_LEN);
6019
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006020 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006021
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006022 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 if(IS_WDI_STATUS_FAILURE(status))
6025 {
6026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6027 "Failure in SEND Probe RSP Params WDI API" );
6028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006030 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032}
Jeff Johnson295189b2012-06-20 16:38:30 -07006033#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6034/*
6035 * FUNCTION: WDA_SetMaxTxPowerCallBack
6036 * send the response to PE with power value received from WDI
6037 */
6038void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6039 void* pUserData)
6040{
6041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6042 tWDA_CbContext *pWDA = NULL;
6043 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6044
6045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006046 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 if(NULL == pWdaParams)
6048 {
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 VOS_ASSERT(0) ;
6052 return ;
6053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6055 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 if( NULL == pMaxTxPowerParams )
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006059 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006060 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6062 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 return ;
6064 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006065
Jeff Johnson295189b2012-06-20 16:38:30 -07006066
6067 /*need to free memory for the pointers used in the
6068 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6070 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006072
Jeff Johnson295189b2012-06-20 16:38:30 -07006073
6074 /* send response to UMAC*/
6075 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6076
6077 return;
6078}
Jeff Johnson295189b2012-06-20 16:38:30 -07006079/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006080 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 * Request to WDI to send set Max Tx Power Request
6082 */
6083 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6084 tMaxTxPowerParams *MaxTxPowerParams)
6085{
6086 WDI_Status status = WDI_STATUS_SUCCESS;
6087 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6088 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006089
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006091 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006092
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6094 sizeof(WDI_SetMaxTxPowerParamsType));
6095 if(NULL == wdiSetMaxTxPowerParams)
6096 {
6097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 VOS_ASSERT(0);
6100 return VOS_STATUS_E_NOMEM;
6101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6103 if(NULL == pWdaParams)
6104 {
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 vos_mem_free(wdiSetMaxTxPowerParams);
6108 VOS_ASSERT(0);
6109 return VOS_STATUS_E_NOMEM;
6110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 /* Copy.Max.Tx.Power Params to WDI structure */
6112 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6113 MaxTxPowerParams->bssId,
6114 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6116 MaxTxPowerParams->selfStaMacAddr,
6117 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6119 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 pWdaParams->pWdaContext = pWDA;
6122 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 /* store Params pass it to WDI */
6124 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6126 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 if(IS_WDI_STATUS_FAILURE(status))
6128 {
6129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6130 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6132 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133 /* send response to UMAC*/
6134 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 }
6136 return CONVERT_WDI2VOS_STATUS(status);
6137
6138}
Jeff Johnson295189b2012-06-20 16:38:30 -07006139#endif
schang86c22c42013-03-13 18:41:24 -07006140
6141/*
6142 * FUNCTION: WDA_SetTxPowerCallBack
6143 * send the response to PE with power value received from WDI
6144 */
6145void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6146 void* pUserData)
6147{
6148 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6149 tWDA_CbContext *pWDA = NULL;
6150 tSirSetTxPowerReq *pTxPowerParams = NULL;
6151
6152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6153 "<------ %s ", __func__);
6154 if(NULL == pWdaParams)
6155 {
6156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6157 "%s: pWdaParams received NULL", __func__);
6158 VOS_ASSERT(0) ;
6159 return ;
6160 }
6161 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6162 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6163 if(NULL == pTxPowerParams)
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6166 "%s: pTxPowerParams received NULL " ,__func__);
6167 VOS_ASSERT(0);
6168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6169 vos_mem_free(pWdaParams);
6170 return ;
6171 }
6172
6173 /*need to free memory for the pointers used in the
6174 WDA Process.Set Max Tx Power Req function*/
6175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6176 vos_mem_free(pWdaParams);
6177
6178 /* send response to UMAC*/
6179 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6180 return;
6181}
6182
6183/*
6184 * FUNCTION: WDA_ProcessSetTxPowerReq
6185 * Request to WDI to send set Tx Power Request
6186 */
6187 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6188 tSirSetTxPowerReq *txPowerParams)
6189{
6190 WDI_Status status = WDI_STATUS_SUCCESS;
6191 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6192 tWDA_ReqParams *pWdaParams = NULL;
6193
6194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6195 "------> %s ", __func__);
6196
6197 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6198 sizeof(WDI_SetTxPowerParamsType));
6199 if(NULL == wdiSetTxPowerParams)
6200 {
6201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6202 "%s: VOS MEM Alloc Failure", __func__);
6203 VOS_ASSERT(0);
6204 return VOS_STATUS_E_NOMEM;
6205 }
6206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6207 if(NULL == pWdaParams)
6208 {
6209 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6210 "%s: VOS MEM Alloc Failure", __func__);
6211 vos_mem_free(wdiSetTxPowerParams);
6212 VOS_ASSERT(0);
6213 return VOS_STATUS_E_NOMEM;
6214 }
6215 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6216 txPowerParams->bssIdx;
6217 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6218 txPowerParams->mwPower;
6219 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6220 pWdaParams->pWdaContext = pWDA;
6221 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6222 /* store Params pass it to WDI */
6223 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6224 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6225 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6226 if(IS_WDI_STATUS_FAILURE(status))
6227 {
6228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6229 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6231 vos_mem_free(pWdaParams);
6232 /* send response to UMAC*/
6233 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6234 }
6235 return CONVERT_WDI2VOS_STATUS(status);
6236}
6237
Jeff Johnson295189b2012-06-20 16:38:30 -07006238/*
6239 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6240 * Free the memory. No need to send any response to PE in this case
6241 */
6242void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6243{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6245
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006247 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006248
6249 if(NULL == pWdaParams)
6250 {
6251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006252 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006253 VOS_ASSERT(0) ;
6254 return ;
6255 }
6256
6257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6258 vos_mem_free(pWdaParams->wdaMsgParam) ;
6259 vos_mem_free(pWdaParams);
6260
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 /*
6262 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6263 * so just free the request param here
6264 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 return ;
6266}
6267
Jeff Johnson295189b2012-06-20 16:38:30 -07006268/*
6269 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6270 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6271 */
6272VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6273 tP2pPsParams *pP2pPsConfigParams)
6274{
6275 WDI_Status status = WDI_STATUS_SUCCESS ;
6276 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6277 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6278 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006279 tWDA_ReqParams *pWdaParams = NULL;
6280
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 if(NULL == wdiSetP2PGONOAReqParam)
6284 {
6285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 VOS_ASSERT(0);
6288 return VOS_STATUS_E_NOMEM;
6289 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006290
6291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6292 if(NULL == pWdaParams)
6293 {
6294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006295 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006296 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006297 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006298 VOS_ASSERT(0);
6299 return VOS_STATUS_E_NOMEM;
6300 }
6301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6303 pP2pPsConfigParams->opp_ps;
6304 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6305 pP2pPsConfigParams->ctWindow;
6306 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6307 pP2pPsConfigParams->count;
6308 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6309 pP2pPsConfigParams->duration;
6310 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6311 pP2pPsConfigParams->interval;
6312 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6313 pP2pPsConfigParams->single_noa_duration;
6314 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6315 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006316
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6318 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006319 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6320
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006322 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6323 pWdaParams->pWdaContext = pWDA;
6324
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006326 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6327
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 if(IS_WDI_STATUS_FAILURE(status))
6329 {
6330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6331 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6333 vos_mem_free(pWdaParams->wdaMsgParam);
6334 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 return CONVERT_WDI2VOS_STATUS(status);
6337
Jeff Johnson295189b2012-06-20 16:38:30 -07006338}
Jeff Johnson295189b2012-06-20 16:38:30 -07006339#ifdef WLAN_FEATURE_VOWIFI_11R
6340/*
6341 * FUNCTION: WDA_AggrAddTSReqCallback
6342 * send ADD AGGREGATED TS RSP back to PE
6343 */
6344void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6345{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6347 tWDA_CbContext *pWDA;
6348 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006351 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006352 if(NULL == pWdaParams)
6353 {
6354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006355 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006356 VOS_ASSERT(0) ;
6357 return ;
6358 }
6359
6360 pWDA = pWdaParams->pWdaContext;
6361 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362
6363 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6364 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006365 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006368
6369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6370 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 return ;
6372}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006373/*
6374 * FUNCTION: WDA_ProcessAddTSReq
6375 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6376 */
6377VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6378 tAggrAddTsParams *pAggrAddTsReqParams)
6379{
6380 WDI_Status status = WDI_STATUS_SUCCESS ;
6381 int i;
6382 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006383 tWDA_ReqParams *pWdaParams = NULL;
6384
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6389 sizeof(WDI_AggrAddTSReqParamsType)) ;
6390 if(NULL == wdiAggrAddTSReqParam)
6391 {
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 VOS_ASSERT(0);
6395 return VOS_STATUS_E_NOMEM;
6396 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006397
6398
6399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6400 if(NULL == pWdaParams)
6401 {
6402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006403 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006404 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006405 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006406 VOS_ASSERT(0);
6407 return VOS_STATUS_E_NOMEM;
6408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6410 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6411 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6413 {
6414 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6415 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6416 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6418 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6419 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6420 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6421 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6422 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6423 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6424 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6425 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6426 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6427 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6428 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6429 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6430 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6431 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6432 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6434 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6436 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6437 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6438 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6439 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6440 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6441 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6442 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6443 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6444 pAggrAddTsReqParams->tspec[i].inactInterval;
6445 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6446 pAggrAddTsReqParams->tspec[i].suspendInterval;
6447 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6448 pAggrAddTsReqParams->tspec[i].svcStartTime;
6449 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6450 pAggrAddTsReqParams->tspec[i].minDataRate;
6451 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6452 pAggrAddTsReqParams->tspec[i].meanDataRate;
6453 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6454 pAggrAddTsReqParams->tspec[i].peakDataRate;
6455 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6456 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6457 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6458 pAggrAddTsReqParams->tspec[i].delayBound;
6459 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6460 pAggrAddTsReqParams->tspec[i].minPhyRate;
6461 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6462 pAggrAddTsReqParams->tspec[i].surplusBw;
6463 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6464 pAggrAddTsReqParams->tspec[i].mediumTime;
6465 }
6466
6467 /* TODO: tAggrAddTsParams doesn't have the following fields */
6468#if 0
6469 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6470 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6471 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6472 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6473#endif
6474 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6475
6476 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006477 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006479 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6480
6481 pWdaParams->pWdaContext = pWDA;
6482
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006484 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6485
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 if(IS_WDI_STATUS_FAILURE(status))
6487 {
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6489 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6491 vos_mem_free(pWdaParams);
6492
6493 /* send the failure response back to PE*/
6494 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6495 {
6496 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6497 }
6498
6499 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6500 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 return CONVERT_WDI2VOS_STATUS(status) ;
6503}
6504#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006505/*
6506 * FUNCTION: WDA_EnterImpsReqCallback
6507 * send Enter IMPS RSP back to PE
6508 */
6509void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6510{
6511 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006514 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 return ;
6516}
Jeff Johnson295189b2012-06-20 16:38:30 -07006517/*
6518 * FUNCTION: WDA_ProcessEnterImpsReq
6519 * Request to WDI to Enter IMPS power state.
6520 */
6521VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6522{
6523 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 if(IS_WDI_STATUS_FAILURE(status))
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6530 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006531 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 return CONVERT_WDI2VOS_STATUS(status) ;
6534}
Jeff Johnson295189b2012-06-20 16:38:30 -07006535/*
6536 * FUNCTION: WDA_ExitImpsReqCallback
6537 * send Exit IMPS RSP back to PE
6538 */
6539void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6540{
6541 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006543 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006544 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 return ;
6546}
Jeff Johnson295189b2012-06-20 16:38:30 -07006547/*
6548 * FUNCTION: WDA_ProcessExitImpsReq
6549 * Request to WDI to Exit IMPS power state.
6550 */
6551VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6552{
6553 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006555 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 if(IS_WDI_STATUS_FAILURE(status))
6558 {
6559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6560 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006561 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 return CONVERT_WDI2VOS_STATUS(status) ;
6564}
Jeff Johnson295189b2012-06-20 16:38:30 -07006565/*
6566 * FUNCTION: WDA_EnterBmpsReqCallback
6567 * send Enter BMPS RSP back to PE
6568 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006569void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006570{
6571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6572 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006573 tEnterBmpsParams *pEnterBmpsRspParams;
6574
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 if(NULL == pWdaParams)
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006580 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 VOS_ASSERT(0) ;
6582 return ;
6583 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006584
6585 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6586 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6587
6588 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006589 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006590
6591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006593 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6594
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 return ;
6596}
Jeff Johnson295189b2012-06-20 16:38:30 -07006597/*
6598 * FUNCTION: WDA_ProcessEnterBmpsReq
6599 * Request to WDI to Enter BMPS power state.
6600 */
6601VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6602 tEnterBmpsParams *pEnterBmpsReqParams)
6603{
6604 WDI_Status status = WDI_STATUS_SUCCESS;
6605 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6606 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 VOS_ASSERT(0);
6614 return VOS_STATUS_E_FAILURE;
6615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6617 if (NULL == wdiEnterBmpsReqParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006622 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6623 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 return VOS_STATUS_E_NOMEM;
6625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6627 if (NULL == pWdaParams)
6628 {
6629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_ASSERT(0);
6632 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006633 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6634 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 return VOS_STATUS_E_NOMEM;
6636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6638 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6639 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6640 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 // For CCX and 11R Roaming
6642 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6643 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6644 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6645 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006646
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 /* Store param pointer as passed in by caller */
6648 /* store Params pass it to WDI */
6649 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006650 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006652 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6653 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 if (IS_WDI_STATUS_FAILURE(status))
6655 {
6656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6657 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006659 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006661 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 return CONVERT_WDI2VOS_STATUS(status);
6664}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006665
6666
6667static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6668 WDI_Status wdiStatus,
6669 tExitBmpsParams *pExitBmpsReqParams)
6670{
6671 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6672
6673 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6674}
6675
6676
Jeff Johnson295189b2012-06-20 16:38:30 -07006677/*
6678 * FUNCTION: WDA_ExitBmpsReqCallback
6679 * send Exit BMPS RSP back to PE
6680 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006681void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006682{
6683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6684 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006685 tExitBmpsParams *pExitBmpsRspParams;
6686
Jeff Johnson295189b2012-06-20 16:38:30 -07006687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006688 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 if(NULL == pWdaParams)
6690 {
6691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006692 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 VOS_ASSERT(0) ;
6694 return ;
6695 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006696
6697 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6698 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6699
6700 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006701 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006702
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6704 vos_mem_free(pWdaParams) ;
6705
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006706 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 return ;
6708}
Jeff Johnson295189b2012-06-20 16:38:30 -07006709/*
6710 * FUNCTION: WDA_ProcessExitBmpsReq
6711 * Request to WDI to Exit BMPS power state.
6712 */
6713VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6714 tExitBmpsParams *pExitBmpsReqParams)
6715{
6716 WDI_Status status = WDI_STATUS_SUCCESS ;
6717 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6718 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6719 sizeof(WDI_ExitBmpsReqParamsType)) ;
6720 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006722 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006723 if(NULL == wdiExitBmpsReqParams)
6724 {
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006728 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 return VOS_STATUS_E_NOMEM;
6730 }
6731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6732 if(NULL == pWdaParams)
6733 {
6734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 VOS_ASSERT(0);
6737 vos_mem_free(wdiExitBmpsReqParams);
6738 return VOS_STATUS_E_NOMEM;
6739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006741
6742 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6743
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6745
6746 /* Store param pointer as passed in by caller */
6747 /* store Params pass it to WDI */
6748 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6749 pWdaParams->pWdaContext = pWDA;
6750 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6752 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 if(IS_WDI_STATUS_FAILURE(status))
6754 {
6755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6756 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6758 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006759 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 return CONVERT_WDI2VOS_STATUS(status) ;
6762}
Jeff Johnson295189b2012-06-20 16:38:30 -07006763/*
6764 * FUNCTION: WDA_EnterUapsdReqCallback
6765 * send Enter UAPSD RSP back to PE
6766 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006767void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006768{
6769 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6770 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006771 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 if(NULL == pWdaParams)
6775 {
6776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006777 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 VOS_ASSERT(0) ;
6779 return ;
6780 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006781
6782 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6783 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6784
6785 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006786 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006787
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6789 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006790 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 return ;
6792}
Jeff Johnson295189b2012-06-20 16:38:30 -07006793/*
6794 * FUNCTION: WDA_ProcessEnterUapsdReq
6795 * Request to WDI to Enter UAPSD power state.
6796 */
6797VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6798 tUapsdParams *pEnterUapsdReqParams)
6799{
6800 WDI_Status status = WDI_STATUS_SUCCESS ;
6801 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6802 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6803 sizeof(WDI_EnterUapsdReqParamsType)) ;
6804 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006806 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 if(NULL == wdiEnterUapsdReqParams)
6808 {
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 VOS_ASSERT(0);
6812 return VOS_STATUS_E_NOMEM;
6813 }
6814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6815 if(NULL == pWdaParams)
6816 {
6817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_ASSERT(0);
6820 vos_mem_free(wdiEnterUapsdReqParams);
6821 return VOS_STATUS_E_NOMEM;
6822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6824 pEnterUapsdReqParams->beDeliveryEnabled;
6825 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6826 pEnterUapsdReqParams->beTriggerEnabled;
6827 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6828 pEnterUapsdReqParams->bkDeliveryEnabled;
6829 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6830 pEnterUapsdReqParams->bkTriggerEnabled;
6831 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6832 pEnterUapsdReqParams->viDeliveryEnabled;
6833 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6834 pEnterUapsdReqParams->viTriggerEnabled;
6835 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6836 pEnterUapsdReqParams->voDeliveryEnabled;
6837 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6838 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006839 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840
6841 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6842
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 /* Store param pointer as passed in by caller */
6844 /* store Params pass it to WDI */
6845 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6846 pWdaParams->pWdaContext = pWDA;
6847 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6849 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 if(IS_WDI_STATUS_FAILURE(status))
6851 {
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6853 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6854 vos_mem_free(pWdaParams->wdaMsgParam) ;
6855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6856 vos_mem_free(pWdaParams) ;
6857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 return CONVERT_WDI2VOS_STATUS(status) ;
6859}
Jeff Johnson295189b2012-06-20 16:38:30 -07006860/*
6861 * FUNCTION: WDA_ExitUapsdReqCallback
6862 * send Exit UAPSD RSP back to PE
6863 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006864void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006865{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006866
6867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6868 tWDA_CbContext *pWDA;
6869 tExitUapsdParams *pExitUapsdRspParams;
6870
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006872 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006873 if(NULL == pWdaParams)
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006877 VOS_ASSERT(0);
6878 return;
6879 }
6880
6881 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6882 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6883
6884 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006885 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006886
6887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6888 vos_mem_free(pWdaParams) ;
6889
6890 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 return ;
6892}
Jeff Johnson295189b2012-06-20 16:38:30 -07006893/*
6894 * FUNCTION: WDA_ProcessExitUapsdReq
6895 * Request to WDI to Exit UAPSD power state.
6896 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006897VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6898 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006899{
6900 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006901 tWDA_ReqParams *pWdaParams ;
6902 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6903 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6904 sizeof(WDI_ExitUapsdReqParamsType)) ;
6905
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006907 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006908
6909 if(NULL == wdiExitUapsdReqParams)
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006913 VOS_ASSERT(0);
6914 return VOS_STATUS_E_NOMEM;
6915 }
6916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6917 if(NULL == pWdaParams)
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006920 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006921 VOS_ASSERT(0);
6922 vos_mem_free(wdiExitUapsdReqParams);
6923 return VOS_STATUS_E_NOMEM;
6924 }
6925
6926 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6927 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6928
6929 /* Store param pointer as passed in by caller */
6930 /* store Params pass it to WDI */
6931 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6932 pWdaParams->pWdaContext = pWDA;
6933 pWdaParams->wdaMsgParam = pExitUapsdParams;
6934
6935 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 if(IS_WDI_STATUS_FAILURE(status))
6937 {
6938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6939 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006940 vos_mem_free(pWdaParams->wdaMsgParam) ;
6941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6942 vos_mem_free(pWdaParams) ;
6943
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 return CONVERT_WDI2VOS_STATUS(status) ;
6946}
6947
Jeff Johnson295189b2012-06-20 16:38:30 -07006948/*
6949 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6950 *
6951 */
6952void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6953{
6954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006956 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 if(NULL == pWdaParams)
6958 {
6959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006960 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 VOS_ASSERT(0) ;
6962 return ;
6963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 if( pWdaParams != NULL )
6965 {
6966 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6967 {
6968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6969 }
6970 if( pWdaParams->wdaMsgParam != NULL )
6971 {
6972 vos_mem_free(pWdaParams->wdaMsgParam) ;
6973 }
6974 vos_mem_free(pWdaParams) ;
6975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 return ;
6977}
Jeff Johnson295189b2012-06-20 16:38:30 -07006978/*
6979 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6980 * Request to WDI to set the power save params at start.
6981 */
6982VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6983 tSirPowerSaveCfg *pPowerSaveCfg)
6984{
6985 WDI_Status status = WDI_STATUS_SUCCESS ;
6986 tHalCfg *tlvStruct = NULL ;
6987 tANI_U8 *tlvStructStart = NULL ;
6988 v_PVOID_t *configParam;
6989 tANI_U32 configParamSize;
6990 tANI_U32 *configDataValue;
6991 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6992 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006994 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6996 {
6997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006998 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007000 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 return VOS_STATUS_E_FAILURE;
7002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7004 if (NULL == wdiPowerSaveCfg)
7005 {
7006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007009 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 return VOS_STATUS_E_NOMEM;
7011 }
7012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7013 if(NULL == pWdaParams)
7014 {
7015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_ASSERT(0);
7018 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007019 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 return VOS_STATUS_E_NOMEM;
7021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7023 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 if(NULL == configParam)
7025 {
7026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007027 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007028 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 vos_mem_free(pWdaParams);
7030 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007031 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 return VOS_STATUS_E_NOMEM;
7033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 vos_mem_set(configParam, configParamSize, 0);
7035 wdiPowerSaveCfg->pConfigBuffer = configParam;
7036 tlvStruct = (tHalCfg *)configParam;
7037 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7039 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7040 tlvStruct->length = sizeof(tANI_U32);
7041 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7042 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7044 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7046 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7047 tlvStruct->length = sizeof(tANI_U32);
7048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7049 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7051 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007052 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7053 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7054 tlvStruct->length = sizeof(tANI_U32);
7055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7056 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7058 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7060 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7061 tlvStruct->length = sizeof(tANI_U32);
7062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7063 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7065 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7067 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7068 tlvStruct->length = sizeof(tANI_U32);
7069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7070 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7072 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7074 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7075 tlvStruct->length = sizeof(tANI_U32);
7076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7077 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7079 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7081 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7082 tlvStruct->length = sizeof(tANI_U32);
7083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7084 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7086 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7088 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7089 tlvStruct->length = sizeof(tANI_U32);
7090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7091 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7092 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7093 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7095 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7096 tlvStruct->length = sizeof(tANI_U32);
7097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7098 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7099 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7100 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7102 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7103 tlvStruct->length = sizeof(tANI_U32);
7104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7105 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7107 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7109 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7110 tlvStruct->length = sizeof(tANI_U32);
7111 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7112 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7114 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 /* store Params pass it to WDI */
7118 pWdaParams->wdaMsgParam = configParam;
7119 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7120 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7122 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 if(IS_WDI_STATUS_FAILURE(status))
7124 {
7125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7126 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7127 vos_mem_free(pWdaParams->wdaMsgParam);
7128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7129 vos_mem_free(pWdaParams);
7130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 return CONVERT_WDI2VOS_STATUS(status);
7133}
Jeff Johnson295189b2012-06-20 16:38:30 -07007134/*
7135 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7136 *
7137 */
7138void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
7139{
7140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007142 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7144 vos_mem_free(pWdaParams);
7145
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 return ;
7147}
Jeff Johnson295189b2012-06-20 16:38:30 -07007148/*
7149 * FUNCTION: WDA_SetUapsdAcParamsReq
7150 * Request to WDI to set the UAPSD params for an ac (sta mode).
7151 */
7152VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7153 tUapsdInfo *pUapsdInfo)
7154{
7155 WDI_Status status = WDI_STATUS_SUCCESS;
7156 tWDA_CbContext *pWDA = NULL ;
7157 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7158 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7159 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7160 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 if(NULL == wdiUapsdParams)
7164 {
7165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007166 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 VOS_ASSERT(0);
7168 return VOS_STATUS_E_NOMEM;
7169 }
7170 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7171 if(NULL == pWdaParams)
7172 {
7173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 VOS_ASSERT(0);
7176 vos_mem_free(wdiUapsdParams);
7177 return VOS_STATUS_E_NOMEM;
7178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7180 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7181 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7182 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7183 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7184 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 pWdaParams->pWdaContext = pWDA;
7188 /* Store param pointer as passed in by caller */
7189 pWdaParams->wdaMsgParam = pUapsdInfo;
7190 /* store Params pass it to WDI */
7191 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7193 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7194 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 if(IS_WDI_STATUS_FAILURE(status))
7196 {
7197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7198 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7200 vos_mem_free(pWdaParams);
7201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7203 return VOS_STATUS_SUCCESS;
7204 else
7205 return VOS_STATUS_E_FAILURE;
7206
Jeff Johnson295189b2012-06-20 16:38:30 -07007207}
7208/*
7209 * FUNCTION: WDA_ClearUapsdAcParamsReq
7210 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7211 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7212 * and again enter the UPASD with the modified params. Hence the disable
7213 * function was kept empty.
7214 *
7215 */
7216VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7217{
7218 /* do nothing */
7219 return VOS_STATUS_SUCCESS;
7220}
Jeff Johnson295189b2012-06-20 16:38:30 -07007221/*
7222 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7223 *
7224 */
7225void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7226{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007227 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7228
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007231
7232 if(NULL == pWdaParams)
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007235 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007236 VOS_ASSERT(0) ;
7237 return ;
7238 }
7239
7240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7241 vos_mem_free(pWdaParams->wdaMsgParam);
7242 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007243
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 //print a msg, nothing else to do
7245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7246 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 return ;
7248}
Jeff Johnson295189b2012-06-20 16:38:30 -07007249/*
7250 * FUNCTION: WDA_UpdateUapsdParamsReq
7251 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7252 */
7253VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7254 tUpdateUapsdParams* pUpdateUapsdInfo)
7255{
7256 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007257 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7259 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7260 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007261 tWDA_ReqParams *pWdaParams = NULL;
7262
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007264 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 if(NULL == wdiUpdateUapsdParams)
7266 {
7267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007268 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007269 VOS_ASSERT(0);
7270 return VOS_STATUS_E_NOMEM;
7271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7273 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7274 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007275
7276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7277 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 {
7279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007282 vos_mem_free(pUpdateUapsdInfo);
7283 vos_mem_free(wdiUpdateUapsdParams);
7284 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007286 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007287 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007289 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7290 pWdaParams->pWdaContext = pWDA;
7291
Jeff Johnson43971f52012-07-17 12:26:56 -07007292 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007293 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7294 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007295
Jeff Johnson43971f52012-07-17 12:26:56 -07007296 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 {
7298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7299 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007300 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7302 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007303 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007305 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007306}
Jeff Johnson295189b2012-06-20 16:38:30 -07007307/*
7308 * FUNCTION: WDA_ConfigureRxpFilterCallback
7309 *
7310 */
7311void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7312{
7313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 if(WDI_STATUS_SUCCESS != wdiStatus)
7317 {
7318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007319 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 if(NULL == pWdaParams)
7322 {
7323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 VOS_ASSERT(0) ;
7326 return ;
7327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7329 vos_mem_free(pWdaParams->wdaMsgParam);
7330 vos_mem_free(pWdaParams);
7331 return ;
7332}
Jeff Johnson295189b2012-06-20 16:38:30 -07007333/*
7334 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7335 *
7336 */
7337VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7338 tSirWlanSetRxpFilters *pWlanSuspendParam)
7339{
Jeff Johnson295189b2012-06-20 16:38:30 -07007340 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007341 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7343 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7344 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7345 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007348 if(NULL == wdiRxpFilterParams)
7349 {
7350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 VOS_ASSERT(0);
7353 vos_mem_free(pWlanSuspendParam);
7354 return VOS_STATUS_E_NOMEM;
7355 }
7356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7357 if(NULL == pWdaParams)
7358 {
7359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 VOS_ASSERT(0);
7362 vos_mem_free(wdiRxpFilterParams);
7363 vos_mem_free(pWlanSuspendParam);
7364 return VOS_STATUS_E_NOMEM;
7365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7367 pWlanSuspendParam->setMcstBcstFilter;
7368 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7369 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7370
7371 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 pWdaParams->pWdaContext = pWDA;
7373 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007375 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7377 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007378 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 {
7380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7381 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007382 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7384 vos_mem_free(pWdaParams->wdaMsgParam);
7385 vos_mem_free(pWdaParams);
7386 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007387 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007388}
Jeff Johnson295189b2012-06-20 16:38:30 -07007389/*
7390 * FUNCTION: WDA_WdiIndicationCallback
7391 *
7392 */
7393void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7394 void* pUserData)
7395{
7396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007398}
Jeff Johnson295189b2012-06-20 16:38:30 -07007399/*
7400 * FUNCTION: WDA_ProcessWlanSuspendInd
7401 *
7402 */
7403VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7404 tSirWlanSuspendParam *pWlanSuspendParam)
7405{
7406 WDI_Status wdiStatus;
7407 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7411 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7412 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7413 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7416 if(WDI_STATUS_PENDING == wdiStatus)
7417 {
7418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007419 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 }
7421 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007424 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 vos_mem_free(pWlanSuspendParam);
7427 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7428}
7429
Chet Lanctot186b5732013-03-18 10:26:30 -07007430#ifdef WLAN_FEATURE_11W
7431/*
7432 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7433 *
7434 */
7435VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7436 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7437{
7438 WDI_Status wdiStatus;
7439 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7441 "------> %s ", __func__);
7442
7443 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7444 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7445 sizeof(tSirMacAddr));
7446
7447 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7448 wdiExclUnencryptParams.pUserData = pWDA;
7449
7450 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7451 if(WDI_STATUS_PENDING == wdiStatus)
7452 {
7453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7454 "Pending received for %s:%d ", __func__, __LINE__ );
7455 }
7456 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7457 {
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7459 "Failure in %s:%d ", __func__, __LINE__ );
7460 }
7461 vos_mem_free(pExclUnencryptParam);
7462 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7463}
7464#endif
7465
Jeff Johnson295189b2012-06-20 16:38:30 -07007466/*
7467 * FUNCTION: WDA_ProcessWlanResumeCallback
7468 *
7469 */
7470void WDA_ProcessWlanResumeCallback(
7471 WDI_SuspendResumeRspParamsType *resumeRspParams,
7472 void* pUserData)
7473{
7474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007476 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 if(NULL == pWdaParams)
7478 {
7479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007480 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 VOS_ASSERT(0) ;
7482 return ;
7483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7485 {
7486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007487 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7490 vos_mem_free(pWdaParams->wdaMsgParam);
7491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 return ;
7493}
Jeff Johnson295189b2012-06-20 16:38:30 -07007494/*
7495 * FUNCTION: WDA_ProcessWlanResumeReq
7496 *
7497 */
7498VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7499 tSirWlanResumeParam *pWlanResumeParam)
7500{
7501 WDI_Status wdiStatus;
7502 WDI_ResumeParamsType *wdiResumeParams =
7503 (WDI_ResumeParamsType *)vos_mem_malloc(
7504 sizeof(WDI_ResumeParamsType) ) ;
7505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 if(NULL == wdiResumeParams)
7509 {
7510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 VOS_ASSERT(0);
7513 return VOS_STATUS_E_NOMEM;
7514 }
7515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7516 if(NULL == pWdaParams)
7517 {
7518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 VOS_ASSERT(0);
7521 vos_mem_free(wdiResumeParams);
7522 return VOS_STATUS_E_NOMEM;
7523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7525 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 wdiResumeParams->wdiReqStatusCB = NULL;
7528 pWdaParams->wdaMsgParam = pWlanResumeParam;
7529 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7530 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7532 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7533 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7535 {
7536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7537 "Failure in Host Resume REQ WDI API, free all the memory " );
7538 VOS_ASSERT(0);
7539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7540 vos_mem_free(pWdaParams->wdaMsgParam);
7541 vos_mem_free(pWdaParams);
7542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7544}
7545
Jeff Johnson295189b2012-06-20 16:38:30 -07007546/*
7547 * FUNCTION: WDA_SetBeaconFilterReqCallback
7548 *
7549 */
7550void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7551{
7552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 if(NULL == pWdaParams)
7556 {
7557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 VOS_ASSERT(0) ;
7560 return ;
7561 }
7562
7563 vos_mem_free(pWdaParams->wdaMsgParam) ;
7564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7565 vos_mem_free(pWdaParams) ;
7566 /*
7567 * No respone required for SetBeaconFilter req so just free the request
7568 * param here
7569 */
7570
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 return ;
7572}
Jeff Johnson295189b2012-06-20 16:38:30 -07007573/*
7574 * FUNCTION: WDA_SetBeaconFilterReq
7575 * Request to WDI to send the beacon filtering related information.
7576 */
7577VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7578 tBeaconFilterMsg* pBeaconFilterInfo)
7579{
7580 WDI_Status status = WDI_STATUS_SUCCESS;
7581 tANI_U8 *dstPtr, *srcPtr;
7582 tANI_U8 filterLength;
7583 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7584 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7585 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 if(NULL == wdiBeaconFilterInfo)
7590 {
7591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 VOS_ASSERT(0);
7594 return VOS_STATUS_E_NOMEM;
7595 }
7596 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7597 if(NULL == pWdaParams)
7598 {
7599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 VOS_ASSERT(0);
7602 vos_mem_free(wdiBeaconFilterInfo);
7603 return VOS_STATUS_E_NOMEM;
7604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007605 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7606 pBeaconFilterInfo->beaconInterval;
7607 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7608 pBeaconFilterInfo->capabilityInfo;
7609 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7610 pBeaconFilterInfo->capabilityMask;
7611 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007612
7613 //Fill the BssIdx
7614 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7615
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 //Fill structure with info contained in the beaconFilterTable
7617 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7618 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7619 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7620 if(WDI_BEACON_FILTER_LEN < filterLength)
7621 {
7622 filterLength = WDI_BEACON_FILTER_LEN;
7623 }
7624 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7626 /* Store param pointer as passed in by caller */
7627 /* store Params pass it to WDI */
7628 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7629 pWdaParams->pWdaContext = pWDA;
7630 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7631
Jeff Johnson295189b2012-06-20 16:38:30 -07007632 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7633 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 if(IS_WDI_STATUS_FAILURE(status))
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7638 vos_mem_free(pWdaParams->wdaMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7640 vos_mem_free(pWdaParams) ;
7641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007642 return CONVERT_WDI2VOS_STATUS(status) ;
7643}
Jeff Johnson295189b2012-06-20 16:38:30 -07007644/*
7645 * FUNCTION: WDA_RemBeaconFilterReqCallback
7646 *
7647 */
7648void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7649{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7651
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007653 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007654
7655 if(NULL == pWdaParams)
7656 {
7657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007658 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007659 VOS_ASSERT(0) ;
7660 return ;
7661 }
7662
7663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7664 vos_mem_free(pWdaParams->wdaMsgParam);
7665 vos_mem_free(pWdaParams);
7666
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 //print a msg, nothing else to do
7668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7669 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 return ;
7671}
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 // TODO: PE does not have this feature for now implemented,
7673 // but the support for removing beacon filter exists between
7674 // HAL and FW. This function can be called whenever PE defines
7675 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007676/*
7677 * FUNCTION: WDA_RemBeaconFilterReq
7678 * Request to WDI to send the removal of beacon filtering related information.
7679 */
7680VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7681 tRemBeaconFilterMsg* pBeaconFilterInfo)
7682{
7683 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007684 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7686 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7687 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007688 tWDA_ReqParams *pWdaParams ;
7689
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 if(NULL == wdiBeaconFilterInfo)
7693 {
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 VOS_ASSERT(0);
7697 return VOS_STATUS_E_NOMEM;
7698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7700 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007701 //Fill structure with info contained in the ucRemIeId
7702 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7703 pBeaconFilterInfo->ucRemIeId,
7704 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7705 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007706
7707 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7708 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 {
7710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007713 vos_mem_free(wdiBeaconFilterInfo);
7714 vos_mem_free(pBeaconFilterInfo);
7715 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 }
7717
7718 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007719 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007721 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7722
7723 pWdaParams->pWdaContext = pWDA;
7724
Jeff Johnson43971f52012-07-17 12:26:56 -07007725 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007726 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007727 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 {
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7730 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007731 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7733 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007734 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007736 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007737}
Jeff Johnson295189b2012-06-20 16:38:30 -07007738/*
7739 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7740 *
7741 */
7742void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7743{
7744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 if(NULL == pWdaParams)
7748 {
7749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 VOS_ASSERT(0) ;
7752 return ;
7753 }
7754
7755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7756 vos_mem_free(pWdaParams) ;
7757
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 return ;
7759}
Jeff Johnson295189b2012-06-20 16:38:30 -07007760/*
7761 * FUNCTION: WDA_SetRSSIThresholdsReq
7762 * Request to WDI to set the RSSI thresholds (sta mode).
7763 */
7764VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7765{
7766 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007767 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 tWDA_CbContext *pWDA = NULL ;
7769 v_PVOID_t pVosContext = NULL;
7770 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7771 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7772 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7773 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007775 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 if(NULL == wdiRSSIThresholdsInfo)
7777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 VOS_ASSERT(0);
7781 return VOS_STATUS_E_NOMEM;
7782 }
7783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7784 if(NULL == pWdaParams)
7785 {
7786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 VOS_ASSERT(0);
7789 vos_mem_free(wdiRSSIThresholdsInfo);
7790 return VOS_STATUS_E_NOMEM;
7791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7794 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7795 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7797 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7798 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7800 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7801 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7804 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 /* Store param pointer as passed in by caller */
7807 /* store Params pass it to WDI */
7808 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7809 pWdaParams->pWdaContext = pWDA;
7810 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007811 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007813 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 {
7815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7816 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007817 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7819 vos_mem_free(pWdaParams) ;
7820 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007821 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007822
7823}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007824/*
7825 * FUNCTION: WDA_HostOffloadReqCallback
7826 *
7827 */
7828void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7829{
7830 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7831
7832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 if(NULL == pWdaParams)
7835 {
7836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 VOS_ASSERT(0) ;
7839 return ;
7840 }
7841
7842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7843 vos_mem_free(pWdaParams->wdaMsgParam);
7844 vos_mem_free(pWdaParams) ;
7845
7846 //print a msg, nothing else to do
7847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7848 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 return ;
7850}
Jeff Johnson295189b2012-06-20 16:38:30 -07007851/*
7852 * FUNCTION: WDA_ProcessHostOffloadReq
7853 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7854 * to broadcast traffic (sta mode).
7855 */
7856VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7857 tSirHostOffloadReq *pHostOffloadParams)
7858{
7859 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007860 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7862 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7863 sizeof(WDI_HostOffloadReqParamsType)) ;
7864 tWDA_ReqParams *pWdaParams ;
7865
7866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007867 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007868
7869 if(NULL == wdiHostOffloadInfo)
7870 {
7871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 VOS_ASSERT(0);
7874 return VOS_STATUS_E_NOMEM;
7875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7877 if(NULL == pWdaParams)
7878 {
7879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 VOS_ASSERT(0);
7882 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007883 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 return VOS_STATUS_E_NOMEM;
7885 }
7886
7887 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7888 pHostOffloadParams->offloadType;
7889 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7890 pHostOffloadParams->enableOrDisable;
7891
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007892 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7893 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7894
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7896 {
7897 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7898 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7899 pHostOffloadParams->params.hostIpv4Addr,
7900 4);
7901 break;
7902 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7903 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7904 pHostOffloadParams->params.hostIpv6Addr,
7905 16);
7906 break;
7907 case SIR_IPV6_NS_OFFLOAD:
7908 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7909 pHostOffloadParams->params.hostIpv6Addr,
7910 16);
7911
7912#ifdef WLAN_NS_OFFLOAD
7913 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7914 {
7915 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7916 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7917 16);
7918 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7919 }
7920 else
7921 {
7922 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7923 }
7924
7925 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7926 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7927 16);
7928 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7929 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7930 6);
7931
7932 //Only two are supported so let's go through them without a loop
7933 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7934 {
7935 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7936 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7937 16);
7938 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7939 }
7940 else
7941 {
7942 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7943 }
7944
7945 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7946 {
7947 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7948 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7949 16);
7950 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7951 }
7952 else
7953 {
7954 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7955 }
7956 break;
7957#endif //WLAN_NS_OFFLOAD
7958 default:
7959 {
7960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7961 "No Handling for Offload Type %x in WDA "
7962 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7963 //WDA_VOS_ASSERT(0) ;
7964 }
7965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007967
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007969 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 /* store Params pass it to WDI */
7971 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7972 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007973
Jeff Johnson295189b2012-06-20 16:38:30 -07007974
Jeff Johnson43971f52012-07-17 12:26:56 -07007975 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7977
Jeff Johnson43971f52012-07-17 12:26:56 -07007978 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 {
7980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7981 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007982 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7984 vos_mem_free(pWdaParams->wdaMsgParam);
7985 vos_mem_free(pWdaParams) ;
7986 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007987 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007988
7989}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007990/*
7991 * FUNCTION: WDA_KeepAliveReqCallback
7992 *
7993 */
7994void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7995{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7997
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007999 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008000
8001 if(NULL == pWdaParams)
8002 {
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008004 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008005 VOS_ASSERT(0) ;
8006 return ;
8007 }
8008
8009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8010 vos_mem_free(pWdaParams->wdaMsgParam);
8011 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 //print a msg, nothing else to do
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8015 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 return ;
8017}
Jeff Johnson295189b2012-06-20 16:38:30 -07008018/*
8019 * FUNCTION: WDA_ProcessKeepAliveReq
8020 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8021 * wakeup due to broadcast traffic (sta mode).
8022 */
8023VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8024 tSirKeepAliveReq *pKeepAliveParams)
8025{
8026 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008027 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8029 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8030 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008031 tWDA_ReqParams *pWdaParams;
8032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 if(NULL == wdiKeepAliveInfo)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008040 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 return VOS_STATUS_E_NOMEM;
8042 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043
8044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8045 if(NULL == pWdaParams)
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008048 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008049 VOS_ASSERT(0);
8050 vos_mem_free(wdiKeepAliveInfo);
8051 vos_mem_free(pKeepAliveParams);
8052 return VOS_STATUS_E_NOMEM;
8053 }
8054
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8056 pKeepAliveParams->packetType;
8057 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8058 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008059
8060 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8061 pKeepAliveParams->bssId,
8062 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008063
8064 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8065 {
8066 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8067 pKeepAliveParams->hostIpv4Addr,
8068 SIR_IPV4_ADDR_LEN);
8069 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8070 pKeepAliveParams->destIpv4Addr,
8071 SIR_IPV4_ADDR_LEN);
8072 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8073 pKeepAliveParams->destMacAddr,
8074 SIR_MAC_ADDR_LEN);
8075 }
8076 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8077 {
8078 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8079 SIR_IPV4_ADDR_LEN,
8080 0);
8081 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8082 SIR_IPV4_ADDR_LEN,
8083 0);
8084 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8085 SIR_MAC_ADDR_LEN,
8086 0);
8087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008089
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008091 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008093 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8094 pWdaParams->pWdaContext = pWDA;
8095
Jeff Johnson295189b2012-06-20 16:38:30 -07008096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8097 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8098 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8099 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8100 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8102 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8103 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8104 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8105 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8107 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8108 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8109 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8110 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8111 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8112 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8113 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8115 "TimePeriod %d PacketType %d",
8116 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8117 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008118 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008119 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
8120
Jeff Johnson43971f52012-07-17 12:26:56 -07008121 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 {
8123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8124 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008125 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8127 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008128 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008130 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008131
8132}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008133/*
8134 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8135 *
8136 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008137void WDA_WowlAddBcPtrnReqCallback(
8138 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8139 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008140{
8141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 if(NULL == pWdaParams)
8145 {
8146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 VOS_ASSERT(0) ;
8149 return ;
8150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8152 vos_mem_free(pWdaParams->wdaMsgParam);
8153 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 return ;
8155}
Jeff Johnson295189b2012-06-20 16:38:30 -07008156/*
8157 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8158 * Request to WDI to add WOWL Bcast pattern
8159 */
8160VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8161 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8162{
8163 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008164 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8166 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8167 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8168 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008170 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 if(NULL == wdiWowlAddBcPtrnInfo)
8172 {
8173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 VOS_ASSERT(0);
8176 return VOS_STATUS_E_NOMEM;
8177 }
8178 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8179 if(NULL == pWdaParams)
8180 {
8181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008183 VOS_ASSERT(0);
8184 vos_mem_free(wdiWowlAddBcPtrnInfo);
8185 return VOS_STATUS_E_NOMEM;
8186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008187 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8188 pWowlAddBcPtrnParams->ucPatternId;
8189 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8190 pWowlAddBcPtrnParams->ucPatternByteOffset;
8191 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8192 pWowlAddBcPtrnParams->ucPatternMaskSize;
8193 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8194 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8196 {
8197 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8198 pWowlAddBcPtrnParams->ucPattern,
8199 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8200 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8201 pWowlAddBcPtrnParams->ucPatternMask,
8202 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8203 }
8204 else
8205 {
8206 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8207 pWowlAddBcPtrnParams->ucPattern,
8208 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8209 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8210 pWowlAddBcPtrnParams->ucPatternMask,
8211 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8212
8213 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8214 pWowlAddBcPtrnParams->ucPatternExt,
8215 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8216 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8217 pWowlAddBcPtrnParams->ucPatternMaskExt,
8218 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8219 }
8220
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008221 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8222 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8223
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 /* Store param pointer as passed in by caller */
8226 /* store Params pass it to WDI */
8227 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8228 pWdaParams->pWdaContext = pWDA;
8229 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008230 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008232 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 {
8234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8235 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008236 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 vos_mem_free(pWdaParams->wdaMsgParam) ;
8238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8239 vos_mem_free(pWdaParams) ;
8240 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008241 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008242
8243}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008244/*
8245 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8246 *
8247 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008248void WDA_WowlDelBcPtrnReqCallback(
8249 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8250 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008251{
8252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008254 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 if(NULL == pWdaParams)
8256 {
8257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008258 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 VOS_ASSERT(0) ;
8260 return ;
8261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8263 vos_mem_free(pWdaParams->wdaMsgParam);
8264 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 return ;
8266}
Jeff Johnson295189b2012-06-20 16:38:30 -07008267/*
8268 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8269 * Request to WDI to delete WOWL Bcast pattern
8270 */
8271VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8272 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8273{
8274 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008275 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008276 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8277 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8278 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 if(NULL == wdiWowlDelBcPtrnInfo)
8283 {
8284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 VOS_ASSERT(0);
8287 return VOS_STATUS_E_NOMEM;
8288 }
8289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8290 if(NULL == pWdaParams)
8291 {
8292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 VOS_ASSERT(0);
8295 vos_mem_free(wdiWowlDelBcPtrnInfo);
8296 return VOS_STATUS_E_NOMEM;
8297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8299 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008300
8301 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8302 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8303
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 /* Store param pointer as passed in by caller */
8306 /* store Params pass it to WDI */
8307 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8308 pWdaParams->pWdaContext = pWDA;
8309 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008310 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008312 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 {
8314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8315 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008316 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 vos_mem_free(pWdaParams->wdaMsgParam) ;
8318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8319 vos_mem_free(pWdaParams) ;
8320 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008321 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322
8323}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008324/*
8325 * FUNCTION: WDA_WowlEnterReqCallback
8326 *
8327 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008328void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008329{
8330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8331 tWDA_CbContext *pWDA;
8332 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 if(NULL == pWdaParams)
8336 {
8337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008338 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 VOS_ASSERT(0) ;
8340 return ;
8341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8343 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8344
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008345 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8346
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8348 vos_mem_free(pWdaParams) ;
8349
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008350 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008351 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 return ;
8354}
Jeff Johnson295189b2012-06-20 16:38:30 -07008355/*
8356 * FUNCTION: WDA_ProcessWowlEnterReq
8357 * Request to WDI to enter WOWL
8358 */
8359VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8360 tSirHalWowlEnterParams *pWowlEnterParams)
8361{
8362 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008363 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8365 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8366 sizeof(WDI_WowlEnterReqParamsType)) ;
8367 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 if(NULL == wdiWowlEnterInfo)
8371 {
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_ASSERT(0);
8375 return VOS_STATUS_E_NOMEM;
8376 }
8377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8378 if(NULL == pWdaParams)
8379 {
8380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 VOS_ASSERT(0);
8383 vos_mem_free(wdiWowlEnterInfo);
8384 return VOS_STATUS_E_NOMEM;
8385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8387 pWowlEnterParams->magicPtrn,
8388 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8390 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8392 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8394 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8396 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8398 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8400 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8402 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8404 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008405#ifdef WLAN_WAKEUP_EVENTS
8406 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8407 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8408
8409 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8410 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8411
8412 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8413 pWowlEnterParams->ucWowNetScanOffloadMatch;
8414
8415 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8416 pWowlEnterParams->ucWowGTKRekeyError;
8417
8418 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8419 pWowlEnterParams->ucWoWBSSConnLoss;
8420#endif // WLAN_WAKEUP_EVENTS
8421
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008422 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8423 pWowlEnterParams->bssIdx;
8424
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 /* Store param pointer as passed in by caller */
8427 /* store Params pass it to WDI */
8428 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8429 pWdaParams->pWdaContext = pWDA;
8430 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008431 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008433 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8436 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008437 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 vos_mem_free(pWdaParams->wdaMsgParam) ;
8439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8440 vos_mem_free(pWdaParams) ;
8441 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008442 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008443
8444}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008445/*
8446 * FUNCTION: WDA_WowlExitReqCallback
8447 *
8448 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008449void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008450{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8452 tWDA_CbContext *pWDA;
8453 tSirHalWowlExitParams *pWowlExitParams;
8454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008455 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008456 if(NULL == pWdaParams)
8457 {
8458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008459 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008460 VOS_ASSERT(0) ;
8461 return ;
8462 }
8463 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8464 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8465
8466 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008467 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008468
8469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8470 vos_mem_free(pWdaParams) ;
8471
Jeff Johnson295189b2012-06-20 16:38:30 -07008472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008473 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008474 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 return ;
8476}
Jeff Johnson295189b2012-06-20 16:38:30 -07008477/*
8478 * FUNCTION: WDA_ProcessWowlExitReq
8479 * Request to WDI to add WOWL Bcast pattern
8480 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008481VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8482 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008483{
8484 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008485 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008486 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8487 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8488 sizeof(WDI_WowlExitReqParamsType)) ;
8489 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008491 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008492 if(NULL == wdiWowlExitInfo)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008496 VOS_ASSERT(0);
8497 return VOS_STATUS_E_NOMEM;
8498 }
8499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8500 if(NULL == pWdaParams)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008503 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008504 VOS_ASSERT(0);
8505 vos_mem_free(wdiWowlExitInfo);
8506 return VOS_STATUS_E_NOMEM;
8507 }
8508
8509 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8510 pWowlExitParams->bssIdx;
8511
8512 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8513
8514 /* Store param pointer as passed in by caller */
8515 /* store Params pass it to WDI */
8516 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8517 pWdaParams->pWdaContext = pWDA;
8518 pWdaParams->wdaMsgParam = pWowlExitParams;
8519
8520 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8521 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008522
Jeff Johnson43971f52012-07-17 12:26:56 -07008523 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008524 {
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8526 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008527 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8529 vos_mem_free(pWdaParams->wdaMsgParam);
8530 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008532 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008534/*
8535 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8536 * Request to WDI to determine whether a given station is capable of
8537 * using HW-based frame translation
8538 */
8539v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8540 tANI_U8 staIdx)
8541{
8542 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8543}
Jeff Johnson295189b2012-06-20 16:38:30 -07008544/*
8545 * FUNCTION: WDA_NvDownloadReqCallback
8546 * send NV Download RSP back to PE
8547 */
8548void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8549 void* pUserData)
8550{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008551
8552 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8553 tWDA_CbContext *pWDA;
8554
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008556 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008557
8558 if(NULL == pWdaParams)
8559 {
8560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008561 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008562 VOS_ASSERT(0) ;
8563 return ;
8564 }
8565
8566 pWDA = pWdaParams->pWdaContext;
8567
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8570 vos_mem_free(pWdaParams);
8571
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 return ;
8574}
Jeff Johnson295189b2012-06-20 16:38:30 -07008575/*
8576 * FUNCTION: WDA_ProcessNvDownloadReq
8577 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8578 */
8579VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8580{
8581 /* Initialize the local Variables*/
8582 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8583 v_VOID_t *pNvBuffer=NULL;
8584 v_SIZE_t bufferSize = 0;
8585 WDI_Status status = WDI_STATUS_E_FAILURE;
8586 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008587 tWDA_ReqParams *pWdaParams ;
8588
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 if(NULL == pWDA)
8592 {
8593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008594 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008595 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008596 return VOS_STATUS_E_FAILURE;
8597 }
8598
8599 /* Get the NV structure base address and size from VOS */
8600 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8602 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 if(NULL == wdiNvDownloadReqParam)
8604 {
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 VOS_ASSERT(0);
8608 return VOS_STATUS_E_NOMEM;
8609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 /* Copy Params to wdiNvDownloadReqParam*/
8611 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8612 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008613
8614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8615 if(NULL == pWdaParams)
8616 {
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008618 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008619 VOS_ASSERT(0);
8620 vos_mem_free(wdiNvDownloadReqParam);
8621 return VOS_STATUS_E_NOMEM;
8622 }
8623
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008625 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8626 pWdaParams->wdaMsgParam = NULL;
8627 pWdaParams->pWdaContext = pWDA;
8628
8629
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008631
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008633 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8634
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 if(IS_WDI_STATUS_FAILURE(status))
8636 {
8637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8638 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8640 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008643}
8644/*
8645 * FUNCTION: WDA_FlushAcReqCallback
8646 * send Flush AC RSP back to TL
8647 */
8648void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8649{
8650 vos_msg_t wdaMsg = {0} ;
8651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8652 tFlushACReq *pFlushACReqParams;
8653 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008655 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 if(NULL == pWdaParams)
8657 {
8658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008659 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 VOS_ASSERT(0) ;
8661 return ;
8662 }
8663
8664 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8665 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8666 if(NULL == pFlushACRspParams)
8667 {
8668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008671 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 return ;
8673 }
8674 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8675 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8676 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8677 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8678 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008679 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 vos_mem_free(pWdaParams->wdaMsgParam) ;
8681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008683 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8684 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8685 // POST message to TL
8686 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8687
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 return ;
8689}
Jeff Johnson295189b2012-06-20 16:38:30 -07008690/*
8691 * FUNCTION: WDA_ProcessFlushAcReq
8692 * Request to WDI to Update the DELBA REQ params.
8693 */
8694VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8695 tFlushACReq *pFlushAcReqParams)
8696{
8697 WDI_Status status = WDI_STATUS_SUCCESS ;
8698 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8699 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8700 sizeof(WDI_FlushAcReqParamsType)) ;
8701 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 if(NULL == wdiFlushAcReqParam)
8703 {
8704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 VOS_ASSERT(0);
8707 return VOS_STATUS_E_NOMEM;
8708 }
8709 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8710 if(NULL == pWdaParams)
8711 {
8712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 VOS_ASSERT(0);
8715 vos_mem_free(wdiFlushAcReqParam);
8716 return VOS_STATUS_E_NOMEM;
8717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008719 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8721 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8722 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8723 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 /* Store Flush AC pointer, as this will be used for response */
8725 /* store Params pass it to WDI */
8726 pWdaParams->pWdaContext = pWDA;
8727 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8728 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8730 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 if(IS_WDI_STATUS_FAILURE(status))
8732 {
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8734 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8735 vos_mem_free(pWdaParams->wdaMsgParam) ;
8736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8737 vos_mem_free(pWdaParams) ;
8738 //TODO: respond to TL with failure
8739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008741}
Jeff Johnson295189b2012-06-20 16:38:30 -07008742/*
8743 * FUNCTION: WDA_BtAmpEventReqCallback
8744 *
8745 */
8746void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8747{
8748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8749 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008750 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008751
8752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008754 if(NULL == pWdaParams)
8755 {
8756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008757 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008758 VOS_ASSERT(0) ;
8759 return ;
8760 }
8761 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8762 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8763 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8764 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8765 {
8766 pWDA->wdaAmpSessionOn = VOS_FALSE;
8767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 vos_mem_free(pWdaParams->wdaMsgParam) ;
8769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8770 vos_mem_free(pWdaParams) ;
8771 /*
8772 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8773 * param here
8774 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 return ;
8776}
8777
Jeff Johnson295189b2012-06-20 16:38:30 -07008778/*
8779 * FUNCTION: WDA_ProcessBtAmpEventReq
8780 * Request to WDI to Update with BT AMP events.
8781 */
8782VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8783 tSmeBtAmpEvent *pBtAmpEventParams)
8784{
8785 WDI_Status status = WDI_STATUS_SUCCESS ;
8786 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8787 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8788 sizeof(WDI_BtAmpEventParamsType)) ;
8789 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 if(NULL == wdiBtAmpEventParam)
8793 {
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 VOS_ASSERT(0);
8797 return VOS_STATUS_E_NOMEM;
8798 }
8799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8800 if(NULL == pWdaParams)
8801 {
8802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 VOS_ASSERT(0);
8805 vos_mem_free(wdiBtAmpEventParam);
8806 return VOS_STATUS_E_NOMEM;
8807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008808 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8809 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 /* Store BT AMP event pointer, as this will be used for response */
8812 /* store Params pass it to WDI */
8813 pWdaParams->pWdaContext = pWDA;
8814 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8815 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8817 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 if(IS_WDI_STATUS_FAILURE(status))
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8821 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8822 vos_mem_free(pWdaParams->wdaMsgParam) ;
8823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8824 vos_mem_free(pWdaParams) ;
8825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8827 {
8828 pWDA->wdaAmpSessionOn = VOS_TRUE;
8829 }
8830 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008831}
8832
Jeff Johnson295189b2012-06-20 16:38:30 -07008833/*
8834 * FUNCTION: WDA_FTMCommandReqCallback
8835 * Handle FTM CMD response came from HAL
8836 * Route responce to HDD FTM
8837 */
8838void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8839 void *usrData)
8840{
8841 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8843 {
8844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008845 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 return;
8847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 /* Release Current FTM Command Request */
8849 vos_mem_free(pWDA->wdaFTMCmdReq);
8850 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 /* Post FTM Responce to HDD FTM */
8852 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 return;
8854}
Jeff Johnson295189b2012-06-20 16:38:30 -07008855/*
8856 * FUNCTION: WDA_ProcessFTMCommand
8857 * Send FTM command to WDI
8858 */
8859VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8860 tPttMsgbuffer *pPTTFtmCmd)
8861{
8862 WDI_Status status = WDI_STATUS_SUCCESS;
8863 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 ftmCMDReq = (WDI_FTMCommandReqType *)
8865 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8866 if(NULL == ftmCMDReq)
8867 {
8868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8869 "WDA FTM Command buffer alloc fail");
8870 return VOS_STATUS_E_NOMEM;
8871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8873 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 /* Send command to WDI */
8876 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 return status;
8878}
Jeff Johnsone7245742012-09-05 17:12:55 -07008879#ifdef FEATURE_OEM_DATA_SUPPORT
8880/*
8881 * FUNCTION: WDA_StartOemDataReqCallback
8882 *
8883 */
8884void WDA_StartOemDataReqCallback(
8885 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8886 void* pUserData)
8887{
8888 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8890 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008891 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008892
Jeff Johnsone7245742012-09-05 17:12:55 -07008893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008895
8896 if(NULL == pWdaParams)
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008899 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008900 VOS_ASSERT(0) ;
8901 return ;
8902 }
8903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8904
Jeff Johnsone7245742012-09-05 17:12:55 -07008905 if(NULL == pWDA)
8906 {
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008909 VOS_ASSERT(0);
8910 return ;
8911 }
8912
8913 /*
8914 * Allocate memory for response params sent to PE
8915 */
8916 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8917
8918 // Check if memory is allocated for OemdataMeasRsp Params.
8919 if(NULL == pOemDataRspParams)
8920 {
8921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8922 "OEM DATA WDA callback alloc fail");
8923 VOS_ASSERT(0) ;
8924 return;
8925 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008926
Jeff Johnsone7245742012-09-05 17:12:55 -07008927 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8929 vos_mem_free(pWdaParams->wdaMsgParam);
8930 vos_mem_free(pWdaParams) ;
8931
Jeff Johnsone7245742012-09-05 17:12:55 -07008932 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008933 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008934 * Also, here success always means that we have atleast one BSSID.
8935 */
8936 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8937
8938 //enable Tx
8939 status = WDA_ResumeDataTx(pWDA);
8940 if(status != VOS_STATUS_SUCCESS)
8941 {
8942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8943 }
8944 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8945 return ;
8946}
8947/*
8948 * FUNCTION: WDA_ProcessStartOemDataReq
8949 * Send Start Oem Data Req to WDI
8950 */
8951VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8952 tStartOemDataReq *pOemDataReqParams)
8953{
8954 WDI_Status status = WDI_STATUS_SUCCESS;
8955 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008956 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008957
8958 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8959
8960 if(NULL == wdiOemDataReqParams)
8961 {
8962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008964 VOS_ASSERT(0);
8965 return VOS_STATUS_E_NOMEM;
8966 }
8967
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008968 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8969 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8970 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8971 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008972
8973 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8974
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8976 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008977 {
8978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008980 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008981 vos_mem_free(pOemDataReqParams);
8982 VOS_ASSERT(0);
8983 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008984 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008985
Bernald44a1ae2013-01-09 08:30:39 -08008986 pWdaParams->pWdaContext = (void*)pWDA;
8987 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8988 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008989
8990 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8991 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008992
8993 if(IS_WDI_STATUS_FAILURE(status))
8994 {
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8996 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8998 vos_mem_free(pWdaParams->wdaMsgParam);
8999 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009000 }
9001 return CONVERT_WDI2VOS_STATUS(status) ;
9002}
9003#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009004/*
9005 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9006 *
9007 */
9008void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
9009{
9010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009012 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 if(NULL == pWdaParams)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009016 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 VOS_ASSERT(0) ;
9018 return ;
9019 }
9020
9021 if(NULL != pWdaParams->wdaMsgParam)
9022 {
9023 vos_mem_free(pWdaParams->wdaMsgParam);
9024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 if(NULL != pWdaParams->wdaWdiApiMsgParam)
9026 {
9027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9028 }
9029
9030 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 return ;
9032}
Jeff Johnson295189b2012-06-20 16:38:30 -07009033#ifdef WLAN_FEATURE_GTK_OFFLOAD
9034/*
9035 * FUNCTION: WDA_HostOffloadReqCallback
9036 *
9037 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009038void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
9039 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009040{
9041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9042
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009045
9046 VOS_ASSERT(NULL != pWdaParams);
9047
9048 vos_mem_free(pWdaParams->wdaMsgParam) ;
9049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9050 vos_mem_free(pWdaParams) ;
9051
9052 //print a msg, nothing else to do
9053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9054 "WDA_GTKOffloadReqCallback invoked " );
9055
9056 return ;
9057}
9058
9059/*
9060 * FUNCTION: WDA_ProcessGTKOffloadReq
9061 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9062 * to broadcast traffic (sta mode).
9063 */
9064VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9065 tpSirGtkOffloadParams pGtkOffloadParams)
9066{
9067 VOS_STATUS status = VOS_STATUS_SUCCESS;
9068 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9069 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9070 sizeof(WDI_GtkOffloadReqMsg)) ;
9071 tWDA_ReqParams *pWdaParams ;
9072
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009075
9076 if(NULL == wdiGtkOffloadReqMsg)
9077 {
9078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 VOS_ASSERT(0);
9081 return VOS_STATUS_E_NOMEM;
9082 }
9083
9084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9085 if(NULL == pWdaParams)
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 VOS_ASSERT(0);
9090 vos_mem_free(wdiGtkOffloadReqMsg);
9091 return VOS_STATUS_E_NOMEM;
9092 }
9093
9094 //
9095 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9096 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009097
9098 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
9099 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
9100
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9102 // Copy KCK
9103 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9104 // Copy KEK
9105 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9106 // Copy KeyReplayCounter
9107 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9108 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9109
9110 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
9111
9112 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9113 (NULL == pWDA->wdaWdiApiMsgParam));
9114
9115 /* Store Params pass it to WDI */
9116 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9117 pWdaParams->pWdaContext = pWDA;
9118 /* Store param pointer as passed in by caller */
9119 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9120
9121 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
9122
9123 if(IS_WDI_STATUS_FAILURE(status))
9124 {
9125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9126 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9128 vos_mem_free(pWdaParams->wdaMsgParam);
9129 vos_mem_free(pWdaParams);
9130 }
9131
9132 return CONVERT_WDI2VOS_STATUS(status) ;
9133}
9134
9135/*
9136 * FUNCTION: WDA_GtkOffloadGetInfoCallback
9137 *
9138 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009139void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
9140 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009141{
9142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9143 tWDA_CbContext *pWDA;
9144 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9145 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
9146 tANI_U8 i;
9147 vos_msg_t vosMsg;
9148
9149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009150 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009151
9152 VOS_ASSERT(NULL != pWdaParams);
9153
9154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9155 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9156
9157 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9158 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9159
9160 /* Message Header */
9161 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9162 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9163
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009164 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9165 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9166 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9167 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9168 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
9169 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170
9171 /* VOS message wrapper */
9172 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9173 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9174 vosMsg.bodyval = 0;
9175
9176 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9177 {
9178 /* free the mem and return */
9179 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9180 }
9181
9182 vos_mem_free(pWdaParams->wdaMsgParam) ;
9183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9184 vos_mem_free(pWdaParams) ;
9185}
9186#endif
9187
9188/*
9189 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
9190 * Request to WDI to set Tx Per Tracking configurations
9191 */
9192VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
9193{
9194 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009195 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
9197 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
9198 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
9199 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009201 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 if(NULL == pwdiSetTxPerTrackingReqParams)
9203 {
9204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 vos_mem_free(pTxPerTrackingParams);
9207 VOS_ASSERT(0);
9208 return VOS_STATUS_E_NOMEM;
9209 }
9210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9211 if(NULL == pWdaParams)
9212 {
9213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 vos_mem_free(pwdiSetTxPerTrackingReqParams);
9216 vos_mem_free(pTxPerTrackingParams);
9217 VOS_ASSERT(0);
9218 return VOS_STATUS_E_NOMEM;
9219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9221 pTxPerTrackingParams->ucTxPerTrackingEnable;
9222 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9223 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9224 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9225 pTxPerTrackingParams->ucTxPerTrackingRatio;
9226 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9227 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 /* Store param pointer as passed in by caller */
9230 /* store Params pass it to WDI
9231 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9232 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9233 pWdaParams->pWdaContext = pWDA;
9234 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009235 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009236 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009237 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9240 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009241 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 vos_mem_free(pWdaParams->wdaMsgParam) ;
9243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9244 vos_mem_free(pWdaParams) ;
9245 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009246 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247
9248}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009249/*
9250 * FUNCTION: WDA_HALDumpCmdCallback
9251 * Send the VOS complete .
9252 */
9253void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9254 void* pUserData)
9255{
9256 tANI_U8 *buffer = NULL;
9257 tWDA_CbContext *pWDA = NULL;
9258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 if(NULL == pWdaParams)
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009262 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 VOS_ASSERT(0) ;
9264 return ;
9265 }
9266
9267 pWDA = pWdaParams->pWdaContext;
9268 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 if(wdiRspParams->usBufferLen > 0)
9270 {
9271 /*Copy the Resp data to UMAC supplied buffer*/
9272 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9275 vos_mem_free(pWdaParams);
9276
9277 /* Indicate VOSS about the start complete */
9278 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 return ;
9280}
9281
Jeff Johnson295189b2012-06-20 16:38:30 -07009282/*
9283 * FUNCTION: WDA_ProcessHALDumpCmdReq
9284 * Send Dump command to WDI
9285 */
9286VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9287 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9288 tANI_U32 arg4, tANI_U8 *pBuffer)
9289{
9290 WDI_Status status = WDI_STATUS_SUCCESS;
9291 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9292 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9293 tWDA_ReqParams *pWdaParams ;
9294 pVosContextType pVosContext = NULL;
9295 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009296 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9297 (void *)pMac);
9298
9299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9300 if(NULL == pWdaParams)
9301 {
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 return VOS_STATUS_E_NOMEM;
9305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 /* Allocate memory WDI request structure*/
9307 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9308 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9309 if(NULL == wdiHALDumpCmdReqParam)
9310 {
9311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9312 "WDA HAL DUMP Command buffer alloc fail");
9313 vos_mem_free(pWdaParams);
9314 return WDI_STATUS_E_FAILURE;
9315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 /* Extract the arguments */
9318 wdiHalDumpCmdInfo->command = cmd;
9319 wdiHalDumpCmdInfo->argument1 = arg1;
9320 wdiHalDumpCmdInfo->argument2 = arg2;
9321 wdiHalDumpCmdInfo->argument3 = arg3;
9322 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9325
9326 /* Response message will be passed through the buffer */
9327 pWdaParams->wdaMsgParam = (void *)pBuffer;
9328
9329 /* store Params pass it to WDI */
9330 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 /* Send command to WDI */
9332 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009333 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 if ( vStatus != VOS_STATUS_SUCCESS )
9335 {
9336 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9337 {
9338 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009339 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 }
9341 else
9342 {
9343 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 }
9346 VOS_ASSERT(0);
9347 }
9348 return status;
9349}
Jeff Johnson295189b2012-06-20 16:38:30 -07009350#ifdef WLAN_FEATURE_GTK_OFFLOAD
9351/*
9352 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9353 * Request to WDI to get GTK Offload Information
9354 */
9355VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9356 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9357{
9358 VOS_STATUS status = VOS_STATUS_SUCCESS;
9359 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9360 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9361 tWDA_ReqParams *pWdaParams ;
9362
9363 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 VOS_ASSERT(0);
9368 return VOS_STATUS_E_NOMEM;
9369 }
9370
9371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9372 if(NULL == pWdaParams)
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 VOS_ASSERT(0);
9377 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9378 return VOS_STATUS_E_NOMEM;
9379 }
9380
9381 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9382
9383 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9384 (NULL == pWDA->wdaWdiApiMsgParam));
9385
9386 /* Store Params pass it to WDI */
9387 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9388 pWdaParams->pWdaContext = pWDA;
9389 /* Store param pointer as passed in by caller */
9390 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9391
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009392 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9393 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9394
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9396
9397 if(IS_WDI_STATUS_FAILURE(status))
9398 {
9399 /* failure returned by WDI API */
9400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9401 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9403 vos_mem_free(pWdaParams) ;
9404 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9405 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9406 }
9407
9408 return CONVERT_WDI2VOS_STATUS(status) ;
9409}
9410#endif // WLAN_FEATURE_GTK_OFFLOAD
9411
9412/*
9413 * -------------------------------------------------------------------------
9414 * DATA interface with WDI for Mgmt Frames
9415 * -------------------------------------------------------------------------
9416 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009417/*
9418 * FUNCTION: WDA_TxComplete
9419 * Callback function for the WDA_TxPacket
9420 */
9421VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9422 VOS_STATUS status )
9423{
9424
9425 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9426 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009427 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009428
9429 if(NULL == wdaContext)
9430 {
9431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9432 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009433 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 VOS_ASSERT(0);
9435 return VOS_STATUS_E_FAILURE;
9436 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009437
9438 /*Check if frame was timed out or not*/
9439 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9440 (v_PVOID_t)&uUserData);
9441
9442 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9443 {
9444 /*Discard frame - no further processing is needed*/
9445 vos_pkt_return_packet(pData);
9446 return VOS_STATUS_SUCCESS;
9447 }
9448
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9450 if( NULL!=wdaContext->pTxCbFunc)
9451 {
9452 /*check if packet is freed already*/
9453 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9454 {
9455 wdaContext->pTxCbFunc(pMac, pData);
9456 }
9457 else
9458 {
9459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9460 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009461 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 //Return from here since we reaching here because the packet already timeout
9463 return status;
9464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 }
9466
9467 /*
9468 * Trigger the event to bring the HAL TL Tx complete function to come
9469 * out of wait
9470 * Let the coe above to complete the packet first. When this event is set,
9471 * the thread waiting for the event may run and set Vospacket_freed causing the original
9472 * packet not being freed.
9473 */
9474 status = vos_event_set(&wdaContext->txFrameEvent);
9475 if(!VOS_IS_STATUS_SUCCESS(status))
9476 {
9477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9478 "NEW VOS Event Set failed - status = %d \n", status);
9479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009480 return status;
9481}
Jeff Johnson295189b2012-06-20 16:38:30 -07009482/*
9483 * FUNCTION: WDA_TxPacket
9484 * Forward TX management frame to WDI
9485 */
9486VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9487 void *pFrmBuf,
9488 tANI_U16 frmLen,
9489 eFrameType frmType,
9490 eFrameTxDir txDir,
9491 tANI_U8 tid,
9492 pWDATxRxCompFunc pCompFunc,
9493 void *pData,
9494 pWDAAckFnTxComp pAckTxComp,
9495 tANI_U8 txFlag)
9496{
9497 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9498 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9499 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9500 tANI_U8 eventIdx = 0;
9501 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9502 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 if((NULL == pWDA)||(NULL == pFrmBuf))
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9506 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009507 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 VOS_ASSERT(0);
9509 return VOS_STATUS_E_FAILURE;
9510 }
9511
9512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9513 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9515 if(NULL == pMac)
9516 {
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009518 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 VOS_ASSERT(0);
9520 return VOS_STATUS_E_FAILURE;
9521 }
9522
9523
9524
9525 /* store the call back function in WDA context */
9526 pWDA->pTxCbFunc = pCompFunc;
9527 /* store the call back for the function of ackTxComplete */
9528 if( pAckTxComp )
9529 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009530 if( NULL != pWDA->pAckTxCbFunc )
9531 {
9532 /* Already TxComp is active no need to active again */
9533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9534 "There is already one request pending for tx complete\n");
9535 pWDA->pAckTxCbFunc( pMac, 0);
9536 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009537
Jeff Johnsone7245742012-09-05 17:12:55 -07009538 if( VOS_STATUS_SUCCESS !=
9539 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9542 "Tx Complete timeout Timer Stop Failed ");
9543 }
9544 else
9545 {
9546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009547 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009548 }
9549 }
9550
9551 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9552 pWDA->pAckTxCbFunc = pAckTxComp;
9553 if( VOS_STATUS_SUCCESS !=
9554 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9557 "Tx Complete Timer Start Failed ");
9558 pWDA->pAckTxCbFunc = NULL;
9559 return eHAL_STATUS_FAILURE;
9560 }
9561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 /* Reset the event to be not signalled */
9563 status = vos_event_reset(&pWDA->txFrameEvent);
9564 if(!VOS_IS_STATUS_SUCCESS(status))
9565 {
9566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9567 "VOS Event reset failed - status = %d\n",status);
9568 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9569 if( pAckTxComp )
9570 {
9571 pWDA->pAckTxCbFunc = NULL;
9572 if( VOS_STATUS_SUCCESS !=
9573 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9574 {
9575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9576 "Tx Complete timeout Timer Stop Failed ");
9577 }
9578 }
9579 return VOS_STATUS_E_FAILURE;
9580 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009581
9582 /* If Peer Sta mask is set don't overwrite to self sta */
9583 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009585 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009587 else
9588 {
Ganesh K08bce952012-12-13 15:04:41 -08009589 /* Get system role, use the self station if in unknown role or STA role */
9590 systemRole = wdaGetGlobalSystemRole(pMac);
9591 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9592 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009593#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009594 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009595#endif
Ganesh K08bce952012-12-13 15:04:41 -08009596 ))
9597 {
9598 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9599 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009601
Jeff Johnsone7245742012-09-05 17:12:55 -07009602 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9603 disassoc frame reaches the HW, HAL has already deleted the peer station */
9604 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009606 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009607 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 /*Send Probe request frames on self sta idx*/
9610 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 /* Since we donot want probe responses to be retried, send probe responses
9613 through the NO_ACK queues */
9614 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9615 {
9616 //probe response is sent out using self station and no retries options.
9617 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9618 }
9619 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9620 {
9621 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9622 }
9623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9625
9626 /*Set frame tag to 0
9627 We will use the WDA user data in order to tag a frame as expired*/
9628 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9629 (v_PVOID_t)0);
9630
9631
9632 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9633 frmLen, ucTypeSubType, tid,
9634 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9635 {
9636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9637 "Sending Mgmt Frame failed - status = %d\n", status);
9638 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9639 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9640 if( pAckTxComp )
9641 {
9642 pWDA->pAckTxCbFunc = NULL;
9643 if( VOS_STATUS_SUCCESS !=
9644 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9645 {
9646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9647 "Tx Complete timeout Timer Stop Failed ");
9648 }
9649 }
9650 return VOS_STATUS_E_FAILURE;
9651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 /*
9653 * Wait for the event to be set by the TL, to get the response of TX
9654 * complete, this event should be set by the Callback function called by TL
9655 */
9656 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9657 &eventIdx);
9658 if(!VOS_IS_STATUS_SUCCESS(status))
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9661 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009662 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9664 after the packet gets completed(packet freed once)*/
9665
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009666 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -07009667 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009668
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009669 /*Tag Frame as timed out for later deletion*/
9670 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9671 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9672
Jeff Johnson295189b2012-06-20 16:38:30 -07009673 /* check whether the packet was freed already,so need not free again when
9674 * TL calls the WDA_Txcomplete routine
9675 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009676 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9677 /*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 -07009678 {
9679 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009680 } */
9681
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 if( pAckTxComp )
9683 {
9684 pWDA->pAckTxCbFunc = NULL;
9685 if( VOS_STATUS_SUCCESS !=
9686 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9687 {
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9689 "Tx Complete timeout Timer Stop Failed ");
9690 }
9691 }
9692 status = VOS_STATUS_E_FAILURE;
9693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 return status;
9695}
Jeff Johnson295189b2012-06-20 16:38:30 -07009696/*
9697 * FUNCTION: WDA_McProcessMsg
9698 * Trigger DAL-AL to start CFG download
9699 */
9700VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9701{
9702 VOS_STATUS status = VOS_STATUS_SUCCESS;
9703 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 if(NULL == pMsg)
9705 {
9706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009707 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009708 VOS_ASSERT(0);
9709 return VOS_STATUS_E_FAILURE;
9710 }
9711
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009713 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009714
9715 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9716 if(NULL == pWDA )
9717 {
9718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009719 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009721 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 return VOS_STATUS_E_FAILURE;
9723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 /* Process all the WDA messages.. */
9725 switch( pMsg->type )
9726 {
9727 case WNI_CFG_DNLD_REQ:
9728 {
9729 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 /* call WDA complete event if config download success */
9731 if( VOS_IS_STATUS_SUCCESS(status) )
9732 {
9733 vos_WDAComplete_cback(pVosContext);
9734 }
9735 else
9736 {
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9738 "WDA Config Download failure" );
9739 }
9740 break ;
9741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 /*
9743 * Init SCAN request from PE, convert it into DAL format
9744 * and send it to DAL
9745 */
9746 case WDA_INIT_SCAN_REQ:
9747 {
9748 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9749 break ;
9750 }
9751 /* start SCAN request from PE */
9752 case WDA_START_SCAN_REQ:
9753 {
9754 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9755 break ;
9756 }
9757 /* end SCAN request from PE */
9758 case WDA_END_SCAN_REQ:
9759 {
9760 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9761 break ;
9762 }
9763 /* end SCAN request from PE */
9764 case WDA_FINISH_SCAN_REQ:
9765 {
9766 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9767 break ;
9768 }
9769 /* join request from PE */
9770 case WDA_CHNL_SWITCH_REQ:
9771 {
9772 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9773 {
9774 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9775 }
9776 else
9777 {
9778 WDA_ProcessChannelSwitchReq(pWDA,
9779 (tSwitchChannelParams*)pMsg->bodyptr) ;
9780 }
9781 break ;
9782 }
9783 /* ADD BSS request from PE */
9784 case WDA_ADD_BSS_REQ:
9785 {
9786 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9787 break ;
9788 }
9789 case WDA_ADD_STA_REQ:
9790 {
9791 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9792 break ;
9793 }
9794 case WDA_DELETE_BSS_REQ:
9795 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9797 break ;
9798 }
9799 case WDA_DELETE_STA_REQ:
9800 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9802 break ;
9803 }
9804 case WDA_CONFIG_PARAM_UPDATE_REQ:
9805 {
9806 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9807 break ;
9808 }
9809 case WDA_SET_BSSKEY_REQ:
9810 {
9811 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9812 break ;
9813 }
9814 case WDA_SET_STAKEY_REQ:
9815 {
9816 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9817 break ;
9818 }
9819 case WDA_SET_STA_BCASTKEY_REQ:
9820 {
9821 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9822 break ;
9823 }
9824 case WDA_REMOVE_BSSKEY_REQ:
9825 {
9826 WDA_ProcessRemoveBssKeyReq(pWDA,
9827 (tRemoveBssKeyParams *)pMsg->bodyptr);
9828 break ;
9829 }
9830 case WDA_REMOVE_STAKEY_REQ:
9831 {
9832 WDA_ProcessRemoveStaKeyReq(pWDA,
9833 (tRemoveStaKeyParams *)pMsg->bodyptr);
9834 break ;
9835 }
9836 case WDA_REMOVE_STA_BCASTKEY_REQ:
9837 {
9838 /* TODO: currently UMAC is not sending this request, Add the code for
9839 handling this request when UMAC supports */
9840 break;
9841 }
9842#ifdef FEATURE_WLAN_CCX
9843 case WDA_TSM_STATS_REQ:
9844 {
9845 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9846 break;
9847 }
9848#endif
9849 case WDA_UPDATE_EDCA_PROFILE_IND:
9850 {
9851 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9852 break;
9853 }
9854 case WDA_ADD_TS_REQ:
9855 {
9856 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9857 break;
9858 }
9859 case WDA_DEL_TS_REQ:
9860 {
9861 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9862 break;
9863 }
9864 case WDA_ADDBA_REQ:
9865 {
9866 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9867 break;
9868 }
9869 case WDA_DELBA_IND:
9870 {
9871 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9872 break;
9873 }
9874 case WDA_SET_LINK_STATE:
9875 {
9876 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9877 break;
9878 }
9879 case WDA_GET_STATISTICS_REQ:
9880 {
9881 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9882 break;
9883 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08009884#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
9885 case WDA_GET_ROAM_RSSI_REQ:
9886 {
9887 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
9888 break;
9889 }
9890#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 case WDA_PWR_SAVE_CFG:
9892 {
9893 if(pWDA->wdaState == WDA_READY_STATE)
9894 {
9895 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9896 }
9897 else
9898 {
9899 if(NULL != pMsg->bodyptr)
9900 {
9901 vos_mem_free(pMsg->bodyptr);
9902 }
9903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9904 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9905 }
9906 break;
9907 }
9908 case WDA_ENTER_IMPS_REQ:
9909 {
9910 if(pWDA->wdaState == WDA_READY_STATE)
9911 {
9912 WDA_ProcessEnterImpsReq(pWDA);
9913 }
9914 else
9915 {
9916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9917 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9918 }
9919 break;
9920 }
9921 case WDA_EXIT_IMPS_REQ:
9922 {
9923 if(pWDA->wdaState == WDA_READY_STATE)
9924 {
9925 WDA_ProcessExitImpsReq(pWDA);
9926 }
9927 else
9928 {
9929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9930 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9931 }
9932 break;
9933 }
9934 case WDA_ENTER_BMPS_REQ:
9935 {
9936 if(pWDA->wdaState == WDA_READY_STATE)
9937 {
9938 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9939 }
9940 else
9941 {
9942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9943 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9944 }
9945 break;
9946 }
9947 case WDA_EXIT_BMPS_REQ:
9948 {
9949 if(pWDA->wdaState == WDA_READY_STATE)
9950 {
9951 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9952 }
9953 else
9954 {
9955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9956 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9957 }
9958 break;
9959 }
9960 case WDA_ENTER_UAPSD_REQ:
9961 {
9962 if(pWDA->wdaState == WDA_READY_STATE)
9963 {
9964 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9965 }
9966 else
9967 {
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9969 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9970 }
9971 break;
9972 }
9973 case WDA_EXIT_UAPSD_REQ:
9974 {
9975 if(pWDA->wdaState == WDA_READY_STATE)
9976 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009977 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 }
9979 else
9980 {
9981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9982 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9983 }
9984 break;
9985 }
9986 case WDA_UPDATE_UAPSD_IND:
9987 {
9988 if(pWDA->wdaState == WDA_READY_STATE)
9989 {
9990 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9991 }
9992 else
9993 {
9994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9995 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9996 }
9997 break;
9998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 case WDA_REGISTER_PE_CALLBACK :
10000 {
10001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10002 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10003 /*TODO: store the PE callback */
10004 /* Do Nothing? MSG Body should be freed at here */
10005 if(NULL != pMsg->bodyptr)
10006 {
10007 vos_mem_free(pMsg->bodyptr);
10008 }
10009 break;
10010 }
10011 case WDA_SYS_READY_IND :
10012 {
10013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10014 "Handling msg type WDA_SYS_READY_IND " );
10015 pWDA->wdaState = WDA_READY_STATE;
10016 if(NULL != pMsg->bodyptr)
10017 {
10018 vos_mem_free(pMsg->bodyptr);
10019 }
10020 break;
10021 }
10022 case WDA_BEACON_FILTER_IND :
10023 {
10024 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10025 break;
10026 }
10027 case WDA_BTC_SET_CFG:
10028 {
10029 /*TODO: handle this while dealing with BTC */
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10031 "Handling msg type WDA_BTC_SET_CFG " );
10032 /* Do Nothing? MSG Body should be freed at here */
10033 if(NULL != pMsg->bodyptr)
10034 {
10035 vos_mem_free(pMsg->bodyptr);
10036 }
10037 break;
10038 }
10039 case WDA_SIGNAL_BT_EVENT:
10040 {
10041 /*TODO: handle this while dealing with BTC */
10042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10043 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10044 /* Do Nothing? MSG Body should be freed at here */
10045 if(NULL != pMsg->bodyptr)
10046 {
10047 vos_mem_free(pMsg->bodyptr);
10048 }
10049 break;
10050 }
10051 case WDA_CFG_RXP_FILTER_REQ:
10052 {
10053 WDA_ProcessConfigureRxpFilterReq(pWDA,
10054 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10055 break;
10056 }
10057 case WDA_SET_HOST_OFFLOAD:
10058 {
10059 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10060 break;
10061 }
10062 case WDA_SET_KEEP_ALIVE:
10063 {
10064 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10065 break;
10066 }
10067#ifdef WLAN_NS_OFFLOAD
10068 case WDA_SET_NS_OFFLOAD:
10069 {
10070 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10071 break;
10072 }
10073#endif //WLAN_NS_OFFLOAD
10074 case WDA_ADD_STA_SELF_REQ:
10075 {
10076 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10077 break;
10078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 case WDA_DEL_STA_SELF_REQ:
10080 {
10081 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10082 break;
10083 }
10084 case WDA_WOWL_ADD_BCAST_PTRN:
10085 {
10086 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10087 break;
10088 }
10089 case WDA_WOWL_DEL_BCAST_PTRN:
10090 {
10091 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10092 break;
10093 }
10094 case WDA_WOWL_ENTER_REQ:
10095 {
10096 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10097 break;
10098 }
10099 case WDA_WOWL_EXIT_REQ:
10100 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010101 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 break;
10103 }
10104 case WDA_TL_FLUSH_AC_REQ:
10105 {
10106 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10107 break;
10108 }
10109 case WDA_SIGNAL_BTAMP_EVENT:
10110 {
10111 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10112 break;
10113 }
10114#ifdef WDA_UT
10115 case WDA_WDI_EVENT_MSG:
10116 {
10117 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10118 break ;
10119 }
10120#endif
10121 case WDA_UPDATE_BEACON_IND:
10122 {
10123 WDA_ProcessUpdateBeaconParams(pWDA,
10124 (tUpdateBeaconParams *)pMsg->bodyptr);
10125 break;
10126 }
10127 case WDA_SEND_BEACON_REQ:
10128 {
10129 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10130 break;
10131 }
10132 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10133 {
10134 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10135 (tSendProbeRespParams *)pMsg->bodyptr);
10136 break;
10137 }
10138#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10139 case WDA_SET_MAX_TX_POWER_REQ:
10140 {
10141 WDA_ProcessSetMaxTxPowerReq(pWDA,
10142 (tMaxTxPowerParams *)pMsg->bodyptr);
10143 break;
10144 }
10145#endif
schang86c22c42013-03-13 18:41:24 -070010146 case WDA_SET_TX_POWER_REQ:
10147 {
10148 WDA_ProcessSetTxPowerReq(pWDA,
10149 (tSirSetTxPowerReq *)pMsg->bodyptr);
10150 break;
10151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 case WDA_SET_P2P_GO_NOA_REQ:
10153 {
10154 WDA_ProcessSetP2PGONOAReq(pWDA,
10155 (tP2pPsParams *)pMsg->bodyptr);
10156 break;
10157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010158 /* timer related messages */
10159 case WDA_TIMER_BA_ACTIVITY_REQ:
10160 {
10161 WDA_BaCheckActivity(pWDA) ;
10162 break ;
10163 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010164
10165 /* timer related messages */
10166 case WDA_TIMER_TRAFFIC_STATS_IND:
10167 {
10168 WDA_TimerTrafficStatsInd(pWDA);
10169 break;
10170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010171#ifdef WLAN_FEATURE_VOWIFI_11R
10172 case WDA_AGGR_QOS_REQ:
10173 {
10174 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
10175 break;
10176 }
10177#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 case WDA_FTM_CMD_REQ:
10179 {
10180 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
10181 break ;
10182 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010183#ifdef FEATURE_OEM_DATA_SUPPORT
10184 case WDA_START_OEM_DATA_REQ:
10185 {
10186 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
10187 break;
10188 }
10189#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 /* Tx Complete Time out Indication */
10191 case WDA_TX_COMPLETE_TIMEOUT_IND:
10192 {
10193 WDA_ProcessTxCompleteTimeOutInd(pWDA);
10194 break;
10195 }
10196 case WDA_WLAN_SUSPEND_IND:
10197 {
10198 WDA_ProcessWlanSuspendInd(pWDA,
10199 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
10200 break;
10201 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 case WDA_WLAN_RESUME_REQ:
10203 {
10204 WDA_ProcessWlanResumeReq(pWDA,
10205 (tSirWlanResumeParam *)pMsg->bodyptr) ;
10206 break;
10207 }
10208
10209 case WDA_UPDATE_CF_IND:
10210 {
10211 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
10212 pMsg->bodyptr = NULL;
10213 break;
10214 }
10215#ifdef FEATURE_WLAN_SCAN_PNO
10216 case WDA_SET_PNO_REQ:
10217 {
10218 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
10219 break;
10220 }
10221 case WDA_UPDATE_SCAN_PARAMS_REQ:
10222 {
10223 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
10224 break;
10225 }
10226 case WDA_SET_RSSI_FILTER_REQ:
10227 {
10228 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10229 break;
10230 }
10231#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 case WDA_SET_TX_PER_TRACKING_REQ:
10233 {
10234 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10235 break;
10236 }
10237
10238#ifdef WLAN_FEATURE_PACKET_FILTERING
10239 case WDA_8023_MULTICAST_LIST_REQ:
10240 {
10241 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10242 break;
10243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10245 {
10246 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10247 break;
10248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10250 {
10251 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10252 break;
10253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10255 {
10256 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10257 break;
10258 }
10259#endif // WLAN_FEATURE_PACKET_FILTERING
10260
10261
10262 case WDA_TRANSMISSION_CONTROL_IND:
10263 {
10264 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10265 break;
10266 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 case WDA_SET_POWER_PARAMS_REQ:
10268 {
10269 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10270 break;
10271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010272#ifdef WLAN_FEATURE_GTK_OFFLOAD
10273 case WDA_GTK_OFFLOAD_REQ:
10274 {
10275 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10276 break;
10277 }
10278
10279 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10280 {
10281 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10282 break;
10283 }
10284#endif //WLAN_FEATURE_GTK_OFFLOAD
10285
10286 case WDA_SET_TM_LEVEL_REQ:
10287 {
10288 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10289 break;
10290 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010291#ifdef WLAN_FEATURE_11AC
10292 case WDA_UPDATE_OP_MODE:
10293 {
10294 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10295 {
10296 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10297 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10298 else
10299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10300 " VHT OpMode Feature is Not Supported \n");
10301 }
10302 else
10303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 " 11AC Feature is Not Supported \n");
10305 break;
10306 }
10307#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070010308#ifdef WLAN_FEATURE_11W
10309 case WDA_EXCLUDE_UNENCRYPTED_IND:
10310 {
10311 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
10312 break;
10313 }
10314#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 default:
10316 {
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10318 "No Handling for msg type %x in WDA "
10319 ,pMsg->type);
10320 /* Do Nothing? MSG Body should be freed at here */
10321 if(NULL != pMsg->bodyptr)
10322 {
10323 vos_mem_free(pMsg->bodyptr);
10324 }
10325 //WDA_VOS_ASSERT(0) ;
10326 }
10327 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 return status ;
10329}
10330
Jeff Johnson295189b2012-06-20 16:38:30 -070010331/*
10332 * FUNCTION: WDA_LowLevelIndCallback
10333 * IND API callback from WDI, send Ind to PE
10334 */
10335void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10336 void* pUserData )
10337{
10338 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10339#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10340 tSirRSSINotification rssiNotification;
10341#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 if(NULL == pWDA)
10343 {
10344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010345 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 VOS_ASSERT(0);
10347 return ;
10348 }
10349
10350 switch(wdiLowLevelInd->wdiIndicationType)
10351 {
10352 case WDI_RSSI_NOTIFICATION_IND:
10353 {
10354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10355 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010356#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10357 rssiNotification.bReserved =
10358 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10359 rssiNotification.bRssiThres1NegCross =
10360 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10361 rssiNotification.bRssiThres1PosCross =
10362 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10363 rssiNotification.bRssiThres2NegCross =
10364 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10365 rssiNotification.bRssiThres2PosCross =
10366 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10367 rssiNotification.bRssiThres3NegCross =
10368 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10369 rssiNotification.bRssiThres3PosCross =
10370 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010371 rssiNotification.avgRssi = (v_S7_t)
10372 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 WLANTL_BMPSRSSIRegionChangedNotification(
10374 pWDA->pVosContext,
10375 &rssiNotification);
10376#endif
10377 break ;
10378 }
10379 case WDI_MISSED_BEACON_IND:
10380 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010381 tpSirSmeMissedBeaconInd pMissBeacInd =
10382 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10384 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010386 if(NULL == pMissBeacInd)
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10389 "%s: VOS MEM Alloc Failure", __func__);
10390 break;
10391 }
10392 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10393 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10394 pMissBeacInd->bssIdx =
10395 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10396 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 break ;
10398 }
10399 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10400 {
10401 /* TODO: Decode Ind and send Ind to PE */
10402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10403 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10404 break ;
10405 }
10406
10407 case WDI_MIC_FAILURE_IND:
10408 {
10409 tpSirSmeMicFailureInd pMicInd =
10410 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10411
10412 if(NULL == pMicInd)
10413 {
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 break;
10417 }
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10419 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10421 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10422 vos_mem_copy(pMicInd->bssId,
10423 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10424 sizeof(tSirMacAddr));
10425 vos_mem_copy(pMicInd->info.srcMacAddr,
10426 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10427 sizeof(tSirMacAddr));
10428 vos_mem_copy(pMicInd->info.taMacAddr,
10429 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10430 sizeof(tSirMacAddr));
10431 vos_mem_copy(pMicInd->info.dstMacAddr,
10432 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10433 sizeof(tSirMacAddr));
10434 vos_mem_copy(pMicInd->info.rxMacAddr,
10435 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10436 sizeof(tSirMacAddr));
10437 pMicInd->info.multicast =
10438 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10439 pMicInd->info.keyId=
10440 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10441 pMicInd->info.IV1=
10442 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10443 vos_mem_copy(pMicInd->info.TSC,
10444 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10446 (void *)pMicInd , 0) ;
10447 break ;
10448 }
10449 case WDI_FATAL_ERROR_IND:
10450 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010451 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 /* TODO: Decode Ind and send Ind to PE */
10453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10454 "Received WDI_FATAL_ERROR_IND from WDI ");
10455 break ;
10456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 case WDI_DEL_STA_IND:
10458 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010459 tpDeleteStaContext pDelSTACtx =
10460 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10461
10462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10463 "Received WDI_DEL_STA_IND from WDI ");
10464 if(NULL == pDelSTACtx)
10465 {
10466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 break;
10469 }
10470 vos_mem_copy(pDelSTACtx->addr2,
10471 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10472 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 vos_mem_copy(pDelSTACtx->bssId,
10474 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10475 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010476 pDelSTACtx->assocId =
10477 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10478 pDelSTACtx->reasonCode =
10479 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10480 pDelSTACtx->staId =
10481 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10483 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 break ;
10485 }
10486 case WDI_COEX_IND:
10487 {
10488 tANI_U32 index;
10489 vos_msg_t vosMsg;
10490 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10491 if(NULL == pSmeCoexInd)
10492 {
10493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010494 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 break;
10496 }
10497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10498 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 /* Message Header */
10500 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10501 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010502 /* Info from WDI Indication */
10503 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10504 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10505 {
10506 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010508 /* VOS message wrapper */
10509 vosMsg.type = eWNI_SME_COEX_IND;
10510 vosMsg.bodyptr = (void *)pSmeCoexInd;
10511 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 /* Send message to SME */
10513 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10514 {
10515 /* free the mem and return */
10516 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10517 }
10518 else
10519 {
10520 /* DEBUG */
10521 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10522 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10523 pSmeCoexInd->coexIndType,
10524 pSmeCoexInd->coexIndData[0],
10525 pSmeCoexInd->coexIndData[1],
10526 pSmeCoexInd->coexIndData[2],
10527 pSmeCoexInd->coexIndData[3]);
10528 }
10529 break;
10530 }
10531 case WDI_TX_COMPLETE_IND:
10532 {
10533 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10534 /* Calling TxCompleteAck Indication from wda context*/
10535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10536 "Complete Indication received from HAL");
10537 if( pWDA->pAckTxCbFunc )
10538 {
10539 if( VOS_STATUS_SUCCESS !=
10540 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10541 {
10542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10543 "Tx Complete timeout Timer Stop Failed ");
10544 }
10545 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10546 pWDA->pAckTxCbFunc = NULL;
10547 }
10548 else
10549 {
10550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10551 "Tx Complete Indication is received after timeout ");
10552 }
10553 break;
10554 }
Viral Modid86bde22012-12-10 13:09:21 -080010555 case WDI_P2P_NOA_START_IND :
10556 {
10557 tSirP2PNoaStart *pP2pNoaStart =
10558 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10559
10560 if (NULL == pP2pNoaStart)
10561 {
10562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10563 "Memory allocation failure, "
10564 "WDI_P2P_NOA_START_IND not forwarded");
10565 break;
10566 }
10567 pP2pNoaStart->status =
10568 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10569 pP2pNoaStart->bssIdx =
10570 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10571 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10572 (void *)pP2pNoaStart , 0) ;
10573 break;
10574 }
10575
Jeff Johnson295189b2012-06-20 16:38:30 -070010576 case WDI_P2P_NOA_ATTR_IND :
10577 {
10578 tSirP2PNoaAttr *pP2pNoaAttr =
10579 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10581 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 if (NULL == pP2pNoaAttr)
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10585 "Memory allocation failure, "
10586 "WDI_P2P_NOA_ATTR_IND not forwarded");
10587 break;
10588 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 pP2pNoaAttr->index =
10590 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10591 pP2pNoaAttr->oppPsFlag =
10592 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10593 pP2pNoaAttr->ctWin =
10594 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10595
10596 pP2pNoaAttr->uNoa1IntervalCnt =
10597 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10598 pP2pNoaAttr->uNoa1Duration =
10599 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10600 pP2pNoaAttr->uNoa1Interval =
10601 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10602 pP2pNoaAttr->uNoa1StartTime =
10603 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 pP2pNoaAttr->uNoa2IntervalCnt =
10605 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10606 pP2pNoaAttr->uNoa2Duration =
10607 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10608 pP2pNoaAttr->uNoa2Interval =
10609 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10610 pP2pNoaAttr->uNoa2StartTime =
10611 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10613 (void *)pP2pNoaAttr , 0) ;
10614 break;
10615 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010616#ifdef FEATURE_WLAN_SCAN_PNO
10617 case WDI_PREF_NETWORK_FOUND_IND:
10618 {
10619 vos_msg_t vosMsg;
10620 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10622 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010623 if (NULL == pPrefNetworkFoundInd)
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10626 "Memory allocation failure, "
10627 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10628 break;
10629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 /* Message Header */
10631 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10632 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10633
10634 /* Info from WDI Indication */
10635 pPrefNetworkFoundInd->ssId.length =
10636 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010637 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10639 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10640 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 /* VOS message wrapper */
10643 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10644 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10645 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 /* Send message to SME */
10647 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10648 {
10649 /* free the mem and return */
10650 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 break;
10653 }
10654#endif // FEATURE_WLAN_SCAN_PNO
10655
10656#ifdef WLAN_WAKEUP_EVENTS
10657 case WDI_WAKE_REASON_IND:
10658 {
10659 vos_msg_t vosMsg;
10660 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10661 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10662 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10663
10664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10665 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10666 wdiLowLevelInd->wdiIndicationType,
10667 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10668 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10669 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10670
10671 if (NULL == pWakeReasonInd)
10672 {
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10674 "Memory allocation failure, "
10675 "WDI_WAKE_REASON_IND not forwarded");
10676 break;
10677 }
10678
10679 vos_mem_zero(pWakeReasonInd, allocSize);
10680
10681 /* Message Header */
10682 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10683 pWakeReasonInd->mesgLen = allocSize;
10684
10685 /* Info from WDI Indication */
10686 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10687 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10688 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10689 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10690 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10691 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10692 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10693 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10694
10695 /* VOS message wrapper */
10696 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10697 vosMsg.bodyptr = (void *) pWakeReasonInd;
10698 vosMsg.bodyval = 0;
10699
10700 /* Send message to SME */
10701 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10702 {
10703 /* free the mem and return */
10704 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10705 }
10706
10707 break;
10708 }
10709#endif // WLAN_WAKEUP_EVENTS
10710
10711 case WDI_TX_PER_HIT_IND:
10712 {
10713 vos_msg_t vosMsg;
10714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10715 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10716 /* VOS message wrapper */
10717 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10718 vosMsg.bodyptr = NULL;
10719 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 /* Send message to SME */
10721 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10722 {
10723 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10724 }
10725 break;
10726 }
10727
10728 default:
10729 {
10730 /* TODO error */
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10732 "Received UNKNOWN Indication from WDI ");
10733 }
10734 }
10735 return ;
10736}
10737
Jeff Johnson295189b2012-06-20 16:38:30 -070010738/*
10739 * BA related processing in WDA.
10740 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010741void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10742 void* pUserData)
10743{
10744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10745 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 if(NULL == pWdaParams)
10747 {
10748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 VOS_ASSERT(0) ;
10751 return ;
10752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 vos_mem_free(pWdaParams->wdaMsgParam) ;
10755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10756 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10760 {
10761 tANI_U8 i = 0 ;
10762 tBaActivityInd *baActivityInd = NULL ;
10763 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10764 tANI_U8 allocSize = sizeof(tBaActivityInd)
10765 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10766 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10767 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 if(NULL == baActivityInd)
10770 {
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 VOS_ASSERT(0) ;
10774 return;
10775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10777 sizeof(tSirMacAddr)) ;
10778 baActivityInd->baCandidateCnt = baCandidateCount ;
10779
10780 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10781 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10782
10783 for(i = 0 ; i < baCandidateCount ; i++)
10784 {
10785 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10787 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10789 {
10790 baCandidate->baInfo[tid].fBaEnable =
10791 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10792 baCandidate->baInfo[tid].startingSeqNum =
10793 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10794 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010795 wdiBaCandidate++ ;
10796 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10799 }
10800 else
10801 {
10802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10803 "BA Trigger RSP with Failure received ");
10804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010805 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010806}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010807
10808
10809/*
10810 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10811 * during MCC
10812 */
10813void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10814{
10815 wpt_uint32 enabled;
10816 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10817 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10818 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10819
10820 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10821 != eSIR_SUCCESS)
10822 {
10823 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10824 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10825 return;
10826 }
10827
10828 if(!enabled)
10829 {
10830 return;
10831 }
10832
10833 if(NULL == pWDA)
10834 {
10835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10836 "%s:WDA context is NULL", __func__);
10837 VOS_ASSERT(0);
10838 return;
10839 }
10840
10841 if(activate)
10842 {
10843 if( VOS_STATUS_SUCCESS !=
10844 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10845 {
10846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10847 "Traffic Stats Timer Start Failed ");
10848 return;
10849 }
10850 WDI_DS_ActivateTrafficStats();
10851 }
10852 else
10853 {
10854 WDI_DS_DeactivateTrafficStats();
10855 WDI_DS_ClearTrafficStats();
10856
10857 if( VOS_STATUS_SUCCESS !=
10858 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10859 {
10860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10861 "Traffic Stats Timer Stop Failed ");
10862 return;
10863 }
10864 }
10865}
10866
10867/*
10868 * Traffic Stats Timer handler
10869 */
10870void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10871{
10872 WDI_Status wdiStatus;
10873 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10874 WDI_TrafficStatsIndType trafficStatsIndParams;
10875 wpt_uint32 length, enabled;
10876 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10877
10878 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10879 != eSIR_SUCCESS)
10880 {
10881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10882 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10883 return;
10884 }
10885
10886 if(!enabled)
10887 {
10888 WDI_DS_DeactivateTrafficStats();
10889 return;
10890 }
10891
10892 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10893
10894 if(pWdiTrafficStats != NULL)
10895 {
10896 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10897 trafficStatsIndParams.length = length;
10898 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010899 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010900 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10901 trafficStatsIndParams.pUserData = pWDA;
10902
10903 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10904
10905 if(WDI_STATUS_PENDING == wdiStatus)
10906 {
10907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10908 "Pending received for %s:%d ",__func__,__LINE__ );
10909 }
10910 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10911 {
10912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10913 "Failure in %s:%d ",__func__,__LINE__ );
10914 }
10915
10916 WDI_DS_ClearTrafficStats();
10917 }
10918 else
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10921 "pWdiTrafficStats is Null");
10922 }
10923
10924 if( VOS_STATUS_SUCCESS !=
10925 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10926 {
10927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10928 "Traffic Stats Timer Start Failed ");
10929 return;
10930 }
10931}
10932
Jeff Johnson295189b2012-06-20 16:38:30 -070010933/*
10934 * BA Activity check timer handler
10935 */
10936void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10937{
10938 tANI_U8 curSta = 0 ;
10939 tANI_U8 tid = 0 ;
10940 tANI_U8 size = 0 ;
10941 tANI_U8 baCandidateCount = 0 ;
10942 tANI_U8 newBaCandidate = 0 ;
10943 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10944
10945 if(NULL == pWDA)
10946 {
10947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010948 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010949 VOS_ASSERT(0);
10950 return ;
10951 }
10952 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10953 {
10954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10955 "Inconsistent STA entries in WDA");
10956 VOS_ASSERT(0) ;
10957 }
10958 /* walk through all STA entries and find out TX packet count */
10959 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10960 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010961#ifdef WLAN_SOFTAP_VSTA_FEATURE
10962 // We can only do BA on "hard" STAs.
10963 if (!(IS_HWSTA_IDX(curSta)))
10964 {
10965 continue;
10966 }
10967#endif //WLAN_SOFTAP_VSTA_FEATURE
10968 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10969 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010970 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010971 tANI_U32 txPktCount = 0 ;
10972 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010974 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10975 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10977 curSta, tid, &txPktCount)))
10978 {
10979#if 0
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10981 "************* %d:%d, %d ",curSta, txPktCount,
10982 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10983#endif
10984 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010985 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10987 curSta, tid)))
10988 {
10989 /* get prepare for sending message to HAL */
10990 //baCandidate[baCandidateCount].staIdx = curSta ;
10991 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10992 newBaCandidate = WDA_ENABLE_BA ;
10993 }
10994 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10995 }
10996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010997 /* fill the entry for all the sta with given TID's */
10998 if(WDA_ENABLE_BA == newBaCandidate)
10999 {
11000 /* move to next BA candidate */
11001 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11002 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11003 baCandidateCount++ ;
11004 newBaCandidate = WDA_DISABLE_BA ;
11005 }
11006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 /* prepare and send message to hal */
11008 if( 0 < baCandidateCount)
11009 {
11010 WDI_Status status = WDI_STATUS_SUCCESS ;
11011 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11012 tWDA_ReqParams *pWdaParams =
11013 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 if(NULL == pWdaParams)
11015 {
11016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 VOS_ASSERT(0) ;
11019 return;
11020 }
11021 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11022 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11023 if(NULL == wdiTriggerBaReq)
11024 {
11025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 VOS_ASSERT(0) ;
11028 vos_mem_free(pWdaParams);
11029 return;
11030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 do
11032 {
11033 WDI_TriggerBAReqinfoType *triggerBaInfo =
11034 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11035 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11036 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11037 * for each request */
11038 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11039 triggerBaInfo->ucBASessionID = 0;
11040 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11041 } while(0) ;
11042 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 pWdaParams->pWdaContext = pWDA;
11046 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11047 pWdaParams->wdaMsgParam = NULL;
11048 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11049 WDA_TriggerBaReqCallback, pWdaParams) ;
11050 if(IS_WDI_STATUS_FAILURE(status))
11051 {
11052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11054 vos_mem_free(pWdaParams->wdaMsgParam) ;
11055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11056 vos_mem_free(pWdaParams) ;
11057 }
11058 }
11059 else
11060 {
11061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11062 "There is no TID for initiating BA");
11063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 if( VOS_STATUS_SUCCESS !=
11065 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11066 {
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11068 "BA Activity Timer Stop Failed ");
11069 return ;
11070 }
11071 if( VOS_STATUS_SUCCESS !=
11072 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11075 "BA Activity Timer Start Failed ");
11076 return;
11077 }
11078 return ;
11079}
Jeff Johnson295189b2012-06-20 16:38:30 -070011080/*
11081 * WDA common routine to create timer used by WDA.
11082 */
11083static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
11084{
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11086 tANI_U32 val = 0 ;
11087 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11088
11089 if(NULL == pMac)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 VOS_ASSERT(0);
11094 return VOS_STATUS_E_FAILURE;
11095 }
11096 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
11097 != eSIR_SUCCESS)
11098 {
11099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11100 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
11101 return VOS_STATUS_E_FAILURE;
11102 }
11103 val = SYS_MS_TO_TICKS(val) ;
11104
11105 /* BA activity check timer */
11106 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
11107 "BA Activity Check timer", WDA_TimerHandler,
11108 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
11109 if(status != TX_SUCCESS)
11110 {
11111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11112 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011113 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 /* Tx Complete Timeout timer */
11117 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
11118 "Tx Complete Check timer", WDA_TimerHandler,
11119 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 if(status != TX_SUCCESS)
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "Unable to create Tx Complete Timeout timer");
11124 /* Destroy timer of BA activity check timer */
11125 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11126 if(status != TX_SUCCESS)
11127 {
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11129 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011130 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011132 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011134
11135 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
11136
11137 /* Traffic Stats timer */
11138 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
11139 "Traffic Stats timer", WDA_TimerHandler,
11140 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
11141 if(status != TX_SUCCESS)
11142 {
11143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11144 "Unable to create traffic stats timer");
11145 /* Destroy timer of BA activity check timer */
11146 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11147 if(status != TX_SUCCESS)
11148 {
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 "Unable to Destroy BA activity timer");
11151 }
11152 /* Destroy timer of tx complete timer */
11153 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11154 if(status != TX_SUCCESS)
11155 {
11156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11157 "Unable to Tx complete timer");
11158 }
11159 return VOS_STATUS_E_FAILURE ;
11160 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011161 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011162}
Jeff Johnson295189b2012-06-20 16:38:30 -070011163/*
11164 * WDA common routine to destroy timer used by WDA.
11165 */
11166static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
11167{
11168 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11170 if(status != TX_SUCCESS)
11171 {
11172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11173 "Unable to Destroy Tx Complete Timeout timer");
11174 return eSIR_FAILURE ;
11175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11177 if(status != TX_SUCCESS)
11178 {
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11180 "Unable to Destroy BA activity timer");
11181 return eSIR_FAILURE ;
11182 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011183 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
11184 if(status != TX_SUCCESS)
11185 {
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11187 "Unable to Destroy traffic stats timer");
11188 return eSIR_FAILURE ;
11189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 return eSIR_SUCCESS ;
11191}
Jeff Johnson295189b2012-06-20 16:38:30 -070011192/*
11193 * WDA timer handler.
11194 */
11195void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
11196{
11197 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
11198 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 /*
11200 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
11201 */
11202 wdaMsg.type = timerInfo ;
11203 wdaMsg.bodyptr = NULL;
11204 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 /* post the message.. */
11206 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
11207 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
11208 {
11209 vosStatus = VOS_STATUS_E_BADMSG;
11210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011211}
Jeff Johnson295189b2012-06-20 16:38:30 -070011212/*
11213 * WDA Tx Complete timeout Indication.
11214 */
11215void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
11216{
11217 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 if( pWDA->pAckTxCbFunc )
11219 {
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11221 "TxComplete timer expired\n");
11222 pWDA->pAckTxCbFunc( pMac, 0);
11223 pWDA->pAckTxCbFunc = NULL;
11224 }
11225 else
11226 {
11227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11228 "There is no request pending for TxComplete and wait timer expired\n");
11229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011230}
Jeff Johnson295189b2012-06-20 16:38:30 -070011231/*
11232 * WDA Set REG Domain to VOS NV
11233 */
11234eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
11235{
11236 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
11237 {
11238 return eHAL_STATUS_INVALID_PARAMETER;
11239 }
11240 return eHAL_STATUS_SUCCESS;
11241}
Jeff Johnson295189b2012-06-20 16:38:30 -070011242
Jeff Johnson295189b2012-06-20 16:38:30 -070011243#ifdef FEATURE_WLAN_SCAN_PNO
11244/*
11245 * FUNCTION: WDA_PNOScanReqCallback
11246 *
11247 */
11248void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11249{
11250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 if(NULL == pWdaParams)
11254 {
11255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 VOS_ASSERT(0) ;
11258 return ;
11259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 if( pWdaParams != NULL )
11261 {
11262 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11263 {
11264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 if( pWdaParams->wdaMsgParam != NULL)
11267 {
11268 vos_mem_free(pWdaParams->wdaMsgParam);
11269 }
11270
11271 vos_mem_free(pWdaParams) ;
11272 }
11273
11274 return ;
11275}
Jeff Johnson295189b2012-06-20 16:38:30 -070011276/*
11277 * FUNCTION: WDA_UpdateScanParamsCallback
11278 *
11279 */
11280void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11281{
11282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011284 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011285 if(NULL == pWdaParams)
11286 {
11287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011288 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 VOS_ASSERT(0) ;
11290 return ;
11291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 if( pWdaParams != NULL )
11293 {
11294 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11295 {
11296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 if( pWdaParams->wdaMsgParam != NULL)
11299 {
11300 vos_mem_free(pWdaParams->wdaMsgParam);
11301 }
11302 vos_mem_free(pWdaParams) ;
11303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 return ;
11305}
Jeff Johnson295189b2012-06-20 16:38:30 -070011306/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11308 * Request to WDI to set Preferred Network List.Offload
11309 */
11310VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11311 tSirPNOScanReq *pPNOScanReqParams)
11312{
Jeff Johnson43971f52012-07-17 12:26:56 -070011313 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11315 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11316 tWDA_ReqParams *pWdaParams ;
11317 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 if(NULL == pwdiPNOScanReqInfo)
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 VOS_ASSERT(0);
11325 return VOS_STATUS_E_NOMEM;
11326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11328 if(NULL == pWdaParams)
11329 {
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 VOS_ASSERT(0);
11333 vos_mem_free(pwdiPNOScanReqInfo);
11334 return VOS_STATUS_E_NOMEM;
11335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 //
11337 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11338 //
11339 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11340 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11342 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11343 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11345 {
11346 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11347 &pPNOScanReqParams->aNetworks[i],
11348 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 /*Scan timer intervals*/
11351 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11352 &pPNOScanReqParams->scanTimers,
11353 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 /*Probe template for 2.4GHz band*/
11355 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11356 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11357 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11359 pPNOScanReqParams->p24GProbeTemplate,
11360 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011361 /*Probe template for 5GHz band*/
11362 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11363 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11364 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11366 pPNOScanReqParams->p5GProbeTemplate,
11367 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011369
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 /* Store Params pass it to WDI */
11371 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11372 pWdaParams->pWdaContext = pWDA;
11373 /* Store param pointer as passed in by caller */
11374 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11376 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011377 if(IS_WDI_STATUS_FAILURE(status))
11378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11380 "Failure in Set PNO REQ WDI API, free all the memory " );
11381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11382 vos_mem_free(pWdaParams->wdaMsgParam);
11383 pWdaParams->wdaWdiApiMsgParam = NULL;
11384 pWdaParams->wdaMsgParam = NULL;
11385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011386 return CONVERT_WDI2VOS_STATUS(status) ;
11387}
Jeff Johnson295189b2012-06-20 16:38:30 -070011388/*
11389 * FUNCTION: WDA_RssiFilterCallback
11390 *
11391 */
11392void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11393{
11394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11395
11396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011398
11399 VOS_ASSERT(NULL != pWdaParams);
11400
11401 vos_mem_free(pWdaParams->wdaMsgParam) ;
11402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11403 vos_mem_free(pWdaParams) ;
11404
11405 return ;
11406}
11407/*
11408 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11409 * Request to WDI to set Preferred Network List.Offload
11410 */
11411VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11412 tSirSetRSSIFilterReq* pRssiFilterParams)
11413{
Jeff Johnson43971f52012-07-17 12:26:56 -070011414 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11416 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11417 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 if(NULL == pwdiSetRssiFilterReqInfo)
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 VOS_ASSERT(0);
11425 return VOS_STATUS_E_NOMEM;
11426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11428 if(NULL == pWdaParams)
11429 {
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 VOS_ASSERT(0);
11433 vos_mem_free(pwdiSetRssiFilterReqInfo);
11434 return VOS_STATUS_E_NOMEM;
11435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11437 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011438
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 /* Store Params pass it to WDI */
11440 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11441 pWdaParams->pWdaContext = pWDA;
11442 /* Store param pointer as passed in by caller */
11443 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11445 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11446 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 if(IS_WDI_STATUS_FAILURE(status))
11448 {
11449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11450 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11452 vos_mem_free(pWdaParams->wdaMsgParam);
11453 pWdaParams->wdaWdiApiMsgParam = NULL;
11454 pWdaParams->wdaMsgParam = NULL;
11455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 return CONVERT_WDI2VOS_STATUS(status) ;
11457}
11458
Jeff Johnson295189b2012-06-20 16:38:30 -070011459/*
11460 * FUNCTION: WDA_ProcessUpdateScanParams
11461 * Request to WDI to update Scan Parameters
11462 */
11463VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11464 tSirUpdateScanParams *pUpdateScanParams)
11465{
Jeff Johnson43971f52012-07-17 12:26:56 -070011466 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11468 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11469 sizeof(WDI_UpdateScanParamsInfoType)) ;
11470 tWDA_ReqParams *pWdaParams ;
11471 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 if(NULL == wdiUpdateScanParamsInfoType)
11475 {
11476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 VOS_ASSERT(0);
11479 return VOS_STATUS_E_NOMEM;
11480 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11482 if ( NULL == pWdaParams )
11483 {
11484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 VOS_ASSERT(0);
11487 vos_mem_free(wdiUpdateScanParamsInfoType);
11488 return VOS_STATUS_E_NOMEM;
11489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 //
11491 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11492 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11494 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11495 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11496 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11497 "sir struct %d wdi struct %d",
11498 pUpdateScanParams->b11dEnabled,
11499 pUpdateScanParams->b11dResolved,
11500 pUpdateScanParams->ucChannelCount,
11501 pUpdateScanParams->usPassiveMinChTime,
11502 pUpdateScanParams->usPassiveMaxChTime,
11503 pUpdateScanParams->usActiveMinChTime,
11504 pUpdateScanParams->usActiveMaxChTime,
11505 sizeof(tSirUpdateScanParams),
11506 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11507
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11509 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11511 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11513 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11515 pUpdateScanParams->usActiveMaxChTime;
11516 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11517 pUpdateScanParams->usActiveMinChTime;
11518 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11519 pUpdateScanParams->usPassiveMaxChTime;
11520 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11521 pUpdateScanParams->usPassiveMinChTime;
11522
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011524 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11525 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011526
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 for ( i = 0; i <
11528 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11529 i++)
11530 {
11531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11532 "Update Scan Parameters channel: %d",
11533 pUpdateScanParams->aChannels[i]);
11534
11535 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11536 pUpdateScanParams->aChannels[i];
11537 }
11538
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011540
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 /* Store Params pass it to WDI */
11542 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11543 pWdaParams->pWdaContext = pWDA;
11544 /* Store param pointer as passed in by caller */
11545 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011546
Jeff Johnson295189b2012-06-20 16:38:30 -070011547
11548
11549 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11550 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11551 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 if(IS_WDI_STATUS_FAILURE(status))
11553 {
11554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11555 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11557 vos_mem_free(pWdaParams->wdaMsgParam);
11558 vos_mem_free(pWdaParams);
11559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 return CONVERT_WDI2VOS_STATUS(status) ;
11561}
11562#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011563/*
11564 * FUNCTION: WDA_SetPowerParamsCallback
11565 *
11566 */
11567void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11568{
11569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11570
11571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11572 "<------ %s " ,__func__);
11573
11574 if(NULL == pWdaParams)
11575 {
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11577 "%s: pWdaParams received NULL", __func__);
11578 VOS_ASSERT(0);
11579 return;
11580 }
11581 if( pWdaParams != NULL )
11582 {
11583 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11584 {
11585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11586 }
11587 if( pWdaParams->wdaMsgParam != NULL)
11588 {
11589 vos_mem_free(pWdaParams->wdaMsgParam);
11590 }
11591 vos_mem_free(pWdaParams);
11592 }
11593 return;
11594}
11595
Jeff Johnson295189b2012-06-20 16:38:30 -070011596#ifdef WLAN_FEATURE_PACKET_FILTERING
11597/*
11598 * FUNCTION: WDA_8023MulticastListReqCallback
11599 *
11600 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011601void WDA_8023MulticastListReqCallback(
11602 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11603 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011604{
11605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011607 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 if(NULL == pWdaParams)
11609 {
11610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 VOS_ASSERT(0) ;
11613 return ;
11614 }
11615
11616 vos_mem_free(pWdaParams->wdaMsgParam) ;
11617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11618 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 //print a msg, nothing else to do
11620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11621 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 return ;
11623}
Jeff Johnson295189b2012-06-20 16:38:30 -070011624/*
11625 * FUNCTION: WDA_Process8023MulticastListReq
11626 * Request to WDI to add 8023 Multicast List
11627 */
11628VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11629 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11630{
Jeff Johnson43971f52012-07-17 12:26:56 -070011631 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011632 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11633 tWDA_ReqParams *pWdaParams ;
11634 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011636 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 pwdiFltPktSetMcListReqParamsType =
11638 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11639 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11640 ) ;
11641 if(NULL == pwdiFltPktSetMcListReqParamsType)
11642 {
11643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 return VOS_STATUS_E_NOMEM;
11646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11648 if(NULL == pWdaParams)
11649 {
11650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011652 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11653 return VOS_STATUS_E_NOMEM;
11654 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011655
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 //
11657 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11658 //
11659 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011660 pRcvFltMcAddrList->ulMulticastAddrCnt;
11661
11662 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11663 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11664 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11665 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11666
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11668 {
11669 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11670 &(pRcvFltMcAddrList->multicastAddr[i]),
11671 sizeof(tSirMacAddr));
11672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011674
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 /* Store Params pass it to WDI */
11676 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11677 pWdaParams->pWdaContext = pWDA;
11678 /* Store param pointer as passed in by caller */
11679 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 status = WDI_8023MulticastListReq(
11681 pwdiFltPktSetMcListReqParamsType,
11682 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11683 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 if(IS_WDI_STATUS_FAILURE(status))
11685 {
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11687 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11689 vos_mem_free(pWdaParams->wdaMsgParam);
11690 vos_mem_free(pWdaParams);
11691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011692 return CONVERT_WDI2VOS_STATUS(status) ;
11693}
Jeff Johnson295189b2012-06-20 16:38:30 -070011694/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011695 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 *
11697 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011698void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011699 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11700 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011701{
11702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011704 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 if(NULL == pWdaParams)
11707 {
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 VOS_ASSERT(0) ;
11711 return ;
11712 }
11713
11714 vos_mem_free(pWdaParams->wdaMsgParam) ;
11715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11716 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 //print a msg, nothing else to do
11718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011719 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011720 return ;
11721}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011722
11723/*
11724 * FUNCTION: WDA_ReqCallback
11725 *
11726 */
11727void WDA_ReqCallback(WDI_Status wdiStatus,
11728 void* pUserData)
11729{
11730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11731
11732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11733 "<------ %s, wdiStatus: %d",
11734 __func__, wdiStatus);
11735
11736 if (NULL == pWdaParams)
11737 {
11738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11739 "%s: Invalid pWdaParams pointer", __func__);
11740 VOS_ASSERT(0);
11741 return;
11742 }
11743
11744 if (IS_WDI_STATUS_FAILURE(wdiStatus))
11745 {
11746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11747 vos_mem_free(pWdaParams->wdaMsgParam);
11748 vos_mem_free(pWdaParams);
11749 }
11750
11751 return;
11752}
11753
Jeff Johnson295189b2012-06-20 16:38:30 -070011754/*
11755 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11756 * Request to WDI to set Receive Filters
11757 */
11758VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11759 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11760{
Jeff Johnson43971f52012-07-17 12:26:56 -070011761 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11763 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11764 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11765 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11766 tWDA_ReqParams *pWdaParams ;
11767 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011769 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11771 {
11772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011774 VOS_ASSERT(0);
11775 return VOS_STATUS_E_NOMEM;
11776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11778 if(NULL == pWdaParams)
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_ASSERT(0);
11783 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11784 return VOS_STATUS_E_NOMEM;
11785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11787 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11788 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11789 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011790 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11791 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11792
11793 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11794 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011795
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11797 "FID %d FT %d NParams %d CT %d",
11798 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11799 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11800 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11801 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11803 {
11804 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11805 &pRcvPktFilterCfg->paramsData[i],
11806 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11808 "Proto %d Comp Flag %d \n",
11809 pwdiSetRcvPktFilterReqParamsType->
11810 wdiPktFilterCfg.paramsData[i].protocolLayer,
11811 pwdiSetRcvPktFilterReqParamsType->
11812 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11814 "Data Offset %d Data Len %d\n",
11815 pwdiSetRcvPktFilterReqParamsType->
11816 wdiPktFilterCfg.paramsData[i].dataOffset,
11817 pwdiSetRcvPktFilterReqParamsType->
11818 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11820 "CData: %d:%d:%d:%d:%d:%d\n",
11821 pwdiSetRcvPktFilterReqParamsType->
11822 wdiPktFilterCfg.paramsData[i].compareData[0],
11823 pwdiSetRcvPktFilterReqParamsType->
11824 wdiPktFilterCfg.paramsData[i].compareData[1],
11825 pwdiSetRcvPktFilterReqParamsType->
11826 wdiPktFilterCfg.paramsData[i].compareData[2],
11827 pwdiSetRcvPktFilterReqParamsType->
11828 wdiPktFilterCfg.paramsData[i].compareData[3],
11829 pwdiSetRcvPktFilterReqParamsType->
11830 wdiPktFilterCfg.paramsData[i].compareData[4],
11831 pwdiSetRcvPktFilterReqParamsType->
11832 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11834 "MData: %d:%d:%d:%d:%d:%d\n",
11835 pwdiSetRcvPktFilterReqParamsType->
11836 wdiPktFilterCfg.paramsData[i].dataMask[0],
11837 pwdiSetRcvPktFilterReqParamsType->
11838 wdiPktFilterCfg.paramsData[i].dataMask[1],
11839 pwdiSetRcvPktFilterReqParamsType->
11840 wdiPktFilterCfg.paramsData[i].dataMask[2],
11841 pwdiSetRcvPktFilterReqParamsType->
11842 wdiPktFilterCfg.paramsData[i].dataMask[3],
11843 pwdiSetRcvPktFilterReqParamsType->
11844 wdiPktFilterCfg.paramsData[i].dataMask[4],
11845 pwdiSetRcvPktFilterReqParamsType->
11846 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 }
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011848 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
11849 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 /* Store Params pass it to WDI */
11851 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11852 pWdaParams->pWdaContext = pWDA;
11853 /* Store param pointer as passed in by caller */
11854 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011856 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011858 if(IS_WDI_STATUS_FAILURE(status))
11859 {
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11861 "Failure in SetFilter(),free all the memory,status %d ",status);
11862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11863 vos_mem_free(pWdaParams->wdaMsgParam);
11864 vos_mem_free(pWdaParams);
11865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 return CONVERT_WDI2VOS_STATUS(status) ;
11867}
Jeff Johnson295189b2012-06-20 16:38:30 -070011868/*
11869 * FUNCTION: WDA_FilterMatchCountReqCallback
11870 *
11871 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011872void WDA_FilterMatchCountReqCallback(
11873 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11874 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011875{
11876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11877 tWDA_CbContext *pWDA;
11878 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11879 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11880 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11881 tANI_U8 i;
11882 vos_msg_t vosMsg;
11883
11884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011885 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011886 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11887
Jeff Johnsone7245742012-09-05 17:12:55 -070011888 if(NULL == pRcvFltPktMatchCntRsp)
11889 {
11890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011891 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011892 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011893 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011894 return ;
11895 }
11896
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 if(NULL == pWdaParams)
11898 {
11899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011900 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011902 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 return ;
11904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11906 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11908 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11909
11910 /* Message Header */
11911 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11912 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11913
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011914 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011915
11916 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11917 {
11918 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11919 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11920 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 /* VOS message wrapper */
11922 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11923 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11924 vosMsg.bodyval = 0;
11925 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11926 {
11927 /* free the mem and return */
11928 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11929 }
11930
11931 vos_mem_free(pWdaParams->wdaMsgParam) ;
11932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11933 vos_mem_free(pWdaParams) ;
11934}
Jeff Johnson295189b2012-06-20 16:38:30 -070011935/*
11936 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11937 * Request to WDI to get PC Filter Match Count
11938 */
11939VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11940{
Jeff Johnson43971f52012-07-17 12:26:56 -070011941 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011942 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11943 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11948 {
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 VOS_ASSERT(0);
11952 return VOS_STATUS_E_NOMEM;
11953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11955 if(NULL == pWdaParams)
11956 {
11957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 VOS_ASSERT(0);
11960 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11961 return VOS_STATUS_E_NOMEM;
11962 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011963
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11965
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011966 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11967 pRcvFltPktMatchRsp->bssId,
11968 sizeof(wpt_macAddr));
11969
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 /* Store Params pass it to WDI */
11971 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11972 pWdaParams->pWdaContext = pWDA;
11973 /* Store param pointer as passed in by caller */
11974 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11976 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11977 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 if(IS_WDI_STATUS_FAILURE(status))
11979 {
11980 /* failure returned by WDI API */
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11982 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11984 vos_mem_free(pWdaParams) ;
11985 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11986 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 return CONVERT_WDI2VOS_STATUS(status) ;
11989}
Jeff Johnson295189b2012-06-20 16:38:30 -070011990/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011991 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 *
11993 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011994void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011995 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11996 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011997{
11998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012000 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012001/* WDA_VOS_ASSERT(NULL != pWdaParams); */
12002 if(NULL == pWdaParams)
12003 {
12004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012005 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 VOS_ASSERT(0) ;
12007 return ;
12008 }
12009
12010 vos_mem_free(pWdaParams->wdaMsgParam) ;
12011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12012 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012013 //print a msg, nothing else to do
12014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012015 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 return ;
12017}
Jeff Johnson295189b2012-06-20 16:38:30 -070012018/*
12019 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
12020 * Request to WDI to clear Receive Filters
12021 */
12022VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
12023 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
12024{
Jeff Johnson43971f52012-07-17 12:26:56 -070012025 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
12027 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
12028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 if(NULL == pwdiRcvFltPktClearReqParamsType)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 VOS_ASSERT(0);
12036 return VOS_STATUS_E_NOMEM;
12037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12039 if(NULL == pWdaParams)
12040 {
12041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 VOS_ASSERT(0);
12044 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
12045 return VOS_STATUS_E_NOMEM;
12046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
12048 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070012049 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
12050 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
12051 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
12052 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012053
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012054 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
12055 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 /* Store Params pass it to WDI */
12057 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
12058 pWdaParams->pWdaContext = pWDA;
12059 /* Store param pointer as passed in by caller */
12060 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012062 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012063 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 if(IS_WDI_STATUS_FAILURE(status))
12065 {
12066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12067 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
12068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080012069 vos_mem_free(pWdaParams->wdaMsgParam);
12070 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 return CONVERT_WDI2VOS_STATUS(status) ;
12073}
12074#endif // WLAN_FEATURE_PACKET_FILTERING
12075
Jeff Johnson295189b2012-06-20 16:38:30 -070012076/*
12077 * FUNCTION: WDA_ProcessSetPowerParamsReq
12078 * Request to WDI to set power params
12079 */
12080VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
12081 tSirSetPowerParamsReq *pPowerParams)
12082{
Jeff Johnson43971f52012-07-17 12:26:56 -070012083 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
12085 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 if(NULL == pwdiSetPowerParamsReqInfo)
12090 {
12091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 VOS_ASSERT(0);
12094 return VOS_STATUS_E_NOMEM;
12095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12097 if(NULL == pWdaParams)
12098 {
12099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 VOS_ASSERT(0);
12102 vos_mem_free(pwdiSetPowerParamsReqInfo);
12103 return VOS_STATUS_E_NOMEM;
12104 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012105
Jeff Johnson295189b2012-06-20 16:38:30 -070012106
12107 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
12108 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
12110 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
12112 pPowerParams->uListenInterval;
12113 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
12114 pPowerParams->uBcastMcastFilter;
12115 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
12116 pPowerParams->uEnableBET;
12117 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
12118 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070012119 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012120
Jeff Johnson295189b2012-06-20 16:38:30 -070012121 /* Store Params pass it to WDI */
12122 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
12123 pWdaParams->pWdaContext = pWDA;
12124 /* Store param pointer as passed in by caller */
12125 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
12127 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
12128 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 if(IS_WDI_STATUS_FAILURE(status))
12130 {
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12132 "Failure in Set power params REQ WDI API, free all the memory " );
12133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12134 vos_mem_free(pWdaParams->wdaMsgParam);
12135 pWdaParams->wdaWdiApiMsgParam = NULL;
12136 pWdaParams->wdaMsgParam = NULL;
12137 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 return CONVERT_WDI2VOS_STATUS(status) ;
12139}
12140
12141/*
12142 * FUNCTION: WDA_SetTmLevelRspCallback
12143 * Set TM Level response
12144 */
12145void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
12146{
12147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12148
12149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012150 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012151
12152 if(NULL == pWdaParams)
12153 {
12154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012155 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 VOS_ASSERT(0) ;
12157 return ;
12158 }
12159
12160 /* Dose not need to send notification to upper layer
12161 * Just free allocated resources */
12162 if( pWdaParams != NULL )
12163 {
12164 if( pWdaParams->wdaWdiApiMsgParam != NULL )
12165 {
12166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12167 }
12168 vos_mem_free(pWdaParams->wdaMsgParam) ;
12169 vos_mem_free(pWdaParams) ;
12170 }
12171}
12172
12173/*
12174 * FUNCTION: WDA_ProcessSetTmLevelReq
12175 * Set TM Level request
12176 */
12177VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
12178 tAniSetTmLevelReq *setTmLevelReq)
12179{
12180 WDI_Status status = WDI_STATUS_SUCCESS ;
12181 tWDA_ReqParams *pWdaParams ;
12182 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
12183 (WDI_SetTmLevelReqType *)vos_mem_malloc(
12184 sizeof(WDI_SetTmLevelReqType)) ;
12185 if(NULL == wdiSetTmLevelReq)
12186 {
12187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012189 VOS_ASSERT(0);
12190 return VOS_STATUS_E_NOMEM;
12191 }
12192
12193 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12194 if(NULL == pWdaParams)
12195 {
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 VOS_ASSERT(0);
12199 vos_mem_free(wdiSetTmLevelReq);
12200 return VOS_STATUS_E_NOMEM;
12201 }
12202
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012204 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012205
12206 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
12207 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
12208
12209 pWdaParams->pWdaContext = pWDA;
12210 pWdaParams->wdaMsgParam = setTmLevelReq;
12211 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
12212
12213 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
12214 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
12215
12216 if(IS_WDI_STATUS_FAILURE(status))
12217 {
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080012219 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 vos_mem_free(pWdaParams->wdaMsgParam) ;
12221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12222 vos_mem_free(pWdaParams) ;
12223 }
12224
12225 return CONVERT_WDI2VOS_STATUS(status) ;
12226}
12227
12228VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
12229 tpTxControlParams pTxCtrlParam)
12230{
12231 VOS_STATUS wdaStatus;
12232
12233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012235 if( pTxCtrlParam == NULL )
12236 {
12237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012238 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012239 return VOS_STATUS_E_FAILURE;
12240 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012241 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
12242 {
12243 wdaStatus = WDA_SuspendDataTx(pWDA);
12244 }
12245 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
12246 {
12247 wdaStatus = WDA_ResumeDataTx(pWDA);
12248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012249 return wdaStatus;
12250}
12251
12252 /* FUNCTION WDA_featureCapsExchange
12253 * WDA API to invoke capability exchange between host and FW.
12254 */
12255void WDA_featureCapsExchange(v_PVOID_t pVosContext)
12256{
12257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012258 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012259 WDI_featureCapsExchangeReq( NULL, pVosContext);
12260}
12261
Yathish9f22e662012-12-10 14:21:35 -080012262/* FUNCTION WDA_disableCapablityFeature
12263 * WDA API to diable Active mode offload in host.
12264 */
12265void WDA_disableCapablityFeature(tANI_U8 feature_index)
12266{
12267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12268 "%s:enter", __func__ );
12269 WDI_disableCapablityFeature(feature_index);
12270}
12271
Jeff Johnson295189b2012-06-20 16:38:30 -070012272 /* FUNCTION WDA_getHostWlanFeatCaps
12273 * Wrapper for WDI API, that will return if the feature (enum value).passed
12274 * to this API is supported or not in Host
12275 * return value
12276 * 0 - implies feature is NOT Supported
12277 * any non zero value - implies feature is SUPPORTED
12278 */
12279tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
12280{
12281 return WDI_getHostWlanFeatCaps(featEnumValue);
12282}
12283
12284 /* FUNCTION WDA_getFwWlanFeatCaps
12285 * Wrapper for WDI API, that will return if the feature (enum value).passed
12286 * to this API is supported or not in FW
12287 * return value
12288 * 0 - implies feature is NOT Supported
12289 * any non zero value - implies feature is SUPPORTED
12290 */
12291tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12292{
12293 return WDI_getFwWlanFeatCaps(featEnumValue);
12294}
12295
12296/*
12297 * FUNCTION: WDA_shutdown
12298 * Shutdown WDA/WDI without handshaking with Riva.
12299 * Synchronous function.
12300 */
12301VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12302{
12303 WDI_Status wdiStatus;
12304 //tANI_U8 eventIdx = 0;
12305 VOS_STATUS status = VOS_STATUS_SUCCESS;
12306 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 if (NULL == pWDA)
12308 {
12309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012310 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 VOS_ASSERT(0);
12312 return VOS_STATUS_E_FAILURE;
12313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 /* FTM mode stay START_STATE */
12315 if( (WDA_READY_STATE != pWDA->wdaState) &&
12316 (WDA_INIT_STATE != pWDA->wdaState) &&
12317 (WDA_START_STATE != pWDA->wdaState) )
12318 {
12319 VOS_ASSERT(0);
12320 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012321
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012322 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12323 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012324 {
12325 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012326 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012327 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012328
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 /* call WDI shutdown */
12330 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012331 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12332 {
12333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12334 "error in WDA Stop" );
12335 status = VOS_STATUS_E_FAILURE;
12336 }
12337 /* WDI stop is synchrnous, shutdown is complete when it returns */
12338 pWDA->wdaState = WDA_STOP_STATE;
12339
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 /* shutdown should perform the stop & close actions. */
12341 /* Destroy the event */
12342 status = vos_event_destroy(&pWDA->txFrameEvent);
12343 if(!VOS_IS_STATUS_SUCCESS(status))
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12346 "VOS Event destroy failed - status = %d\n", status);
12347 status = VOS_STATUS_E_FAILURE;
12348 }
12349 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12350 if(!VOS_IS_STATUS_SUCCESS(status))
12351 {
12352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12353 "VOS Event destroy failed - status = %d\n", status);
12354 status = VOS_STATUS_E_FAILURE;
12355 }
12356 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12357 if(!VOS_IS_STATUS_SUCCESS(status))
12358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12360 "VOS Event destroy failed - status = %d\n", status);
12361 status = VOS_STATUS_E_FAILURE;
12362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012363 /* free WDA context */
12364 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12365 if ( !VOS_IS_STATUS_SUCCESS(status) )
12366 {
12367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12368 "error in WDA close " );
12369 status = VOS_STATUS_E_FAILURE;
12370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 return status;
12372}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012373
Jeff Johnsone7245742012-09-05 17:12:55 -070012374/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012375 * FUNCTION: WDA_setNeedShutdown
12376 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012377 */
12378
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012379void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012380{
12381 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012382 if(pWDA == NULL)
12383 {
12384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12385 "Could not get the WDA Context pointer" );
12386 return;
12387 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012388 pWDA->needShutdown = TRUE;
12389}
12390/*
12391 * FUNCTION: WDA_needShutdown
12392 * WDA needs a shutdown
12393 */
12394
12395v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12396{
12397 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012398 if(pWDA == NULL)
12399 {
12400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12401 "Could not get the WDA Context pointer" );
12402 return 0;
12403 }
12404 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012405}
12406
Mohit Khanna4a70d262012-09-11 16:30:12 -070012407#ifdef WLAN_FEATURE_11AC
12408/*
12409 * FUNCTION: WDA_SetBeaconFilterReqCallback
12410 *
12411 */
12412void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12413{
12414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012416 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012417 if(NULL == pWdaParams)
12418 {
12419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012420 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012421 VOS_ASSERT(0) ;
12422 return ;
12423 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012424
Mohit Khanna4a70d262012-09-11 16:30:12 -070012425 vos_mem_free(pWdaParams->wdaMsgParam) ;
12426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12427 vos_mem_free(pWdaParams) ;
12428 /*
12429 * No respone required for SetBeaconFilter req so just free the request
12430 * param here
12431 */
12432
12433 return ;
12434}
12435
12436VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12437 tUpdateVHTOpMode *pData)
12438{
12439 WDI_Status status = WDI_STATUS_SUCCESS ;
12440 tWDA_ReqParams *pWdaParams ;
12441 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12442 sizeof(WDI_UpdateVHTOpMode)) ;
12443 if(NULL == wdiTemp)
12444 {
12445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012446 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012447 VOS_ASSERT(0);
12448 return VOS_STATUS_E_NOMEM;
12449 }
12450 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12451 if(NULL == pWdaParams)
12452 {
12453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012454 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012455 VOS_ASSERT(0);
12456 vos_mem_free(wdiTemp);
12457 return VOS_STATUS_E_NOMEM;
12458 }
12459
12460 wdiTemp->opMode = pData->opMode;
12461 wdiTemp->staId = pData->staId;
12462
12463 pWdaParams->pWdaContext = pWDA;
12464 /* Store Req pointer, as this will be used for response */
12465 pWdaParams->wdaMsgParam = (void *)pData;
12466 /* store Params pass it to WDI */
12467 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12468
12469 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12470
12471 if(IS_WDI_STATUS_FAILURE(status))
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12476 vos_mem_free(pWdaParams->wdaMsgParam);
12477 vos_mem_free(pWdaParams);
12478 }
12479 return CONVERT_WDI2VOS_STATUS(status) ;
12480}
12481#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012482
12483/*==========================================================================
12484 FUNCTION WDA_TransportChannelDebug
12485
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012486 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012487 Display Transport Channel debugging information
12488 User may request to display DXE channel snapshot
12489 Or if host driver detects any abnormal stcuk may display
12490
12491 PARAMETERS
schang6295e542013-03-12 15:31:23 -070012492 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080012493 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012494 enableStallDetect : Enable stall detect feature
12495 This feature will take effect to data performance
12496 Not integrate till fully verification
12497
12498 RETURN VALUE
12499 NONE
12500
12501===========================================================================*/
12502void WDA_TransportChannelDebug
12503(
schang6295e542013-03-12 15:31:23 -070012504 tpAniSirGlobal pMac,
12505 v_BOOL_t displaySnapshot,
12506 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012507)
12508{
schang6295e542013-03-12 15:31:23 -070012509 if (NULL != pMac)
12510 {
12511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12512 "HAL BMU DUMP Request" );
12513 /* 17 is BMU dump opcode */
12514 WDA_HALDumpCmdReq(pMac, 17, 0, 0, 0, 0, NULL);
12515 }
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012516 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012517 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012518}