blob: e561efe350c3597549aec73f8c2c54d9e091ff43 [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);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700228/*
229 * FUNCTION: WDA_open
230 * Allocate the WDA context
231 */
232VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
233 tMacOpenParameters *pMacParams )
234{
235 tWDA_CbContext *wdaContext;
236 VOS_STATUS status;
237 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700238 /* Allocate WDA context */
239 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
240 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 return VOS_STATUS_E_NOMEM;
244 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700245 /*__asm int 3;*/
246 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
247
248 /* Initialize data structures */
249 wdaContext->pVosContext = pVosContext;
250 wdaContext->wdaState = WDA_INIT_STATE;
251 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
252
253 /* Initialize WDA-WDI synchronization event */
254 status = vos_event_init(&wdaContext->wdaWdiEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "WDI Sync 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 /* Init Frame transfer event */
262 status = vos_event_init(&wdaContext->txFrameEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
266 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 status = vos_event_init(&wdaContext->suspendDataTxEvent);
270 if(!VOS_IS_STATUS_SUCCESS(status))
271 {
272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
273 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800274 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
277 if(!VOS_IS_STATUS_SUCCESS(status))
278 {
279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
280 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800281 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700282 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 wdaContext->driverMode = pMacParams->driverType;
285 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
286 &wdiDevCapability, pMacParams->driverType))
287 {
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
289 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800290 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
292 else
293 {
294 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
295 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
296 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* update max STA in WDA used for BA */
298 wdaContext->wdaMaxSta = pMacParams->maxStation;
299 /* store the frameTransRequired flag in wdaContext, to send this to HAL
300 * in WDA_Start
301 */
302 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
303 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800305
306error:
307 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
308 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309}
310
Jeff Johnson295189b2012-06-20 16:38:30 -0700311/*
312 * FUNCTION: WDA_preStart
313 * Trigger DAL-AL to start CFG download
314 */
315VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
316{
317 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
318 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /*
320 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
321 */
322 wdaMsg.type = WNI_CFG_DNLD_REQ ;
323 wdaMsg.bodyptr = NULL;
324 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 /* post the message.. */
326 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
327 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
328 {
329 vosStatus = VOS_STATUS_E_BADMSG;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return( vosStatus );
332}
Jeff Johnson295189b2012-06-20 16:38:30 -0700333/*
334 * FUNCTION: WDA_wdiStartCallback
335 * Once WDI_Start is finished, WDI start callback will be called by WDI
336 * to indicate completion of WDI_Start.
337 */
338void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
339 void *pVosContext)
340{
341 tWDA_CbContext *wdaContext;
342 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 if (NULL == pVosContext)
344 {
345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700346 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700347 return;
348 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
350 if (NULL == wdaContext)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 return;
355 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700356 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700359 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 }
361 else
362 {
363 wdaContext->wdaState = WDA_START_STATE;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 /* extract and save version information from the Start Response */
366 wdaContext->wcnssWlanCompiledVersion.major =
367 wdiRspParams->wlanCompiledVersion.major;
368 wdaContext->wcnssWlanCompiledVersion.minor =
369 wdiRspParams->wlanCompiledVersion.minor;
370 wdaContext->wcnssWlanCompiledVersion.version =
371 wdiRspParams->wlanCompiledVersion.version;
372 wdaContext->wcnssWlanCompiledVersion.revision =
373 wdiRspParams->wlanCompiledVersion.revision;
374 wdaContext->wcnssWlanReportedVersion.major =
375 wdiRspParams->wlanReportedVersion.major;
376 wdaContext->wcnssWlanReportedVersion.minor =
377 wdiRspParams->wlanReportedVersion.minor;
378 wdaContext->wcnssWlanReportedVersion.version =
379 wdiRspParams->wlanReportedVersion.version;
380 wdaContext->wcnssWlanReportedVersion.revision =
381 wdiRspParams->wlanReportedVersion.revision;
382 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
383 wdiRspParams->wcnssSoftwareVersion,
384 sizeof(wdaContext->wcnssSoftwareVersionString));
385 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
386 wdiRspParams->wcnssHardwareVersion,
387 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 /* Notify WDA_start that WDI_Start has completed */
389 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700390 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700395 return;
396}
397
Jeff Johnson295189b2012-06-20 16:38:30 -0700398/*
399 * FUNCTION: WDA_start
400 * Prepare TLV configuration and call WDI_Start.
401 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700402VOS_STATUS WDA_start(v_PVOID_t pVosContext)
403{
404 tWDA_CbContext *wdaContext;
405 VOS_STATUS status;
406 WDI_Status wdiStatus;
407 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 if (NULL == pVosContext)
409 {
410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700411 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 return VOS_STATUS_E_FAILURE;
413 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
415 if (NULL == wdaContext)
416 {
417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700418 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 return VOS_STATUS_E_FAILURE;
420 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Non-FTM mode, WDA status for START must be INIT
422 * FTM mode, WDA Status for START can be INIT or STOP */
423 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
424 (WDA_STOP_STATE != wdaContext->wdaState) )
425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
427 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700428 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return VOS_STATUS_E_FAILURE;
430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* initialize the wdiStartParam. Note that we can create this on
432 the stack since we won't exit until WDI_Start() completes or
433 times out */
434 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* prepare the config TLV for the WDI */
437 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
438 if ( !VOS_IS_STATUS_SUCCESS(status) )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 return VOS_STATUS_E_FAILURE;
443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* note from here onwards if an error occurs we must
445 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
447 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
448 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* initialize the WDA-WDI synchronization event */
450 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 /* call WDI start */
452 wdiStatus = WDI_Start(&wdiStartParam,
453 (WDI_StartRspCb)WDA_wdiStartCallback,
454 (v_VOID_t *)pVosContext);
455 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 vos_mem_free(wdiStartParam.pConfigBuffer);
460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* wait for WDI start to invoke our callback */
463 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
464 WDA_WDI_START_TIMEOUT );
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 if ( VOS_STATUS_E_TIMEOUT == status )
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 else
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700476 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 vos_mem_free(wdiStartParam.pConfigBuffer);
479 return VOS_STATUS_E_FAILURE;
480 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* we no longer need the config TLV */
483 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* if we are not in the START state then WDI_Start() failed */
485 if (WDA_START_STATE != wdaContext->wdaState)
486 {
487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700488 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 return VOS_STATUS_E_FAILURE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 /* FTM mode does not need to monitor BA activity */
492 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
493 {
494 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800495 if(VOS_STATUS_SUCCESS == status)
496 {
497 wdaContext->wdaTimersCreated = VOS_TRUE;
498 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return status;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_prepareConfigTLV
505 * Function to prepare CFG for DAL(WDA)
506 */
507VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
508 WDI_StartReqParamsType *wdiStartParams )
509{
510 /* get pMac to acess CFG data base */
511 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
512 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
513 tHalCfg *tlvStruct = NULL ;
514 tANI_U8 *tlvStructStart = NULL ;
515 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
516 v_PVOID_t *configParam;
517 tANI_U32 configParamSize;
518 tANI_U32 *configDataValue;
519 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
883#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
884 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
885 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length);
897#endif
898 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
912 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
925 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
926 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
939 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
952 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
956 configDataValue ) != eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
965 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length);
977
978 /* QWLAN_HAL_CFG_STATS_PERIOD */
979 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
983 eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_STATS_PERIOD");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
992 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
996 eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1000 goto handle_failure;
1001 }
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_FRAME_TRANS_ENABLED */
1005 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1009 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1013 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1017 != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1026 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1027 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1030 &strLength) != eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1034 goto handle_failure;
1035 }
1036 tlvStruct->length = strLength;
1037 /* calculate the pad bytes to have the CFG in aligned format */
1038 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1039 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1043 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1044 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1047 &strLength) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1051 goto handle_failure;
1052 }
1053 tlvStruct->length = strLength;
1054 /* calculate the pad bytes to have the CFG in aligned format */
1055 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1056 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1058 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1060 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1061 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1063 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1064 &strLength) != eSIR_SUCCESS)
1065 {
1066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1067 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1068 goto handle_failure;
1069 }
1070 tlvStruct->length = strLength;
1071 /* calculate the pad bytes to have the CFG in aligned format */
1072 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1073 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1075 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1077 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1078 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1080 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1081 &strLength) != eSIR_SUCCESS)
1082 {
1083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1084 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1085 goto handle_failure;
1086 }
1087 tlvStruct->length = strLength;
1088 /* calculate the pad bytes to have the CFG in aligned format */
1089 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1090 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1094 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1098 != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1111 != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1120 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1133 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1137 != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1141 goto handle_failure;
1142 }
1143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1146 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1147 tlvStruct->length = sizeof(tANI_U32);
1148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1149 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1150 != eSIR_SUCCESS)
1151 {
1152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1153 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1154 goto handle_failure;
1155 }
1156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1159 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1160 tlvStruct->length = sizeof(tANI_U32);
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1163 != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1167 goto handle_failure;
1168 }
1169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1170 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1172 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1173 tlvStruct->length = sizeof(tANI_U32);
1174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1175 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1176 != eSIR_SUCCESS)
1177 {
1178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1179 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1180 goto handle_failure;
1181 }
1182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1185 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1193 goto handle_failure;
1194 }
1195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1211 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1237 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1238 * into FW, so the parameters are added here.
1239 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1248 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1255 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001366 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1370 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1371 wcnssCompiledApiVersion.minor,
1372 wcnssCompiledApiVersion.version,
1373 wcnssCompiledApiVersion.revision);
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
Jeff Johnsond13512a2012-07-17 11:42:19 -07001377 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1378 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1382 configDataValue ) != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1392 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1396 configDataValue ) != eSIR_SUCCESS)
1397 {
1398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1399 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1400 goto handle_failure;
1401 }
1402
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1407 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1415 goto handle_failure;
1416 }
1417
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001421 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1430 goto handle_failure;
1431 }
1432
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001435#ifdef WLAN_SOFTAP_VSTA_FEATURE
1436 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1440 != eSIR_SUCCESS)
1441 {
1442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1443 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1444 goto handle_failure;
1445 }
1446
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449#endif
1450
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001451 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1452 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455
1456 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1457 != eSIR_SUCCESS)
1458 {
1459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1460 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1461 goto handle_failure;
1462 }
1463
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301467/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1468 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1472 configDataValue ) != eSIR_SUCCESS)
1473 {
1474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1475 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1476 goto handle_failure;
1477 }
1478
1479 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1480 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301481#ifdef FEATURE_WLAN_TDLS
1482 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1483 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1484 tlvStruct->length = sizeof(tANI_U32);
1485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1486 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1487 configDataValue ) != eSIR_SUCCESS)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1490 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1491 goto handle_failure;
1492 }
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
1495
1496 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1497 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1498 tlvStruct->length = sizeof(tANI_U32);
1499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1500 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1501 configDataValue ) != eSIR_SUCCESS)
1502 {
1503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1504 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1505 goto handle_failure;
1506 }
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1510 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1514 configDataValue ) != eSIR_SUCCESS)
1515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1517 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1518 goto handle_failure;
1519 }
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1523 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1524 tlvStruct->length = sizeof(tANI_U32);
1525 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1526 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1527 configDataValue ) != eSIR_SUCCESS)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1530 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1531 goto handle_failure;
1532 }
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301536
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001538#ifdef WLAN_DEBUG
1539 {
1540 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1542 "****** Dumping CFG TLV ***** ");
1543 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1544 {
1545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1546 "%02x %02x %02x %02x %02x %02x %02x %02x",
1547 tlvStructStart[i],
1548 tlvStructStart[i+1],
1549 tlvStructStart[i+2],
1550 tlvStructStart[i+3],
1551 tlvStructStart[i+4],
1552 tlvStructStart[i+5],
1553 tlvStructStart[i+6],
1554 tlvStructStart[i+7]);
1555 }
1556 /* Dump the bytes in the last line*/
1557 for (; i < wdiStartParams->usConfigBufferLen; i++)
1558 {
1559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1560 "%02x ",tlvStructStart[i]);
1561 }
1562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1563 "**************************** ");
1564 }
1565#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001567handle_failure:
1568 vos_mem_free(configParam);
1569 return VOS_STATUS_E_FAILURE;
1570}
Jeff Johnson295189b2012-06-20 16:38:30 -07001571/*
1572 * FUNCTION: WDA_wdiCompleteCB
1573 * call the voss call back function
1574 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001575void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001576{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1578 tWDA_CbContext *wdaContext;
1579
1580 if(NULL == pWdaParams)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001584 VOS_ASSERT(0) ;
1585 return ;
1586 }
1587
1588 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1589
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 if (NULL == wdaContext)
1591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001593 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 return ;
1595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001596
Jeff Johnson295189b2012-06-20 16:38:30 -07001597 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001601 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602 vos_mem_free(pWdaParams);
1603
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 if(WDI_STATUS_SUCCESS != status)
1605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1607 "WDI stop callback returned failure" );
1608 VOS_ASSERT(0) ;
1609 }
1610 else
1611 {
1612 wdaContext->wdaState = WDA_STOP_STATE;
1613 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001616 vos_WDAComplete_cback(wdaContext->pVosContext);
1617
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 return ;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_stop
1622 * call WDI_stop
1623 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001624VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1625{
1626 WDI_Status wdiStatus;
1627 VOS_STATUS status = VOS_STATUS_SUCCESS;
1628 WDI_StopReqParamsType *wdiStopReq;
1629 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630 tWDA_ReqParams *pWdaParams ;
1631
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 if (NULL == pWDA)
1633 {
1634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001635 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 VOS_ASSERT(0);
1637 return VOS_STATUS_E_FAILURE;
1638 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001639 if (pWDA->wdiFailed == true)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001642 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001643 return VOS_STATUS_E_ALREADY;
1644 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /* FTM mode stay START_STATE */
1647 if( (WDA_READY_STATE != pWDA->wdaState) &&
1648 (WDA_INIT_STATE != pWDA->wdaState) &&
1649 (WDA_START_STATE != pWDA->wdaState) )
1650 {
1651 VOS_ASSERT(0);
1652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 wdiStopReq = (WDI_StopReqParamsType *)
1654 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1655 if(NULL == wdiStopReq)
1656 {
1657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 VOS_ASSERT(0);
1660 return VOS_STATUS_E_NOMEM;
1661 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001662
Jeff Johnson295189b2012-06-20 16:38:30 -07001663 wdiStopReq->wdiStopReason = reason;
1664 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665
1666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1667 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 {
1669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001671 VOS_ASSERT(0);
1672 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001673 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001674 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001675
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001676 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1677 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001678 {
1679 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001680 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001682
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001683 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1684 pWdaParams->wdaMsgParam = NULL;
1685 pWdaParams->pWdaContext = pWDA;
1686
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 /* call WDI stop */
1688 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001689 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1690
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1696 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 status = VOS_STATUS_E_FAILURE;
1698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 return status;
1700}
Jeff Johnson295189b2012-06-20 16:38:30 -07001701/*
1702 * FUNCTION: WDA_close
1703 * call WDI_close and free the WDA context
1704 */
1705VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1706{
Jeff Johnson43971f52012-07-17 12:26:56 -07001707 VOS_STATUS status = VOS_STATUS_SUCCESS;
1708 WDI_Status wstatus;
1709 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 if (NULL == wdaContext)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 return VOS_STATUS_E_FAILURE;
1716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1718 (WDA_STOP_STATE != wdaContext->wdaState))
1719 {
1720 VOS_ASSERT(0);
1721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001723 wstatus = WDI_Close();
1724 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 {
1726 status = VOS_STATUS_E_FAILURE;
1727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001729 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001730 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1731 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "WDI Sync Event destroy failed - status = %d\n", status);
1735 status = VOS_STATUS_E_FAILURE;
1736 }
1737
Jeff Johnson43971f52012-07-17 12:26:56 -07001738 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001739 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "VOS Event destroy failed - status = %d\n", status);
1743 status = VOS_STATUS_E_FAILURE;
1744 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001745 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001746 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "VOS Event destroy failed - status = %d\n", status);
1750 status = VOS_STATUS_E_FAILURE;
1751 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001752 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001753 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "VOS Event destroy failed - status = %d\n", status);
1757 status = VOS_STATUS_E_FAILURE;
1758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001760 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001761 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "error in WDA close " );
1765 status = VOS_STATUS_E_FAILURE;
1766 }
1767 return status;
1768}
Jeff Johnson295189b2012-06-20 16:38:30 -07001769/*
1770 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1771 * returns 1 if the compiled version is greater than or equal to the input version
1772 */
1773
1774uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1775{
1776 VOS_STATUS status = VOS_STATUS_SUCCESS;
1777 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1778 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001779 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1781 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1782 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1783 (compiledVersion.revision >= revision)))
1784 return 1;
1785 else
1786 return 0;
1787}
Jeff Johnson295189b2012-06-20 16:38:30 -07001788/*
1789 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1790 * returns 1 if the compiled version is greater than or equal to the input version
1791 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001792uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1793{
1794 VOS_STATUS status = VOS_STATUS_SUCCESS;
1795 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1796 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1799 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1800 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1801 (reportedVersion.revision >= revision)))
1802 return 1;
1803 else
1804 return 0;
1805}
Jeff Johnson295189b2012-06-20 16:38:30 -07001806/*
1807 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1808 * Returns the version of the WCNSS WLAN API with which the HOST
1809 * device driver was compiled
1810 */
1811VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1812 tSirVersionType *pVersion)
1813{
1814 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001816 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001817 if ((NULL == pvosGCtx) || (NULL == pVersion))
1818 {
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001820 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001821 VOS_ASSERT(0);
1822 return VOS_STATUS_E_FAILURE;
1823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1825 if (NULL == pWDA )
1826 {
1827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001828 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 VOS_ASSERT(0);
1830 return VOS_STATUS_E_FAILURE;
1831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001832 *pVersion = pWDA->wcnssWlanCompiledVersion;
1833 return VOS_STATUS_SUCCESS;
1834}
Jeff Johnson295189b2012-06-20 16:38:30 -07001835/*
1836 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1837 * Returns the version of the WCNSS WLAN API with which the WCNSS
1838 * device driver was compiled
1839 */
1840VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1841 tSirVersionType *pVersion)
1842{
1843 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001845 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 if ((NULL == pvosGCtx) || (NULL == pVersion))
1847 {
1848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001849 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001850 VOS_ASSERT(0);
1851 return VOS_STATUS_E_FAILURE;
1852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1854 if (NULL == pWDA )
1855 {
1856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001857 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 VOS_ASSERT(0);
1859 return VOS_STATUS_E_FAILURE;
1860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 *pVersion = pWDA->wcnssWlanReportedVersion;
1862 return VOS_STATUS_SUCCESS;
1863}
Jeff Johnson295189b2012-06-20 16:38:30 -07001864/*
1865 * FUNCTION: WDA_GetWcnssSoftwareVersion
1866 * Returns the WCNSS Software version string
1867 */
1868VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1869 tANI_U8 *pVersion,
1870 tANI_U32 versionBufferSize)
1871{
1872 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001874 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 if ((NULL == pvosGCtx) || (NULL == pVersion))
1876 {
1877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001878 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 VOS_ASSERT(0);
1880 return VOS_STATUS_E_FAILURE;
1881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001882 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1883 if (NULL == pWDA )
1884 {
1885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001886 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 VOS_ASSERT(0);
1888 return VOS_STATUS_E_FAILURE;
1889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001890 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1891 return VOS_STATUS_SUCCESS;
1892}
Jeff Johnson295189b2012-06-20 16:38:30 -07001893/*
1894 * FUNCTION: WDA_GetWcnssHardwareVersion
1895 * Returns the WCNSS Hardware version string
1896 */
1897VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1898 tANI_U8 *pVersion,
1899 tANI_U32 versionBufferSize)
1900{
1901 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001903 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 if ((NULL == pvosGCtx) || (NULL == pVersion))
1905 {
1906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001907 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001908 VOS_ASSERT(0);
1909 return VOS_STATUS_E_FAILURE;
1910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001911 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1912 if (NULL == pWDA )
1913 {
1914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001915 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 VOS_ASSERT(0);
1917 return VOS_STATUS_E_FAILURE;
1918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001919 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1920 return VOS_STATUS_SUCCESS;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_WniCfgDnld
1924 * Trigger CFG Download
1925 */
1926VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1927{
1928 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001930 v_VOID_t *pFileImage = NULL;
1931 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 v_VOID_t *pCfgBinary = NULL;
1933 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001935
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 if (NULL == pMac )
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 VOS_ASSERT(0);
1941 return VOS_STATUS_E_FAILURE;
1942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 /* get the number of bytes in the CFG Binary... */
1944 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1945 &cbFileImageSize );
1946 if ( VOS_STATUS_E_NOMEM != vosStatus )
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1949 "Error obtaining binary size" );
1950 goto fail;
1951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 // malloc a buffer to read in the Configuration binary file.
1953 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 if ( NULL == pFileImage )
1955 {
1956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1957 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1958 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 vosStatus = VOS_STATUS_E_NOMEM;
1960 goto fail;
1961 }
1962
1963 /* Get the entire CFG file image... */
1964 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1965 &cbFileImageSize );
1966 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1967 {
1968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1969 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1970 cbFileImageSize );
1971 goto fail;
1972 }
1973
1974 /*
1975 * Validate the binary image. This function will return a pointer
1976 * and length where the CFG binary is located within the binary image file.
1977 */
1978 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1979 &pCfgBinary, &cbCfgBinarySize );
1980 if ( VOS_FALSE == bStatus )
1981 {
1982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1983 "Error: Cannot find STA CFG in binary image file" );
1984 vosStatus = VOS_STATUS_E_FAILURE;
1985 goto fail;
1986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 /*
1988 * TODO: call the config download function
1989 * for now calling the existing cfg download API
1990 */
1991 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07001992 vosStatus = VOS_STATUS_SUCCESS;
1993
1994 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07001995
1996fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07001997 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 return vosStatus;
1999}
Jeff Johnson295189b2012-06-20 16:38:30 -07002000/* -----------------------------------------------------------------
2001 * WDI interface
2002 * -----------------------------------------------------------------
2003 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002004/*
2005 * FUNCTION: WDA_suspendDataTxCallback
2006 * call back function called from TL after suspend Transmission
2007 */
2008VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2009 v_U8_t* ucSTAId,
2010 VOS_STATUS vosStatus)
2011{
2012 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002014 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002015 if (NULL == pWDA )
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002018 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 VOS_ASSERT(0);
2020 return VOS_STATUS_E_FAILURE;
2021 }
2022 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2023 {
2024 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2025 }
2026 else
2027 {
2028 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 /* Trigger the event to bring the WDA TL suspend function to come
2031 * out of wait*/
2032 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2033 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 /* If TL suspended had timedout before this callback was called, resume back
2039 * TL.*/
2040 if (pWDA->txSuspendTimedOut)
2041 {
2042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2043 "Late TLSuspendCallback, resuming TL back again\n");
2044 WDA_ResumeDataTx(pWDA);
2045 pWDA->txSuspendTimedOut = FALSE;
2046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 return VOS_STATUS_SUCCESS;
2048}
Jeff Johnson295189b2012-06-20 16:38:30 -07002049/*
2050 * FUNCTION: WDA_suspendDataTx
2051 * Update TL to suspend the data Transmission
2052 */
2053VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2054{
2055 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2056 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002057
2058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002059 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 if (pWDA->txSuspendTimedOut)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "TL suspend timedout previously, CB not called yet\n");
2065 return status;
2066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 /* Reset the event to be not signalled */
2068 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2069 if(!VOS_IS_STATUS_SUCCESS(status))
2070 {
2071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2072 "VOS Event reset failed - status = %d\n",status);
2073 return VOS_STATUS_E_FAILURE;
2074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002076 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 WDA_SuspendDataTxCallback);
2078 if(status != VOS_STATUS_SUCCESS)
2079 {
2080 return status;
2081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 /* Wait for the event to be set by the TL, to get the response of
2083 * suspending the TX queues, this event should be set by the Callback
2084 * function called by TL*/
2085 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2086 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2087 if(!VOS_IS_STATUS_SUCCESS(status))
2088 {
2089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2090 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002091 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 /* Set this flag to true when TL suspend times out, so that when TL
2093 * suspend eventually happens and calls the callback, TL can be resumed
2094 * right away by looking at this flag when true.*/
2095 pWDA->txSuspendTimedOut = TRUE;
2096 }
2097 else
2098 {
2099 pWDA->txSuspendTimedOut = FALSE;
2100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2102 {
2103 status = VOS_STATUS_SUCCESS;
2104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return status;
2106}
Jeff Johnson295189b2012-06-20 16:38:30 -07002107/*
2108 * FUNCTION: WDA_resumeDataTx
2109 * Update TL to resume the data Transmission
2110 */
2111VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2112{
2113 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002116 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002117
2118 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return status;
2120}
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_InitScanReqCallback
2123 * Trigger Init SCAN callback
2124 */
2125void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2126{
2127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2128 tWDA_CbContext *pWDA;
2129 tInitScanParams *pWDA_ScanParam ;
2130 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 if(NULL == pWdaParams)
2134 {
2135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 VOS_ASSERT(0) ;
2138 return ;
2139 }
2140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2141 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 if(NULL == pWDA_ScanParam)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002146 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2148 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 return ;
2150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 if(WDI_STATUS_SUCCESS != wdiStatus)
2152 {
2153 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 if(VOS_STATUS_SUCCESS != status)
2155 {
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002157 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 }
2159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 /* free WDI command buffer */
2161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164
2165 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002166 /* without converting the Status to Failure or Success Just
2167 pass the same status to lim */
2168 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 /* send SCAN RSP message back to PE */
2170 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 return ;
2172}
2173
2174/*
2175 * FUNCTION: WDA_ProcessInitScanReq
2176 * Trigger Init SCAN in DAL
2177 */
2178VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2179 tInitScanParams *initScanParams)
2180{
2181 WDI_Status status = WDI_STATUS_SUCCESS ;
2182 WDI_InitScanReqParamsType *wdiInitScanParam =
2183 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2184 sizeof(WDI_InitScanReqParamsType)) ;
2185 tWDA_ReqParams *pWdaParams;
2186 tANI_U8 i = 0;
2187
2188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if(NULL == wdiInitScanParam)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0);
2195 return VOS_STATUS_E_NOMEM;
2196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2198 if(NULL == pWdaParams)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 VOS_ASSERT(0);
2203 vos_mem_free(wdiInitScanParam);
2204 return VOS_STATUS_E_NOMEM;
2205 }
2206
2207 /* Copy init Scan params to WDI structure */
2208 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2209 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2210 sizeof(tSirMacAddr)) ;
2211 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2212 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2213 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2215 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2217 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2219 {
2220 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2221 initScanParams->scanEntry.bssIdx[i] ;
2222 }
2223
2224 /* if Frame length, copy macMgmtHdr or WDI structure */
2225 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2226 {
2227 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2228 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2229 }
2230 wdiInitScanParam->wdiReqStatusCB = NULL ;
2231
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 /* Store Init Req pointer, as this will be used for response */
2233 pWdaParams->pWdaContext = pWDA;
2234 pWdaParams->wdaMsgParam = initScanParams;
2235 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 /* first try to suspend TX */
2237 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if(WDI_STATUS_SUCCESS != status)
2239 {
2240 goto handleWdiFailure;
2241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 /* call DAL API to pass init scan request to DAL */
2243 status = WDI_InitScanReq(wdiInitScanParam,
2244 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 if(IS_WDI_STATUS_FAILURE(status))
2246 {
2247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2248 "error in WDA Init Scan, Resume Tx " );
2249 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0) ;
2251
2252 goto handleWdiFailure;
2253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255handleWdiFailure:
2256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2257 "Failure in WDI Api, free all the memory " );
2258 /* free WDI command buffer */
2259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 /* send Failure to PE */
2262 initScanParams->status = eSIR_FAILURE ;
2263 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 return CONVERT_WDI2VOS_STATUS(status) ;
2265}
2266
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_StartScanReqCallback
2269 * send Start SCAN RSP back to PE
2270 */
2271void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2272 void* pUserData)
2273{
2274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2275 tWDA_CbContext *pWDA;
2276 tStartScanParams *pWDA_ScanParam;
2277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 if(NULL == pWdaParams)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 VOS_ASSERT(0) ;
2284 return ;
2285 }
2286 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2287 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 if(NULL == pWDA_ScanParam)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002291 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002293 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 return ;
2295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2297 {
2298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002299 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002301 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 return ;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2305 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002306
Jeff Johnson295189b2012-06-20 16:38:30 -07002307
2308 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002309 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* send SCAN RSP message back to PE */
2311 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 return ;
2313}
2314
Jeff Johnson295189b2012-06-20 16:38:30 -07002315/*
2316 * FUNCTION: WDA_ProcessStartScanReq
2317 * Trigger start SCAN in WDI
2318 */
2319VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2320 tStartScanParams *startScanParams)
2321{
2322 WDI_Status status = WDI_STATUS_SUCCESS;
2323 WDI_StartScanReqParamsType *wdiStartScanParams =
2324 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2325 sizeof(WDI_StartScanReqParamsType)) ;
2326 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 if(NULL == wdiStartScanParams)
2330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 VOS_ASSERT(0);
2334 return VOS_STATUS_E_NOMEM;
2335 }
2336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2337 if(NULL == pWdaParams)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0);
2342 vos_mem_free(wdiStartScanParams);
2343 return VOS_STATUS_E_NOMEM;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 /* Copy init Scan params to WDI structure */
2346 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2347 wdiStartScanParams->wdiReqStatusCB = NULL ;
2348
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 /* Store Init Req pointer, as this will be used for response */
2350 /* store Params pass it to WDI */
2351 pWdaParams->pWdaContext = pWDA;
2352 pWdaParams->wdaMsgParam = startScanParams;
2353 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 /* call DAL API to pass init scan request to DAL */
2355 status = WDI_StartScanReq(wdiStartScanParams,
2356 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 /* failure returned by WDI API */
2358 if(IS_WDI_STATUS_FAILURE(status))
2359 {
2360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2361 "Failure in Start Scan WDI API, free all the memory "
2362 "It should be due to previous abort scan." );
2363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2364 vos_mem_free(pWdaParams) ;
2365 startScanParams->status = eSIR_FAILURE ;
2366 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 return CONVERT_WDI2VOS_STATUS(status) ;
2369}
Jeff Johnson295189b2012-06-20 16:38:30 -07002370/*
2371 * FUNCTION: WDA_EndScanReqCallback
2372 * END SCAN callback
2373 */
2374void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2375{
2376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2377 tWDA_CbContext *pWDA;
2378 tEndScanParams *endScanParam;
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002380 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if(NULL == pWdaParams)
2382 {
2383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0) ;
2386 return ;
2387 }
2388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2389 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 if(NULL == endScanParam)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002393 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2396 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 return ;
2398 }
2399
2400 /* Free WDI command buffer */
2401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2402 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002404 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 /* send response back to PE */
2406 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2407 return ;
2408}
2409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410/*
2411 * FUNCTION: WDA_ProcessEndScanReq
2412 * Trigger END SCAN in WDI
2413 */
2414VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2415 tEndScanParams *endScanParams)
2416{
2417 WDI_Status status = WDI_STATUS_SUCCESS;
2418 WDI_EndScanReqParamsType *wdiEndScanParams =
2419 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2420 sizeof(WDI_EndScanReqParamsType)) ;
2421 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if(NULL == wdiEndScanParams)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0);
2429 return VOS_STATUS_E_NOMEM;
2430 }
2431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2432 if(NULL == pWdaParams)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0);
2437 vos_mem_free(wdiEndScanParams);
2438 return VOS_STATUS_E_NOMEM;
2439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /* Copy init Scan params to WDI structure */
2441 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2442 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 /* Store Init Req pointer, as this will be used for response */
2444 /* store Params pass it to WDI */
2445 pWdaParams->pWdaContext = pWDA;
2446 pWdaParams->wdaMsgParam = endScanParams;
2447 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 /* call DAL API to pass init scan request to DAL */
2449 status = WDI_EndScanReq(wdiEndScanParams,
2450 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 if(IS_WDI_STATUS_FAILURE(status))
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failure in End Scan WDI API, free all the memory "
2455 "It should be due to previous abort scan." );
2456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2457 vos_mem_free(pWdaParams) ;
2458 endScanParams->status = eSIR_FAILURE ;
2459 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 return CONVERT_WDI2VOS_STATUS(status) ;
2462}
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_FinishScanReqCallback
2465 * Trigger Finish SCAN callback
2466 */
2467void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2468{
2469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2470 tWDA_CbContext *pWDA;
2471 tFinishScanParams *finishScanParam;
2472 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(NULL == pWdaParams)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0) ;
2480 return ;
2481 }
2482
2483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2484 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 if(NULL == finishScanParam)
2486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return ;
2493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2495 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 /*
2497 * Now Resume TX, if we reached here means, TX is already suspended, we
2498 * have to resume it unconditionaly
2499 */
2500 status = WDA_ResumeDataTx(pWDA) ;
2501
2502 if(VOS_STATUS_SUCCESS != status)
2503 {
2504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002505 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002507 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2509 return ;
2510}
Jeff Johnson295189b2012-06-20 16:38:30 -07002511/*
2512 * FUNCTION: WDA_ProcessFinshScanReq
2513 * Trigger Finish SCAN in WDI
2514 */
2515VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2516 tFinishScanParams *finishScanParams)
2517{
2518 WDI_Status status = WDI_STATUS_SUCCESS;
2519 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2520 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2521 sizeof(WDI_FinishScanReqParamsType)) ;
2522 tWDA_ReqParams *pWdaParams ;
2523 tANI_U8 i = 0;
2524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 if(NULL == wdiFinishScanParams)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_ASSERT(0);
2531 return VOS_STATUS_E_NOMEM;
2532 }
2533 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2534 if(NULL == pWdaParams)
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0);
2539 vos_mem_free(wdiFinishScanParams);
2540 return VOS_STATUS_E_NOMEM;
2541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 /* Copy init Scan params to WDI structure */
2543 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2544 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2545 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2547 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2548 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2549 finishScanParams->frameLength ;
2550 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2551 finishScanParams->currentOperChannel ;
2552 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2553 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2554 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2556 {
2557 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2558 finishScanParams->scanEntry.bssIdx[i] ;
2559 }
2560
2561
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* if Frame length, copy macMgmtHdr ro WDI structure */
2563 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2564 {
2565 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2566 &finishScanParams->macMgmtHdr,
2567 sizeof(WDI_MacMgmtHdr)) ;
2568 }
2569 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Store Init Req pointer, as this will be used for response */
2571 /* store Params pass it to WDI */
2572 pWdaParams->pWdaContext = pWDA;
2573 pWdaParams->wdaMsgParam = finishScanParams;
2574 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 /* call DAL API to pass init scan request to DAL */
2576 status = WDI_FinishScanReq(wdiFinishScanParams,
2577 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002578
Jeff Johnson295189b2012-06-20 16:38:30 -07002579
2580 /*
2581 * WDI API returns failure..
2582 */
2583 if(IS_WDI_STATUS_FAILURE( status))
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "Failure in Finish Scan WDI API, free all the memory " );
2587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2588 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 finishScanParams->status = eSIR_FAILURE ;
2590 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return CONVERT_WDI2VOS_STATUS(status) ;
2593}
Jeff Johnson295189b2012-06-20 16:38:30 -07002594/*---------------------------------------------------------------------
2595 * ASSOC API's
2596 *---------------------------------------------------------------------
2597 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/*
2599 * FUNCTION: WDA_JoinReqCallback
2600 * Trigger Init SCAN callback
2601 */
2602void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2603{
2604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2605 tWDA_CbContext *pWDA;
2606 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(NULL == pWdaParams)
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 VOS_ASSERT(0) ;
2614 return ;
2615 }
2616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2617 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2619 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 /* reset macBSSID */
2621 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* reset macSTASelf */
2623 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002624 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 return ;
2627}
Jeff Johnson295189b2012-06-20 16:38:30 -07002628/*
2629 * FUNCTION: WDA_ProcessJoinReq
2630 * Trigger Join REQ in WDI
2631 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002632VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2633 tSwitchChannelParams* joinReqParam)
2634{
2635 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 WDI_JoinReqParamsType *wdiJoinReqParam =
2637 (WDI_JoinReqParamsType *)vos_mem_malloc(
2638 sizeof(WDI_JoinReqParamsType)) ;
2639 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002641 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 if(NULL == wdiJoinReqParam)
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002647 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return VOS_STATUS_E_NOMEM;
2649 }
2650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2651 if(NULL == pWdaParams)
2652 {
2653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 VOS_ASSERT(0);
2656 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002657 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 return VOS_STATUS_E_NOMEM;
2659 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002660
2661 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2662 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2663 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2664 {
2665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2666 "%s: received join request when BSSID or self-STA is NULL "
2667 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002669 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2670 VOS_ASSERT(0);
2671 vos_mem_free(wdiJoinReqParam);
2672 vos_mem_free(pWdaParams);
2673 joinReqParam->status = eSIR_FAILURE ;
2674 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2675 return VOS_STATUS_E_INVAL;
2676 }
2677
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 /* copy the BSSID for pWDA */
2679 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2680 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2682 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2684 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002685#ifdef WLAN_FEATURE_VOWIFI
2686 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2687 joinReqParam->maxTxPower ;
2688#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2690 joinReqParam->localPowerConstraint ;
2691#endif
2692 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2693 joinReqParam->secondaryChannelOffset ;
2694 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2695
2696 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 /* Store Init Req pointer, as this will be used for response */
2698 /* store Params pass it to WDI */
2699 pWdaParams->pWdaContext = pWDA;
2700 pWdaParams->wdaMsgParam = joinReqParam;
2701 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 status = WDI_JoinReq(wdiJoinReqParam,
2703 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(IS_WDI_STATUS_FAILURE(status))
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2707 "Failure in Join WDI API, free all the memory " );
2708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2709 vos_mem_free(pWdaParams) ;
2710 joinReqParam->status = eSIR_FAILURE ;
2711 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 return CONVERT_WDI2VOS_STATUS(status) ;
2714}
Jeff Johnson295189b2012-06-20 16:38:30 -07002715/*
2716 * FUNCTION: WDA_SwitchChannelReqCallback
2717 * send Switch channel RSP back to PE
2718 */
2719void WDA_SwitchChannelReqCallback(
2720 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2721{
2722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2723 tWDA_CbContext *pWDA;
2724 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 if(NULL == pWdaParams)
2728 {
2729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 VOS_ASSERT(0) ;
2732 return ;
2733 }
2734 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2735 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2736
2737#ifdef WLAN_FEATURE_VOWIFI
2738 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2739#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002743 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 return ;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_ProcessChannelSwitchReq
2749 * Request to WDI to switch channel REQ params.
2750 */
2751VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2752 tSwitchChannelParams *pSwitchChanParams)
2753{
2754 WDI_Status status = WDI_STATUS_SUCCESS ;
2755 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2756 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2757 sizeof(WDI_SwitchChReqParamsType)) ;
2758 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if(NULL == wdiSwitchChanParam)
2762 {
2763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_NOMEM;
2767 }
2768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2769 if(NULL == pWdaParams)
2770 {
2771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0);
2774 vos_mem_free(wdiSwitchChanParam);
2775 return VOS_STATUS_E_NOMEM;
2776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2778#ifndef WLAN_FEATURE_VOWIFI
2779 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2780 pSwitchChanParams->localPowerConstraint;
2781#endif
2782 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2783 pSwitchChanParams->secondaryChannelOffset;
2784 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 /* Store req pointer, as this will be used for response */
2786 /* store Params pass it to WDI */
2787 pWdaParams->pWdaContext = pWDA;
2788 pWdaParams->wdaMsgParam = pSwitchChanParams;
2789 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790#ifdef WLAN_FEATURE_VOWIFI
2791 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2792 = pSwitchChanParams->maxTxPower;
2793 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2794 pSwitchChanParams ->selfStaMacAddr,
2795 sizeof(tSirMacAddr));
2796#endif
2797 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2798 pSwitchChanParams->bssId,
2799 sizeof(tSirMacAddr));
2800
2801 status = WDI_SwitchChReq(wdiSwitchChanParam,
2802 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 if(IS_WDI_STATUS_FAILURE(status))
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2806 "Failure in process channel switch Req WDI API, free all the memory " );
2807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
2809 pSwitchChanParams->status = eSIR_FAILURE ;
2810 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 return CONVERT_WDI2VOS_STATUS(status) ;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_ConfigBssReqCallback
2816 * config BSS Req Callback, called by WDI
2817 */
2818void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2819 ,void* pUserData)
2820{
2821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2822 tWDA_CbContext *pWDA;
2823 tAddBssParams *configBssReqParam;
2824 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 if(NULL == pWdaParams)
2828 {
2829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_ASSERT(0) ;
2832 return ;
2833 }
2834 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2835 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2836 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002838 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2840 {
2841 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2842 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2844 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2845 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2846
2847 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2848 {
2849 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2850 {
2851 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2852 staConfigBssParam->staType = STA_ENTRY_BSSID;
2853 }
2854 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2855 (staConfigBssParam->staType == STA_ENTRY_SELF))
2856 {
2857 /* This is the 1st add BSS Req for the BTAMP STA */
2858 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2859 staConfigBssParam->staType = STA_ENTRY_BSSID;
2860 }
2861 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2862 (staConfigBssParam->staType == STA_ENTRY_PEER))
2863 {
2864 /* This is the 2nd ADD BSS Request that is sent
2865 * on the BTAMP STA side. The Sta type is
2866 * set to STA_ENTRY_PEER here.*/
2867 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2868 }
2869 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2870 (staConfigBssParam->staType == STA_ENTRY_SELF))
2871 {
2872 /* statype is already set by PE.
2873 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2874 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2875 staConfigBssParam->staType = STA_ENTRY_BSSID;
2876 }
2877 else
2878 {
2879 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2880 staConfigBssParam->staType = STA_ENTRY_PEER;
2881 }
2882 }
2883 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2884 {
2885 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2886 staConfigBssParam->staType = STA_ENTRY_SELF;
2887 }
2888 else
2889 {
2890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2891 "Invalid operation mode specified");
2892 VOS_ASSERT(0);
2893 }
2894
2895 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2900 sizeof(tSirMacAddr));
2901 staConfigBssParam->txChannelWidthSet =
2902 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2904 staConfigBssParam->htCapable)
2905 {
2906 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2907 wdiConfigBssRsp->ucBSSIdx;
2908 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2909 WDA_VALID_STA_INDEX ;
2910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2912 wdiConfigBssRsp->ucBSSIdx,
2913 wdiConfigBssRsp->ucSTAIdx))
2914 {
2915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002916 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 VOS_ASSERT(0) ;
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0) ;
2924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002925#ifdef WLAN_FEATURE_VOWIFI
2926 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2927#endif
2928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2930 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return ;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_UpdateEdcaParamsForAC
2936 * Update WDI EDCA params with PE edca params
2937 */
2938void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2939 WDI_EdcaParamRecord *wdiEdcaParam,
2940 tSirMacEdcaParamRecord *macEdcaParam)
2941{
2942 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2943 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2944 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2945 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2946 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2947 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2948}
Jeff Johnson295189b2012-06-20 16:38:30 -07002949/*
2950 * FUNCTION: WDA_ProcessConfigBssReq
2951 * Configure BSS before starting Assoc with AP
2952 */
2953VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2954 tAddBssParams* configBssReqParam)
2955{
2956 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2958 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2959 sizeof(WDI_ConfigBSSReqParamsType)) ;
2960 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002962 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 if(NULL == wdiConfigBssReqParam)
2964 {
2965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 VOS_ASSERT(0);
2968 return VOS_STATUS_E_NOMEM;
2969 }
2970 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2971 if(NULL == pWdaParams)
2972 {
2973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 VOS_ASSERT(0);
2976 vos_mem_free(wdiConfigBssReqParam);
2977 return VOS_STATUS_E_NOMEM;
2978 }
Kiran4a17ebe2013-01-31 10:43:43 -08002979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2980 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2983 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 /* Store Init Req pointer, as this will be used for response */
2985 /* store Params pass it to WDI */
2986 pWdaParams->pWdaContext = pWDA;
2987 pWdaParams->wdaMsgParam = configBssReqParam;
2988 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2990 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(IS_WDI_STATUS_FAILURE(status))
2992 {
2993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2994 "Failure in Config BSS WDI API, free all the memory " );
2995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2996 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return CONVERT_WDI2VOS_STATUS(status) ;
3001}
Jeff Johnson295189b2012-06-20 16:38:30 -07003002#ifdef ENABLE_HAL_COMBINED_MESSAGES
3003/*
3004 * FUNCTION: WDA_PostAssocReqCallback
3005 * Post ASSOC req callback, send RSP back to PE
3006 */
3007void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3008 void* pUserData)
3009{
3010 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3011 tPostAssocParams *postAssocReqParam =
3012 (tPostAssocParams *)pWDA->wdaMsgParam ;
3013 /*STA context within the BSS Params*/
3014 tAddStaParams *staPostAssocParam =
3015 &postAssocReqParam->addBssParams.staContext ;
3016 /*STA Params for self STA*/
3017 tAddStaParams *selfStaPostAssocParam =
3018 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003022 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3024 {
3025 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3026 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3027 sizeof(tSirMacAddr)) ;
3028 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3029 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3030 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3032 }
3033 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3034 pWDA->wdaWdiApiMsgParam = NULL;
3035 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 return ;
3038}
Jeff Johnson295189b2012-06-20 16:38:30 -07003039/*
3040 * FUNCTION: WDA_ProcessPostAssocReq
3041 * Trigger POST ASSOC processing in WDI
3042 */
3043VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3044 tPostAssocParams *postAssocReqParam)
3045{
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 WDI_Status status = WDI_STATUS_SUCCESS ;
3047
3048 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3049 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3050 sizeof(WDI_PostAssocReqParamsType)) ;
3051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003052 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003053
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(NULL == wdiPostAssocReqParam)
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0);
3059 return VOS_STATUS_E_NOMEM;
3060 }
3061
3062 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3063 {
3064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 VOS_ASSERT(0);
3067 return VOS_STATUS_E_FAILURE;
3068 }
3069
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 /* update BSS params into WDI structure */
3071 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3072 &postAssocReqParam->addBssParams) ;
3073 /* update STA params into WDI structure */
3074 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3075 &postAssocReqParam->addStaParams) ;
3076
3077 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3078 postAssocReqParam->addBssParams.highPerformance;
3079 WDA_UpdateEdcaParamsForAC(pWDA,
3080 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3081 &postAssocReqParam->addBssParams.acbe);
3082 WDA_UpdateEdcaParamsForAC(pWDA,
3083 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3084 &postAssocReqParam->addBssParams.acbk);
3085 WDA_UpdateEdcaParamsForAC(pWDA,
3086 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3087 &postAssocReqParam->addBssParams.acvi);
3088 WDA_UpdateEdcaParamsForAC(pWDA,
3089 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3090 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 /* Store Init Req pointer, as this will be used for response */
3092 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 /* store Params pass it to WDI */
3094 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3096 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 if(IS_WDI_STATUS_FAILURE(status))
3098 {
3099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3100 "Failure in Post Assoc WDI API, free all the memory " );
3101 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3102 pWDA->wdaWdiApiMsgParam = NULL;
3103 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 return CONVERT_WDI2VOS_STATUS(status) ;
3108}
3109#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003110/*
3111 * FUNCTION: WDA_AddStaReqCallback
3112 * ADD STA req callback, send RSP back to PE
3113 */
3114void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3115 void* pUserData)
3116{
3117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3118 tWDA_CbContext *pWDA;
3119 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003121 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 if(NULL == pWdaParams)
3123 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 VOS_ASSERT(0) ;
3126 return ;
3127 }
3128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3129 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003131 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3133 {
3134 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3135 /*TODO: UMAC structure doesn't have these fields*/
3136 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3137 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3138 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3139 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3140 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3141 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003142#ifdef FEATURE_WLAN_TDLS
3143 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3144 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3145#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003147#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 {
3149 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3150 wdiConfigStaRsp->ucBssIdx;
3151 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3152 WDA_VALID_STA_INDEX ;
3153 }
3154 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0) ;
3159 return ;
3160 }
3161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3163 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 return ;
3166}
Jeff Johnson295189b2012-06-20 16:38:30 -07003167/*
3168 * FUNCTION: WDA_ConfigStaReq
3169 * Trigger Config STA processing in WDI
3170 */
3171VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3172 tAddStaParams *addStaReqParam)
3173{
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3176 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3177 sizeof(WDI_ConfigSTAReqParamsType)) ;
3178 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003180 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 if(NULL == wdiConfigStaReqParam)
3182 {
3183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_ASSERT(0);
3186 return VOS_STATUS_E_NOMEM;
3187 }
3188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3189 if(NULL == pWdaParams)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0);
3194 vos_mem_free(wdiConfigStaReqParam);
3195 return VOS_STATUS_E_NOMEM;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 /* update STA params into WDI structure */
3199 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3200 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 /* Store Init Req pointer, as this will be used for response */
3202 /* store Params pass it to WDI */
3203 pWdaParams->pWdaContext = pWDA;
3204 pWdaParams->wdaMsgParam = addStaReqParam;
3205 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3207 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(IS_WDI_STATUS_FAILURE(status))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3211 "Failure in Config STA WDI API, free all the memory " );
3212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3213 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 return CONVERT_WDI2VOS_STATUS(status) ;
3218}
Jeff Johnson295189b2012-06-20 16:38:30 -07003219/*
3220 * FUNCTION: WDA_DelBSSReqCallback
3221 * Dens DEL BSS RSP back to PE
3222 */
3223void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3224 void* pUserData)
3225{
3226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3227 tWDA_CbContext *pWDA;
3228 tDeleteBssParams *delBssReqParam;
3229 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 if(NULL == pWdaParams)
3233 {
3234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 VOS_ASSERT(0) ;
3237 return ;
3238 }
3239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3240 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003241 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3243 {
3244 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3245 sizeof(tSirMacAddr)) ;
3246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_ASSERT(0) ;
3252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003256 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_ASSERT(0) ;
3258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0) ;
3264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* reset the the system role*/
3268 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3269
3270 /* Reset the BA related information */
3271 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3272 {
3273 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3274 {
3275 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3276 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3277 /* Reset framesTxed counters here */
3278 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3279 {
3280 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3281 }
3282 }
3283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 return ;
3286}
3287
Jeff Johnson295189b2012-06-20 16:38:30 -07003288/*
3289 * FUNCTION: WDA_ProcessDelBssReq
3290 * Init DEL BSS req with WDI
3291 */
3292VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3293 tDeleteBssParams *delBssParam)
3294{
3295 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3297 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3298 sizeof(WDI_DelBSSReqParamsType)) ;
3299 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == wdiDelBssReqParam)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0);
3307 return VOS_STATUS_E_NOMEM;
3308 }
3309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3310 if(NULL == pWdaParams)
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0);
3315 vos_mem_free(wdiDelBssReqParam);
3316 return VOS_STATUS_E_NOMEM;
3317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3319 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3320
3321 /* Store Init Req pointer, as this will be used for response */
3322 /* store Params pass it to WDI */
3323 pWdaParams->pWdaContext = pWDA;
3324 pWdaParams->wdaMsgParam = delBssParam;
3325 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 status = WDI_DelBSSReq(wdiDelBssReqParam,
3327 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(IS_WDI_STATUS_FAILURE(status))
3329 {
3330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3331 "Failure in Del BSS WDI API, free all the memory " );
3332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3333 vos_mem_free(pWdaParams) ;
3334 delBssParam->status = eSIR_FAILURE ;
3335 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 return CONVERT_WDI2VOS_STATUS(status) ;
3338}
Jeff Johnson295189b2012-06-20 16:38:30 -07003339/*
3340 * FUNCTION: WDA_DelSTAReqCallback
3341 * Dens DEL STA RSP back to PE
3342 */
3343void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3344 void* pUserData)
3345{
3346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3347 tWDA_CbContext *pWDA;
3348 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 if(NULL == pWdaParams)
3352 {
3353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 VOS_ASSERT(0) ;
3356 return ;
3357 }
3358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3359 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003360 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3362 {
3363 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3364 {
3365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003366 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 VOS_ASSERT(0) ;
3368 }
3369 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3370 }
3371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3372 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 /*Reset the BA information corresponding to this STAIdx */
3374 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3375 WDA_INVALID_STA_INDEX;
3376 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3377
3378 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 return ;
3380}
Jeff Johnson295189b2012-06-20 16:38:30 -07003381/*
3382 * FUNCTION: WDA_ProcessDelStaReq
3383 * Init DEL STA req with WDI
3384 */
3385VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3386 tDeleteStaParams *delStaParam)
3387{
3388 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3390 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3391 sizeof(WDI_DelSTAReqParamsType)) ;
3392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003394 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 if(NULL == wdiDelStaReqParam)
3396 {
3397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 VOS_ASSERT(0);
3400 return VOS_STATUS_E_NOMEM;
3401 }
3402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3403 if(NULL == pWdaParams)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 vos_mem_free(wdiDelStaReqParam);
3409 return VOS_STATUS_E_NOMEM;
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3412 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 /* Store Init Req pointer, as this will be used for response */
3414 /* store Params pass it to WDI */
3415 pWdaParams->pWdaContext = pWDA;
3416 pWdaParams->wdaMsgParam = delStaParam;
3417 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 status = WDI_DelSTAReq(wdiDelStaReqParam,
3419 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 if(IS_WDI_STATUS_FAILURE(status))
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3423 "Failure in Del STA WDI API, free all the memory status = %d",
3424 status );
3425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3426 vos_mem_free(pWdaParams) ;
3427 delStaParam->status = eSIR_FAILURE ;
3428 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 return CONVERT_WDI2VOS_STATUS(status) ;
3431}
Jeff Johnson295189b2012-06-20 16:38:30 -07003432void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3433{
3434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3435 tWDA_CbContext *pWDA;
3436 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003438 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 if(NULL == pWdaParams)
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003442 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 VOS_ASSERT(0) ;
3444 return ;
3445 }
3446 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3447 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3449 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3451 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3452 pwdiAddSTASelfRsp->macSelfSta,
3453 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 return ;
3456}
Jeff Johnson295189b2012-06-20 16:38:30 -07003457/*
3458 * FUNCTION: WDA_ProcessAddStaSelfReq
3459 *
3460 */
3461VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3462{
3463 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003464 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3466 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3467 sizeof(WDI_AddSTASelfReqParamsType)) ;
3468 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 if( NULL == wdiAddStaSelfReq )
3472 {
3473 VOS_ASSERT( 0 );
3474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003475 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 return( VOS_STATUS_E_NOMEM );
3477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 if( NULL == pWdaParams )
3480 {
3481 VOS_ASSERT( 0 );
3482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003483 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 vos_mem_free(wdiAddStaSelfReq) ;
3485 return( VOS_STATUS_E_NOMEM );
3486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003489 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 /* Store Init Req pointer, as this will be used for response */
3491 /* store Params pass it to WDI */
3492 pWdaParams->pWdaContext = pWDA;
3493 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3494 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003495 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003496
Jeff Johnson43971f52012-07-17 12:26:56 -07003497 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 {
3499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3500 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003501 wstatus );
3502 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3504 vos_mem_free(pWdaParams) ;
3505 pAddStaSelfReq->status = eSIR_FAILURE ;
3506 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3507 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003508 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003509}
Jeff Johnson295189b2012-06-20 16:38:30 -07003510/*
3511 * FUNCTION: WDA_DelSTASelfRespCallback
3512 *
3513 */
3514void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3515 wdiDelStaSelfRspParams , void* pUserData)
3516{
3517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3518 tWDA_CbContext *pWDA;
3519 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003521 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 if (NULL == pWdaParams)
3523 {
3524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003525 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 VOS_ASSERT(0);
3527 return;
3528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3530 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003532 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533
3534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3535 vos_mem_free(pWdaParams) ;
3536
3537 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 return ;
3539}
Jeff Johnson295189b2012-06-20 16:38:30 -07003540/*
3541 * FUNCTION: WDA_DelSTASelfReqCallback
3542 *
3543 */
3544void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3545 void* pUserData)
3546{
3547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3548 tWDA_CbContext *pWDA;
3549 tDelStaSelfParams *delStaSelfParams;
3550
3551 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303552 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003553 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003554
3555 if (NULL == pWdaParams)
3556 {
3557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003558 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 VOS_ASSERT(0);
3560 return;
3561 }
3562
3563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3564 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3565
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003566 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567
3568 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3569 {
3570 VOS_ASSERT(0);
3571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3572 vos_mem_free(pWdaParams) ;
3573 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3574 }
3575
3576 return ;
3577}
3578
3579/*
3580 * FUNCTION: WDA_DelSTASelfReq
3581 * Trigger Config STA processing in WDI
3582 */
3583VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3584 tDelStaSelfParams* pDelStaSelfReqParam)
3585{
3586 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003587 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 tWDA_ReqParams *pWdaParams = NULL;
3589 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3590 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3591 sizeof(WDI_DelSTASelfReqParamsType)) ;
3592
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 if( NULL == wdiDelStaSelfReq )
3596 {
3597 VOS_ASSERT( 0 );
3598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003599 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 return( VOS_STATUS_E_NOMEM );
3601 }
3602
3603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3604 if( NULL == pWdaParams )
3605 {
3606 VOS_ASSERT( 0 );
3607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003608 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 vos_mem_free(wdiDelStaSelfReq) ;
3610 return( VOS_STATUS_E_NOMEM );
3611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 pWdaParams->pWdaContext = pWDA;
3613 /* Store param pointer as passed in by caller */
3614 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3615 /* store Params pass it to WDI */
3616 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3618 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3619
3620 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3621 wdiDelStaSelfReq->pUserData = pWdaParams;
3622
Jeff Johnson43971f52012-07-17 12:26:56 -07003623 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3625
Jeff Johnson43971f52012-07-17 12:26:56 -07003626 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 {
3628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3629 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3630 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003631 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3633 vos_mem_free(pWdaParams) ;
3634 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3635 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3636 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003637 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638}
3639
Jeff Johnson295189b2012-06-20 16:38:30 -07003640/*
3641 * FUNCTION: WDA_SendMsg
3642 * Send Message back to PE
3643 */
3644void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3645 void *pBodyptr, tANI_U32 bodyVal)
3646{
3647 tSirMsgQ msg = {0} ;
3648 tANI_U32 status = VOS_STATUS_SUCCESS ;
3649 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 msg.type = msgType;
3651 msg.bodyval = bodyVal;
3652 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 if (VOS_STATUS_SUCCESS != status)
3655 {
3656 if(NULL != pBodyptr)
3657 {
3658 vos_mem_free(pBodyptr);
3659 }
3660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003661 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 VOS_ASSERT(0) ;
3663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 return ;
3665}
Jeff Johnson295189b2012-06-20 16:38:30 -07003666/*
3667 * FUNCTION: WDA_UpdateBSSParams
3668 * Translated WDA/PE BSS info into WDI BSS info..
3669 */
3670void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3671 WDI_ConfigBSSReqInfoType *wdiBssParams,
3672 tAddBssParams *wdaBssParams)
3673{
3674 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 /* copy bssReq Params to WDI structure */
3676 vos_mem_copy(wdiBssParams->macBSSID,
3677 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3678 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3679 sizeof(tSirMacAddr)) ;
3680 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3681 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3682 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 wdiBssParams->ucShortSlotTimeSupported =
3684 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3686 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3687 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3688 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3689 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3690
3691 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3692 wdiBssParams->ucTXOPProtectionFullSupport =
3693 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3695 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3698 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3699 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3700 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3701
Chet Lanctot186b5732013-03-18 10:26:30 -07003702 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3703
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 /* copy SSID into WDI structure */
3705 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3706 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3707 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3709 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711#ifdef WLAN_FEATURE_VOWIFI
3712 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3713#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003715 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716#ifdef WLAN_FEATURE_VOWIFI_11R
3717 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 if(wdiBssParams->bExtSetStaKeyParamValid)
3719 {
3720 /* copy set STA key params to WDI structure */
3721 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3722 wdaBssParams->extSetStaKeyParam.staIdx;
3723 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3724 wdaBssParams->extSetStaKeyParam.encType;
3725 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3726 wdaBssParams->extSetStaKeyParam.wepType;
3727 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3728 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3730 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003731 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3733 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3734 {
3735 WDA_GetWepKeysFromCfg( pWDA,
3736 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3737 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3738 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3739 }
3740 else
3741 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3743 keyIndex++)
3744 {
3745 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3746 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3747 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3748 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3749 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3750 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3752 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3753 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3754 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3755 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3756 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3757 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3758 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3761 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 }
3763 }
3764 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3765 }
3766 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3767 {
3768 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3769 sizeof(wdaBssParams->extSetStaKeyParam) );
3770 }
3771#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003772#ifdef WLAN_FEATURE_11AC
3773 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3774 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3775#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003776
3777 return ;
3778}
Jeff Johnson295189b2012-06-20 16:38:30 -07003779/*
3780 * FUNCTION: WDA_UpdateSTAParams
3781 * Translated WDA/PE BSS info into WDI BSS info..
3782 */
3783void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3784 WDI_ConfigStaReqInfoType *wdiStaParams,
3785 tAddStaParams *wdaStaParams)
3786{
3787 tANI_U8 i = 0;
3788 /* Update STA params */
3789 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3790 sizeof(tSirMacAddr)) ;
3791 wdiStaParams->usAssocId = wdaStaParams->assocId;
3792 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003793 wdiStaParams->staIdx = wdaStaParams->staIdx;
3794
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 wdiStaParams->ucShortPreambleSupported =
3796 wdaStaParams->shortPreambleSupported;
3797 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3798 sizeof(tSirMacAddr)) ;
3799 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3800
3801 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3802
3803 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3804 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3805 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3806 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3807 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3808 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3809 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3810
3811 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3812 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 wdiStaParams->wdiSupportedRates.opRateMode =
3814 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3816 {
3817 wdiStaParams->wdiSupportedRates.llbRates[i] =
3818 wdaStaParams->supportedRates.llbRates[i];
3819 }
3820 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3821 {
3822 wdiStaParams->wdiSupportedRates.llaRates[i] =
3823 wdaStaParams->supportedRates.llaRates[i];
3824 }
3825 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3826 {
3827 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3828 wdaStaParams->supportedRates.aniLegacyRates[i];
3829 }
3830 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3831 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003832#ifdef WLAN_FEATURE_11AC
3833 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3834 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3835 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3836 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3837#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3839 {
3840 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3841 wdaStaParams->supportedRates.supportedMCSSet[i];
3842 }
3843 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3844 wdaStaParams->supportedRates.rxHighestDataRate;
3845
3846 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3847
3848 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3849
3850 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3851 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3852 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3853
3854 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3855 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3856 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3857 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003859#ifdef WLAN_FEATURE_11AC
3860 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3861 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003862 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003863#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003864 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3865 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 return ;
3867}
Jeff Johnson295189b2012-06-20 16:38:30 -07003868/*
3869 * -------------------------------------------------------------------------
3870 * CFG update to WDI
3871 * -------------------------------------------------------------------------
3872 */
3873
3874 /*
3875 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3876 * Convert the WNI CFG ID to HAL CFG ID
3877 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003878static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003879{
3880 switch(wniCfgId)
3881 {
3882 case WNI_CFG_STA_ID:
3883 return QWLAN_HAL_CFG_STA_ID;
3884 case WNI_CFG_CURRENT_TX_ANTENNA:
3885 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3886 case WNI_CFG_CURRENT_RX_ANTENNA:
3887 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3888 case WNI_CFG_LOW_GAIN_OVERRIDE:
3889 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3890 case WNI_CFG_POWER_STATE_PER_CHAIN:
3891 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3892 case WNI_CFG_CAL_PERIOD:
3893 return QWLAN_HAL_CFG_CAL_PERIOD;
3894 case WNI_CFG_CAL_CONTROL:
3895 return QWLAN_HAL_CFG_CAL_CONTROL;
3896 case WNI_CFG_PROXIMITY:
3897 return QWLAN_HAL_CFG_PROXIMITY;
3898 case WNI_CFG_NETWORK_DENSITY:
3899 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3900 case WNI_CFG_MAX_MEDIUM_TIME:
3901 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3902 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3903 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3904 case WNI_CFG_RTS_THRESHOLD:
3905 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3906 case WNI_CFG_SHORT_RETRY_LIMIT:
3907 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3908 case WNI_CFG_LONG_RETRY_LIMIT:
3909 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3910 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3911 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3912 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3913 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3914 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3915 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3916 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3917 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3918 case WNI_CFG_FIXED_RATE:
3919 return QWLAN_HAL_CFG_FIXED_RATE;
3920 case WNI_CFG_RETRYRATE_POLICY:
3921 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3922 case WNI_CFG_RETRYRATE_SECONDARY:
3923 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3924 case WNI_CFG_RETRYRATE_TERTIARY:
3925 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3926 case WNI_CFG_FORCE_POLICY_PROTECTION:
3927 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3928 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3929 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3930 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3931 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3932 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3933 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3934 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3935 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3936 case WNI_CFG_MAX_BA_SESSIONS:
3937 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3938 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3939 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3940 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3941 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3942 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3943 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3944 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3945 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3946 case WNI_CFG_STATS_PERIOD:
3947 return QWLAN_HAL_CFG_STATS_PERIOD;
3948 case WNI_CFG_CFP_MAX_DURATION:
3949 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3950#if 0 /*This is not part of CFG*/
3951 case WNI_CFG_FRAME_TRANS_ENABLED:
3952 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3953#endif
3954 case WNI_CFG_DTIM_PERIOD:
3955 return QWLAN_HAL_CFG_DTIM_PERIOD;
3956 case WNI_CFG_EDCA_WME_ACBK:
3957 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3958 case WNI_CFG_EDCA_WME_ACBE:
3959 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3960 case WNI_CFG_EDCA_WME_ACVI:
3961 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3962 case WNI_CFG_EDCA_WME_ACVO:
3963 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3964#if 0
3965 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3966 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3967 case WNI_CFG_TELE_BCN_TRANS_LI:
3968 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3969 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3970 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3971 case WNI_CFG_TELE_BCN_MAX_LI:
3972 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3973 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3974 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3975#endif
3976 case WNI_CFG_ENABLE_CLOSE_LOOP:
3977 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003978 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3979 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 default:
3981 {
3982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3983 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3984 wniCfgId);
3985 return VOS_STATUS_E_INVAL;
3986 }
3987 }
3988}
Jeff Johnson295189b2012-06-20 16:38:30 -07003989/*
3990 * FUNCTION: WDA_UpdateCfgCallback
3991 *
3992 */
3993void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3994{
3995 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3996 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3997 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 /*
4001 * currently there is no response message is expected between PE and
4002 * WDA, Failure return from WDI is a ASSERT condition
4003 */
4004 if(WDI_STATUS_SUCCESS != wdiStatus)
4005 {
4006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4009 }
4010
4011 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4012 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4013 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 return ;
4015}
Jeff Johnson295189b2012-06-20 16:38:30 -07004016/*
4017 * FUNCTION: WDA_UpdateCfg
4018 *
4019 */
4020VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4021{
4022
4023 WDI_Status status = WDI_STATUS_SUCCESS ;
4024 tANI_U32 val =0;
4025 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4026 tHalCfg *configData;
4027 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4028 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 if (NULL == pMac )
4032 {
4033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004034 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 return VOS_STATUS_E_FAILURE;
4036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 if(WDA_START_STATE != pWDA->wdaState)
4038 {
4039 return VOS_STATUS_E_FAILURE;
4040 }
4041
4042 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4043 {
4044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004045 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 VOS_ASSERT(0);
4047 return VOS_STATUS_E_FAILURE;
4048 }
4049
4050 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4051 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 if(NULL == wdiCfgReqParam)
4053 {
4054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 VOS_ASSERT(0);
4057 return VOS_STATUS_E_NOMEM;
4058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004059 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4060 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 if(NULL == wdiCfgReqParam->pConfigBuffer)
4062 {
4063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004064 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 vos_mem_free(wdiCfgReqParam);
4066 VOS_ASSERT(0);
4067 return VOS_STATUS_E_NOMEM;
4068 }
4069
4070 /*convert the WNI CFG Id to HAL CFG Id*/
4071 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4072 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4073
4074 /*TODO: revisit this for handling string parameters */
4075 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4076 &val) != eSIR_SUCCESS)
4077 {
4078 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4079 "Failed to cfg get id %d\n", cfgParam->bodyval);
4080 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4081 vos_mem_free(wdiCfgReqParam);
4082 return eSIR_FAILURE;
4083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004084 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4085 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4086 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4087 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4088 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4089
4090 /* store Params pass it to WDI */
4091 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004092#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4093 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4094 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 if(IS_WDI_STATUS_FAILURE(status))
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4098 "Failure in Update CFG WDI API, free all the memory " );
4099 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4100 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4101 pWDA->wdaWdiCfgApiMsgParam = NULL;
4102 /* Failure is not expected */
4103 VOS_ASSERT(0) ;
4104 }
4105#else
4106 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4107 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4108 pWDA->wdaWdiCfgApiMsgParam = NULL;
4109#endif
4110 return CONVERT_WDI2VOS_STATUS(status) ;
4111}
4112
Jeff Johnson295189b2012-06-20 16:38:30 -07004113VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4114 v_U8_t *pDefaultKeyId,
4115 v_U8_t *pNumKeys,
4116 WDI_KeysType *pWdiKeys )
4117{
4118 v_U32_t i, j, defKeyId = 0;
4119 v_U32_t val = SIR_MAC_KEY_LENGTH;
4120 VOS_STATUS status = WDI_STATUS_SUCCESS;
4121 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 if (NULL == pMac )
4123 {
4124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004125 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 return VOS_STATUS_E_FAILURE;
4127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4129 &defKeyId ))
4130 {
4131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4132 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4133 }
4134
4135 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 /* Need to extract ALL of the configured WEP Keys */
4137 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4138 {
4139 val = SIR_MAC_KEY_LENGTH;
4140 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4141 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4142 pWdiKeys[j].key,
4143 &val ))
4144 {
4145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4146 "WEP Key index [%d] may not configured in CFG\n",i);
4147 }
4148 else
4149 {
4150 pWdiKeys[j].keyId = (tANI_U8) i;
4151 /*
4152 * Actually, a DC (Don't Care) because
4153 * this is determined (and set) by PE/MLME
4154 */
4155 pWdiKeys[j].unicast = 0;
4156 /*
4157 * Another DC (Don't Care)
4158 */
4159 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4160 /* Another DC (Don't Care). Unused for WEP */
4161 pWdiKeys[j].paeRole = 0;
4162 /* Determined from wlan_cfgGetStr() above.*/
4163 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 j++;
4165 *pNumKeys = (tANI_U8) j;
4166 }
4167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 return status;
4169}
Jeff Johnson295189b2012-06-20 16:38:30 -07004170/*
4171 * FUNCTION: WDA_SetBssKeyReqCallback
4172 * send SET BSS key RSP back to PE
4173 */
4174void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4175{
4176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4177 tWDA_CbContext *pWDA;
4178 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004180 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 if(NULL == pWdaParams)
4182 {
4183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004184 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 VOS_ASSERT(0) ;
4186 return ;
4187 }
4188 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4189 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4191 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004192 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 return ;
4195}
Jeff Johnson295189b2012-06-20 16:38:30 -07004196/*
4197 * FUNCTION: WDA_ProcessSetBssKeyReq
4198 * Request to WDI for programming the BSS key( key for
4199 * broadcast/multicast frames Encryption)
4200 */
4201VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4202 tSetBssKeyParams *setBssKeyParams )
4203{
4204 WDI_Status status = WDI_STATUS_SUCCESS ;
4205 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4206 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4207 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4208 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 if(NULL == wdiSetBssKeyParam)
4213 {
4214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 VOS_ASSERT(0);
4217 return VOS_STATUS_E_NOMEM;
4218 }
4219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4220 if(NULL == pWdaParams)
4221 {
4222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 VOS_ASSERT(0);
4225 vos_mem_free(wdiSetBssKeyParam);
4226 return VOS_STATUS_E_NOMEM;
4227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 /* copy set BSS params to WDI structure */
4230 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4231 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4232 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 if(setBssKeyParams->encType != eSIR_ED_NONE)
4234 {
4235 if( setBssKeyParams->numKeys == 0 &&
4236 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4237 setBssKeyParams->encType == eSIR_ED_WEP104))
4238 {
4239 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004240 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4241 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4242 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4243 }
4244 else
4245 {
4246 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4247 {
4248 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4249 setBssKeyParams->key[keyIndex].keyId;
4250 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4251 setBssKeyParams->key[keyIndex].unicast;
4252 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4253 setBssKeyParams->key[keyIndex].keyDirection;
4254 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4255 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4256 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4257 setBssKeyParams->key[keyIndex].paeRole;
4258 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4259 setBssKeyParams->key[keyIndex].keyLength;
4260 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4261 setBssKeyParams->key[keyIndex].key,
4262 SIR_MAC_MAX_KEY_LENGTH);
4263 }
4264 }
4265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4267 setBssKeyParams->singleTidRc;
4268 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 /* Store set key pointer, as this will be used for response */
4270 /* store Params pass it to WDI */
4271 pWdaParams->pWdaContext = pWDA;
4272 pWdaParams->wdaMsgParam = setBssKeyParams;
4273 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4275 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4276
4277 if(IS_WDI_STATUS_FAILURE(status))
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4280 "Failure in Set BSS Key Req WDI API, free all the memory " );
4281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4282 vos_mem_free(pWdaParams) ;
4283 setBssKeyParams->status = eSIR_FAILURE ;
4284 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 return CONVERT_WDI2VOS_STATUS(status) ;
4287}
Jeff Johnson295189b2012-06-20 16:38:30 -07004288/*
4289 * FUNCTION: WDA_RemoveBssKeyReqCallback
4290 * send SET BSS key RSP back to PE
4291 */
4292void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4293{
4294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4295 tWDA_CbContext *pWDA;
4296 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004298 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 if(NULL == pWdaParams)
4300 {
4301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 VOS_ASSERT(0) ;
4304 return ;
4305 }
4306 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4307 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4309 vos_mem_free(pWdaParams) ;
4310
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004311 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 return ;
4314}
Jeff Johnson295189b2012-06-20 16:38:30 -07004315/*
4316 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4317 * Request to WDI to remove the BSS key( key for broadcast/multicast
4318 * frames Encryption)
4319 */
4320VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4321 tRemoveBssKeyParams *removeBssKeyParams )
4322{
4323 WDI_Status status = WDI_STATUS_SUCCESS ;
4324 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4325 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4326 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4327 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 if(NULL == wdiRemoveBssKeyParam)
4331 {
4332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 VOS_ASSERT(0);
4335 return VOS_STATUS_E_NOMEM;
4336 }
4337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4338 if(NULL == pWdaParams)
4339 {
4340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 VOS_ASSERT(0);
4343 vos_mem_free(wdiRemoveBssKeyParam);
4344 return VOS_STATUS_E_NOMEM;
4345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 /* copy Remove BSS key params to WDI structure*/
4347 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4348 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4349 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4350 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4351 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 /* Store remove key pointer, as this will be used for response */
4353 /* store Params pass it to WDI */
4354 pWdaParams->pWdaContext = pWDA;
4355 pWdaParams->wdaMsgParam = removeBssKeyParams;
4356 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4358 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 if(IS_WDI_STATUS_FAILURE(status))
4360 {
4361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4362 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4364 vos_mem_free(pWdaParams) ;
4365 removeBssKeyParams->status = eSIR_FAILURE ;
4366 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 return CONVERT_WDI2VOS_STATUS(status) ;
4369}
Jeff Johnson295189b2012-06-20 16:38:30 -07004370/*
4371 * FUNCTION: WDA_SetBssKeyReqCallback
4372 * send SET BSS key RSP back to PE
4373 */
4374void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4375{
4376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4377 tWDA_CbContext *pWDA;
4378 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004380 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 if(NULL == pWdaParams)
4382 {
4383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004384 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 VOS_ASSERT(0) ;
4386 return ;
4387 }
4388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4389 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4391 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004392 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 return ;
4395}
Jeff Johnson295189b2012-06-20 16:38:30 -07004396/*
4397 * FUNCTION: WDA_ProcessSetStaKeyReq
4398 * Request to WDI for programming the STA key( key for Unicast frames
4399 * Encryption)
4400 */
4401VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4402 tSetStaKeyParams *setStaKeyParams )
4403{
4404 WDI_Status status = WDI_STATUS_SUCCESS ;
4405 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4406 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4407 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4408 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004411 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 if(NULL == wdiSetStaKeyParam)
4413 {
4414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_ASSERT(0);
4417 return VOS_STATUS_E_NOMEM;
4418 }
4419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4420 if(NULL == pWdaParams)
4421 {
4422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 VOS_ASSERT(0);
4425 vos_mem_free(wdiSetStaKeyParam);
4426 return VOS_STATUS_E_NOMEM;
4427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 /* copy set STA key params to WDI structure */
4431 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4432 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4433 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4434 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 if(setStaKeyParams->encType != eSIR_ED_NONE)
4436 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004437 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4439 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4440 {
4441 WDA_GetWepKeysFromCfg( pWDA,
4442 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4443 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4444 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4445 }
4446 else
4447 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4449 keyIndex++)
4450 {
4451 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4452 setStaKeyParams->key[keyIndex].keyId;
4453 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4454 setStaKeyParams->key[keyIndex].unicast;
4455 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4456 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4458 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4459 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4460 setStaKeyParams->key[keyIndex].paeRole;
4461 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4462 setStaKeyParams->key[keyIndex].keyLength;
4463 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4464 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4465 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4466 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4467 {
4468 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4469 }
4470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4472 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 }
4474 }
4475 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4476 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 /* Store set key pointer, as this will be used for response */
4478 /* store Params pass it to WDI */
4479 pWdaParams->pWdaContext = pWDA;
4480 pWdaParams->wdaMsgParam = setStaKeyParams;
4481 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4483 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 if(IS_WDI_STATUS_FAILURE(status))
4485 {
4486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4487 "Failure in set STA Key Req WDI API, free all the memory " );
4488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4489 vos_mem_free(pWdaParams) ;
4490 setStaKeyParams->status = eSIR_FAILURE ;
4491 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 return CONVERT_WDI2VOS_STATUS(status) ;
4494}
Jeff Johnson295189b2012-06-20 16:38:30 -07004495/*
4496 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4497 * send SET Bcast STA key RSP back to PE
4498 */
4499void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4500{
4501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4502 tWDA_CbContext *pWDA;
4503 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004505 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 if(NULL == pWdaParams)
4507 {
4508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004509 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 VOS_ASSERT(0) ;
4511 return ;
4512 }
4513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4514 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4516 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004517 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 return ;
4520}
4521
Jeff Johnson295189b2012-06-20 16:38:30 -07004522/*
4523 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4524 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4525 * Encryption)
4526 */
4527VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4528 tSetStaKeyParams *setStaKeyParams )
4529{
4530 WDI_Status status = WDI_STATUS_SUCCESS ;
4531 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4532 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4533 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4534 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 if(NULL == wdiSetStaKeyParam)
4539 {
4540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 VOS_ASSERT(0);
4543 return VOS_STATUS_E_NOMEM;
4544 }
4545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4546 if(NULL == pWdaParams)
4547 {
4548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 VOS_ASSERT(0);
4551 vos_mem_free(wdiSetStaKeyParam);
4552 return VOS_STATUS_E_NOMEM;
4553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 /* copy set STA key params to WDI structure */
4557 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4558 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4559 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4560 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 if(setStaKeyParams->encType != eSIR_ED_NONE)
4562 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4564 keyIndex++)
4565 {
4566 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4567 setStaKeyParams->key[keyIndex].keyId;
4568 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4569 setStaKeyParams->key[keyIndex].unicast;
4570 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4571 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4573 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4574 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4575 setStaKeyParams->key[keyIndex].paeRole;
4576 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4577 setStaKeyParams->key[keyIndex].keyLength;
4578 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4579 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4582 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 }
4584 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 /* Store set key pointer, as this will be used for response */
4586 /* store Params pass it to WDI */
4587 pWdaParams->pWdaContext = pWDA;
4588 pWdaParams->wdaMsgParam = setStaKeyParams;
4589 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4591 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(IS_WDI_STATUS_FAILURE(status))
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4595 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4597 vos_mem_free(pWdaParams) ;
4598 setStaKeyParams->status = eSIR_FAILURE ;
4599 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 return CONVERT_WDI2VOS_STATUS(status) ;
4602}
Jeff Johnson295189b2012-06-20 16:38:30 -07004603/*
4604 * FUNCTION: WDA_RemoveStaKeyReqCallback
4605 * send SET BSS key RSP back to PE
4606 */
4607void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4608{
4609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4610 tWDA_CbContext *pWDA;
4611 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004613 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 if(NULL == pWdaParams)
4615 {
4616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004617 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 VOS_ASSERT(0) ;
4619 return ;
4620 }
4621 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4622 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4624 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004625 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004627 return ;
4628}
4629
Jeff Johnson295189b2012-06-20 16:38:30 -07004630/*
4631 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4632 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4633 */
4634VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4635 tRemoveStaKeyParams *removeStaKeyParams )
4636{
4637 WDI_Status status = WDI_STATUS_SUCCESS ;
4638 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4639 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4640 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4641 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004643 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 if(NULL == wdiRemoveStaKeyParam)
4645 {
4646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 VOS_ASSERT(0);
4649 return VOS_STATUS_E_NOMEM;
4650 }
4651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4652 if(NULL == pWdaParams)
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 VOS_ASSERT(0);
4657 vos_mem_free(wdiRemoveStaKeyParam);
4658 return VOS_STATUS_E_NOMEM;
4659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 /* copy remove STA key params to WDI structure*/
4661 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4662 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4663 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4664 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4665 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 /* Store remove key pointer, as this will be used for response */
4667 /* store Params pass it to WDI */
4668 pWdaParams->pWdaContext = pWDA;
4669 pWdaParams->wdaMsgParam = removeStaKeyParams;
4670 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4672 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(IS_WDI_STATUS_FAILURE(status))
4674 {
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4676 "Failure in remove STA Key Req WDI API, free all the memory " );
4677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4678 vos_mem_free(pWdaParams) ;
4679 removeStaKeyParams->status = eSIR_FAILURE ;
4680 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 return CONVERT_WDI2VOS_STATUS(status) ;
4683}
Jeff Johnson295189b2012-06-20 16:38:30 -07004684/*
4685 * FUNCTION: WDA_IsHandleSetLinkStateReq
4686 * Update the WDA state and return the status to handle this message or not
4687 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004688WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4689 tWDA_CbContext *pWDA,
4690 tLinkStateParams *linkStateParams)
4691{
4692 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 switch(linkStateParams->state)
4694 {
4695 case eSIR_LINK_PREASSOC_STATE:
4696 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4697 /*
4698 * set the WDA state to PRE ASSOC
4699 * copy the BSSID into pWDA to use it in join request and return,
4700 * No need to handle these messages.
4701 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004702 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4703 {
4704 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004706 }
4707 else
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004711 VOS_ASSERT(0);
4712 }
4713
4714 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4715 {
4716 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004718 }
4719 else
4720 {
4721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004722 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004723 VOS_ASSERT(0);
4724 }
4725
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4727 *channel and after ) so reset the WDA state to ready when the second
4728 * time UMAC issue the link state with PREASSOC
4729 */
4730 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4731 {
4732 /* RESET WDA state back to WDA_READY_STATE */
4733 pWDA->wdaState = WDA_READY_STATE;
4734 }
4735 else
4736 {
4737 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4738 }
4739 //populate linkState info in WDACbCtxt
4740 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 default:
4743 if(pWDA->wdaState != WDA_READY_STATE)
4744 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004745 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4746 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4747 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4748 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4749 *the ASSERT in WDA_Stop during module unload.*/
4750 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4751 {
4752 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004753 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004754 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004755 else
4756 {
4757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004758 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004759 status = WDA_IGNORE_SET_LINK_STATE;
4760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 }
4762 break;
4763 }
4764
4765 return status;
4766}
Jeff Johnson295189b2012-06-20 16:38:30 -07004767/*
4768 * FUNCTION: WDA_SetLinkStateCallback
4769 * call back function for set link state from WDI
4770 */
4771void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4772{
4773 tWDA_CbContext *pWDA;
4774 tLinkStateParams *linkStateParams;
4775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004777 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 if(NULL == pWdaParams)
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 VOS_ASSERT(0) ;
4783 return ;
4784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 /*
4788 * In STA mode start the BA activity check timer after association
4789 * and in AP mode start BA activity check timer after BSS start */
4790 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4791 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004792 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4793 ((status == WDI_STATUS_SUCCESS) &&
4794 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 {
4796 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 /*
4800 * No respone required for WDA_SET_LINK_STATE so free the request
4801 * param here
4802 */
4803 if( pWdaParams != NULL )
4804 {
4805 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4806 {
4807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4808 }
4809 vos_mem_free(pWdaParams);
4810 }
4811 return ;
4812}
Jeff Johnson295189b2012-06-20 16:38:30 -07004813/*
4814 * FUNCTION: WDA_ProcessSetLinkState
4815 * Request to WDI to set the link status.
4816 */
4817VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4818 tLinkStateParams *linkStateParams)
4819{
4820 WDI_Status status = WDI_STATUS_SUCCESS ;
4821 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4822 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4823 sizeof(WDI_SetLinkReqParamsType)) ;
4824 tWDA_ReqParams *pWdaParams ;
4825 tpAniSirGlobal pMac;
4826 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4827
4828 if(NULL == pMac)
4829 {
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004831 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004833 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 return VOS_STATUS_E_FAILURE;
4835 }
4836
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 if(NULL == wdiSetLinkStateParam)
4840 {
4841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 VOS_ASSERT(0);
4844 return VOS_STATUS_E_NOMEM;
4845 }
4846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4847 if(NULL == pWdaParams)
4848 {
4849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_ASSERT(0);
4852 vos_mem_free(wdiSetLinkStateParam);
4853 return VOS_STATUS_E_NOMEM;
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 if(WDA_IGNORE_SET_LINK_STATE ==
4856 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4857 {
4858 status = WDI_STATUS_E_FAILURE;
4859 }
4860 else
4861 {
4862 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4863 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4865 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4867 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 pWdaParams->pWdaContext = pWDA;
4869 /* Store remove key pointer, as this will be used for response */
4870 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 /* store Params pass it to WDI */
4872 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4873 /* Stop Timer only other than GO role and concurrent session */
4874 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004875 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4877 {
4878 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4881 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 if(IS_WDI_STATUS_FAILURE(status))
4883 {
4884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4885 "Failure in set link state Req WDI API, free all the memory " );
4886 }
4887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 if(IS_WDI_STATUS_FAILURE(status))
4889 {
4890 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004891 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 vos_mem_free(pWdaParams);
4893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 return CONVERT_WDI2VOS_STATUS(status) ;
4895}
Jeff Johnson295189b2012-06-20 16:38:30 -07004896/*
4897 * FUNCTION: WDA_GetStatsReqParamsCallback
4898 * send the response to PE with Stats received from WDI
4899 */
4900void WDA_GetStatsReqParamsCallback(
4901 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4902 void* pUserData)
4903{
4904 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4905 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4906
4907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 pGetPEStatsRspParams =
4910 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4911 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4912
4913 if(NULL == pGetPEStatsRspParams)
4914 {
4915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 VOS_ASSERT(0);
4918 return;
4919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4921 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4922 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4923 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004924
4925 //Fill the Session Id Properly in PE
4926 pGetPEStatsRspParams->sessionId = 0;
4927 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004928 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4930 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 vos_mem_copy( pGetPEStatsRspParams + 1,
4932 wdiGetStatsRsp + 1,
4933 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 /* send response to UMAC*/
4935 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4936
4937 return;
4938}
4939
Jeff Johnson295189b2012-06-20 16:38:30 -07004940/*
4941 * FUNCTION: WDA_ProcessGetStatsReq
4942 * Request to WDI to get the statistics
4943 */
4944VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4945 tAniGetPEStatsReq *pGetStatsParams)
4946{
4947 WDI_Status status = WDI_STATUS_SUCCESS ;
4948 WDI_GetStatsReqParamsType wdiGetStatsParam;
4949 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004951 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4953 pGetStatsParams->staId;
4954 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4955 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 status = WDI_GetStatsReq(&wdiGetStatsParam,
4958 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 if(IS_WDI_STATUS_FAILURE(status))
4960 {
4961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4962 "Failure in Get Stats Req WDI API, free all the memory " );
4963 pGetPEStatsRspParams =
4964 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4965 if(NULL == pGetPEStatsRspParams)
4966 {
4967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004970 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 return VOS_STATUS_E_NOMEM;
4972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4974 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4975 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4976 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4977 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4978 (void *)pGetPEStatsRspParams, 0) ;
4979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 /* Free the request message */
4981 vos_mem_free(pGetStatsParams);
4982 return CONVERT_WDI2VOS_STATUS(status);
4983}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004984
4985#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4986/*
4987 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4988 * send the response to PE with roam Rssi received from WDI
4989 */
4990void WDA_GetRoamRssiReqParamsCallback(
4991 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4992 void* pUserData)
4993{
4994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4995 tWDA_CbContext *pWDA = NULL;
4996 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4997 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4999 "<------ %s " ,__func__);
5000 if(NULL == pWdaParams)
5001 {
5002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5003 "%s: pWdaParams received NULL", __func__);
5004 VOS_ASSERT(0) ;
5005 return ;
5006 }
5007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5008 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5009
5010 if(NULL == pGetRoamRssiReqParams)
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "%s: pGetRoamRssiReqParams received NULL", __func__);
5014 VOS_ASSERT(0);
5015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5016 vos_mem_free(pWdaParams);
5017 return ;
5018 }
5019 pGetRoamRssiRspParams =
5020 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5021
5022 if(NULL == pGetRoamRssiRspParams)
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5025 "%s: VOS MEM Alloc Failure", __func__);
5026 VOS_ASSERT(0);
5027 return;
5028 }
5029 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5030 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005031 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005032 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5033 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5034
5035 /* Assign get roam rssi req (backup) in to the response */
5036 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5037
5038 /* free WDI command buffer */
5039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5040 vos_mem_free(pWdaParams) ;
5041
5042 /* send response to UMAC*/
5043 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5044
5045 return;
5046}
5047
5048
5049
5050/*
5051 * FUNCTION: WDA_ProcessGetRoamRssiReq
5052 * Request to WDI to get the statistics
5053 */
5054VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5055 tAniGetRssiReq *pGetRoamRssiParams)
5056{
5057 WDI_Status status = WDI_STATUS_SUCCESS ;
5058 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5059 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5060 tWDA_ReqParams *pWdaParams = NULL;
5061
5062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5063 "------> %s " ,__func__);
5064 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5065 pGetRoamRssiParams->staId;
5066 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5067
5068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5069 if(NULL == pWdaParams)
5070 {
5071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5072 "%s: VOS MEM Alloc Failure", __func__);
5073 VOS_ASSERT(0);
5074 return VOS_STATUS_E_NOMEM;
5075 }
5076
5077 /* Store Init Req pointer, as this will be used for response */
5078 pWdaParams->pWdaContext = pWDA;
5079
5080 /* Take Get roam Rssi req backup as it stores the callback to be called after
5081 receiving the response */
5082 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5083 pWdaParams->wdaWdiApiMsgParam = NULL;
5084
5085 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5086 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5087 if(IS_WDI_STATUS_FAILURE(status))
5088 {
5089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5090 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5091 pGetRoamRssiRspParams =
5092 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5093 if(NULL == pGetRoamRssiRspParams)
5094 {
5095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5096 "%s: VOS MEM Alloc Failure", __func__);
5097 VOS_ASSERT(0);
5098 vos_mem_free(pGetRoamRssiParams);
5099 vos_mem_free(pWdaParams);
5100 return VOS_STATUS_E_NOMEM;
5101 }
5102 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5103 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5104 pGetRoamRssiRspParams->rssi = 0;
5105 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5106 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5107 (void *)pGetRoamRssiRspParams, 0) ;
5108 }
5109 return CONVERT_WDI2VOS_STATUS(status);
5110}
5111#endif
5112
5113
Jeff Johnson295189b2012-06-20 16:38:30 -07005114/*
5115 * FUNCTION: WDA_UpdateEDCAParamCallback
5116 * call back function for Update EDCA params from WDI
5117 */
5118void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5119{
5120 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5121 tEdcaParams *pEdcaParams;
5122
5123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005124 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 if(NULL == pWdaParams)
5126 {
5127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005128 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 VOS_ASSERT(0) ;
5130 return ;
5131 }
5132 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5134 vos_mem_free(pWdaParams);
5135 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 return ;
5137}
Jeff Johnson295189b2012-06-20 16:38:30 -07005138/*
5139 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5140 * Request to WDI to Update the EDCA params.
5141 */
5142VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5143 tEdcaParams *pEdcaParams)
5144{
5145 WDI_Status status = WDI_STATUS_SUCCESS ;
5146 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5147 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5148 sizeof(WDI_UpdateEDCAParamsType)) ;
5149 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 if(NULL == wdiEdcaParam)
5153 {
5154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005157 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 return VOS_STATUS_E_NOMEM;
5159 }
5160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5161 if(NULL == pWdaParams)
5162 {
5163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 VOS_ASSERT(0);
5166 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005167 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 return VOS_STATUS_E_NOMEM;
5169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5171 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5172 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5173 &pEdcaParams->acbe);
5174 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5175 &pEdcaParams->acbk);
5176 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5177 &pEdcaParams->acvi);
5178 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5179 &pEdcaParams->acvo);
5180 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 pWdaParams->pWdaContext = pWDA;
5182 /* Store remove key pointer, as this will be used for response */
5183 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 /* store Params pass it to WDI */
5185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5187 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005188 if(IS_WDI_STATUS_FAILURE(status))
5189 {
5190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5191 "Failure in Update EDCA Params WDI API, free all the memory " );
5192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5193 vos_mem_free(pWdaParams);
5194 vos_mem_free(pEdcaParams);
5195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 return CONVERT_WDI2VOS_STATUS(status) ;
5197}
Jeff Johnson295189b2012-06-20 16:38:30 -07005198/*
5199 * FUNCTION: WDA_AddBAReqCallback
5200 * send ADD BA RSP back to PE
5201 */
5202void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5203 void* pUserData)
5204{
5205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5206 tWDA_CbContext *pWDA;
5207 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 if(NULL == pWdaParams)
5211 {
5212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005213 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 VOS_ASSERT(0) ;
5215 return ;
5216 }
5217 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5218 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5220 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005221 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 return ;
5224}
5225
Jeff Johnson295189b2012-06-20 16:38:30 -07005226/*
5227 * FUNCTION: WDA_ProcessAddBAReq
5228 * Request to WDI to Update the ADDBA REQ params.
5229 */
5230VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5231 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5232{
Jeff Johnson43971f52012-07-17 12:26:56 -07005233 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005234 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5235 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5236 sizeof(WDI_AddBAReqParamsType)) ;
5237 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005239 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if(NULL == wdiAddBAReqParam)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT(0);
5245 return VOS_STATUS_E_NOMEM;
5246 }
5247 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5248 if(NULL == pWdaParams)
5249 {
5250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_ASSERT(0);
5253 vos_mem_free(wdiAddBAReqParam);
5254 return VOS_STATUS_E_NOMEM;
5255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 do
5257 {
5258 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 wdiAddBaInfo->ucSTAIdx = staIdx ;
5260 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5261 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 } while(0) ;
5263 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 pWdaParams->pWdaContext = pWDA;
5265 /* store Params pass it to WDI */
5266 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5267 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005268 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5269 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005270
Jeff Johnson43971f52012-07-17 12:26:56 -07005271 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 {
5273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005274 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5275 status = CONVERT_WDI2VOS_STATUS(wstatus);
5276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 vos_mem_free(pWdaParams);
5278 pAddBAReqParams->status = eSIR_FAILURE;
5279 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5280 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005281 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005282}
Jeff Johnson295189b2012-06-20 16:38:30 -07005283/*
5284 * FUNCTION: WDA_AddBASessionReqCallback
5285 * send ADD BA SESSION RSP back to PE/(or TL)
5286 */
5287void WDA_AddBASessionReqCallback(
5288 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5289{
5290 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5291 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5292 tWDA_CbContext *pWDA;
5293 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 if(NULL == pWdaParams)
5297 {
5298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005299 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 VOS_ASSERT(0) ;
5301 return ;
5302 }
5303 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5304 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 if( NULL == pAddBAReqParams )
5306 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005308 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5311 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005312 return ;
5313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5315 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 /*
5317 * if WDA in update TL state, update TL with BA session parama and send
5318 * another request to HAL(/WDI) (ADD_BA_REQ)
5319 */
5320
5321 if((VOS_STATUS_SUCCESS ==
5322 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5323 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5324 {
5325 /* Update TL with BA info received from HAL/WDI */
5326 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5327 wdiAddBaSession->usBaSessionID,
5328 wdiAddBaSession->ucSTAIdx,
5329 wdiAddBaSession->ucBaTID,
5330 wdiAddBaSession->ucBaBufferSize,
5331 wdiAddBaSession->ucWinSize,
5332 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5334 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5335 }
5336 else
5337 {
5338 pAddBAReqParams->status =
5339 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5340
5341 /* Setting Flag to indicate that Set BA is success */
5342 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5343 {
5344 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5345 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5346 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 /*Reset the WDA state to READY */
5351 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 return ;
5353}
5354
Jeff Johnson295189b2012-06-20 16:38:30 -07005355/*
5356 * FUNCTION: WDA_ProcessAddBASessionReq
5357 * Request to WDI to Update the ADDBA REQ params.
5358 */
5359VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5360 tAddBAParams *pAddBAReqParams)
5361{
5362 WDI_Status status = WDI_STATUS_SUCCESS ;
5363 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5364 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5365 sizeof(WDI_AddBASessionReqParamsType)) ;
5366 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005367 WLANTL_STAStateType tlSTAState = 0;
5368
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 if(NULL == wdiAddBASessionReqParam)
5372 {
5373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 VOS_ASSERT(0);
5376 return VOS_STATUS_E_NOMEM;
5377 }
5378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5379 if(NULL == pWdaParams)
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_ASSERT(0);
5384 vos_mem_free(wdiAddBASessionReqParam);
5385 return VOS_STATUS_E_NOMEM;
5386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 /*
5388 * Populate ADD BA parameters and pass these paarmeters to WDI.
5389 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5390 * the state to track if these is BA recipient case or BA initiator
5391 * case.
5392 */
5393 do
5394 {
5395 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5396 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5397 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5398 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5399 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5400 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5401 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5404 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5405 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5406 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5407 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 /* check the BA direction and update state accordingly */
5409 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5410 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5411 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5412
5413 }while(0) ;
5414 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 pWdaParams->pWdaContext = pWDA;
5416 /* Store ADD BA pointer, as this will be used for response */
5417 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5418 /* store Params pass it to WDI */
5419 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005420
5421 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5422 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5423 */
5424 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5425 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5426 {
5427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5428 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5429 status = WDI_STATUS_E_NOT_ALLOWED;
5430 pAddBAReqParams->status =
5431 CONVERT_WDI2SIR_STATUS(status) ;
5432 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5433 /*Reset the WDA state to READY */
5434 pWDA->wdaState = WDA_READY_STATE;
5435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5436 vos_mem_free(pWdaParams);
5437
5438 return CONVERT_WDI2VOS_STATUS(status) ;
5439 }
5440
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5442 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 if(IS_WDI_STATUS_FAILURE(status))
5444 {
5445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005446 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5448 "Send ADD BA failure response to PE\n");
5449 pAddBAReqParams->status =
5450 CONVERT_WDI2SIR_STATUS(status) ;
5451 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005452 /*Reset the WDA state to READY */
5453 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 vos_mem_free(pWdaParams);
5456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005458}
Jeff Johnson295189b2012-06-20 16:38:30 -07005459/*
5460 * FUNCTION: WDA_DelBANotifyTL
5461 * send DEL BA IND to TL
5462 */
5463void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5464 tDelBAParams *pDelBAReqParams)
5465{
5466 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5467 //tSirMsgQ msg;
5468 vos_msg_t vosMsg;
5469 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 if(NULL == pDelBAInd)
5471 {
5472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 VOS_ASSERT(0) ;
5475 return;
5476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5478 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5479 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5480 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005481
Jeff Johnson295189b2012-06-20 16:38:30 -07005482
5483 vosMsg.type = WDA_DELETEBA_IND;
5484 vosMsg.bodyptr = pDelBAInd;
5485 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5486 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5487 {
5488 vosStatus = VOS_STATUS_E_BADMSG;
5489 }
5490}
Jeff Johnson295189b2012-06-20 16:38:30 -07005491/*
5492 * FUNCTION: WDA_DelBAReqCallback
5493 * send DEL BA RSP back to PE
5494 */
5495void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5496{
5497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5498 tWDA_CbContext *pWDA;
5499 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005501 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005502 if(NULL == pWdaParams)
5503 {
5504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005505 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 VOS_ASSERT(0) ;
5507 return ;
5508 }
5509 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5510 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 /* Notify TL about DEL BA in case of recipinet */
5512 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5513 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5514 {
5515 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 /*
5518 * No respone required for WDA_DELBA_IND so just free the request
5519 * param here
5520 */
5521 vos_mem_free(pDelBAReqParams);
5522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5523 vos_mem_free(pWdaParams);
5524 return ;
5525}
5526
Jeff Johnson295189b2012-06-20 16:38:30 -07005527/*
5528 * FUNCTION: WDA_ProcessDelBAReq
5529 * Request to WDI to Update the DELBA REQ params.
5530 */
5531VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5532 tDelBAParams *pDelBAReqParams)
5533{
5534 WDI_Status status = WDI_STATUS_SUCCESS ;
5535 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5536 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5537 sizeof(WDI_DelBAReqParamsType)) ;
5538 tWDA_ReqParams *pWdaParams ;
5539 tANI_U16 staIdx = 0;
5540 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005542 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 if(NULL == wdiDelBAReqParam)
5544 {
5545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 VOS_ASSERT(0);
5548 return VOS_STATUS_E_NOMEM;
5549 }
5550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5551 if(NULL == pWdaParams)
5552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 VOS_ASSERT(0);
5556 vos_mem_free(wdiDelBAReqParam);
5557 return VOS_STATUS_E_NOMEM;
5558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5560 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5561 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5562 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 pWdaParams->pWdaContext = pWDA;
5564 /* Store DEL BA pointer, as this will be used for response */
5565 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 /* store Params pass it to WDI */
5567 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5569 * maintained in WDA, so that WDA can retry for another BA session
5570 */
5571 staIdx = pDelBAReqParams->staIdx;
5572 tid = pDelBAReqParams->baTID;
5573 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 status = WDI_DelBAReq(wdiDelBAReqParam,
5575 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 if(IS_WDI_STATUS_FAILURE(status))
5577 {
5578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5579 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5581 vos_mem_free(pWdaParams->wdaMsgParam);
5582 vos_mem_free(pWdaParams);
5583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005585}
Jeff Johnson295189b2012-06-20 16:38:30 -07005586/*
5587 * FUNCTION: WDA_AddTSReqCallback
5588 * send ADD TS RSP back to PE
5589 */
5590void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5591{
5592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5593 tWDA_CbContext *pWDA;
5594 tAddTsParams *pAddTsReqParams;
5595
5596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005597 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 if(NULL == pWdaParams)
5599 {
5600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 VOS_ASSERT(0) ;
5603 return ;
5604 }
5605 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5606 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5608 vos_mem_free(pWdaParams);
5609
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005610 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 return ;
5613}
5614
Jeff Johnson295189b2012-06-20 16:38:30 -07005615/*
5616 * FUNCTION: WDA_ProcessAddTSReq
5617 * Request to WDI to Update the ADD TS REQ params.
5618 */
5619VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5620 tAddTsParams *pAddTsReqParams)
5621{
5622 WDI_Status status = WDI_STATUS_SUCCESS ;
5623 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5624 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5625 sizeof(WDI_AddTSReqParamsType)) ;
5626 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005628 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 if(NULL == wdiAddTSReqParam)
5630 {
5631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 VOS_ASSERT(0);
5634 return VOS_STATUS_E_NOMEM;
5635 }
5636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5637 if(NULL == pWdaParams)
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_ASSERT(0);
5642 vos_mem_free(wdiAddTSReqParam);
5643 return VOS_STATUS_E_NOMEM;
5644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5646 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 //TS IE
5648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5649 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5650 pAddTsReqParams->tspec.length;
5651
5652 //TS IE : TS INFO : TRAFFIC
5653 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5654 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5655 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5656 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5657 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5658 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5659 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5660 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5661 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5662 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5663 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5664 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5665 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5666 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5667 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5668 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5669
5670 //TS IE : TS INFO : SCHEDULE
5671 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5672 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5673 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5674 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 //TS IE
5676 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5677 pAddTsReqParams->tspec.nomMsduSz;
5678 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5679 pAddTsReqParams->tspec.maxMsduSz;
5680 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5681 pAddTsReqParams->tspec.minSvcInterval;
5682 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5683 pAddTsReqParams->tspec.maxSvcInterval;
5684 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5685 pAddTsReqParams->tspec.inactInterval;
5686 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5687 pAddTsReqParams->tspec.suspendInterval;
5688 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5689 pAddTsReqParams->tspec.svcStartTime;
5690 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5691 pAddTsReqParams->tspec.minDataRate;
5692 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5693 pAddTsReqParams->tspec.meanDataRate;
5694 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5695 pAddTsReqParams->tspec.peakDataRate;
5696 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5697 pAddTsReqParams->tspec.maxBurstSz;
5698 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5699 pAddTsReqParams->tspec.delayBound;
5700 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5701 pAddTsReqParams->tspec.minPhyRate;
5702 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5703 pAddTsReqParams->tspec.surplusBw;
5704 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5705 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 /* TODO: tAddTsParams doesn't have the following fields */
5707#if 0
5708 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5709 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5710 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5711 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5712#endif
5713 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5714
5715 pWdaParams->pWdaContext = pWDA;
5716 /* Store ADD TS pointer, as this will be used for response */
5717 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 /* store Params pass it to WDI */
5719 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 status = WDI_AddTSReq(wdiAddTSReqParam,
5721 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 if(IS_WDI_STATUS_FAILURE(status))
5723 {
5724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5725 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5727 vos_mem_free(pWdaParams);
5728 pAddTsReqParams->status = eSIR_FAILURE ;
5729 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732}
5733
Jeff Johnson295189b2012-06-20 16:38:30 -07005734/*
5735 * FUNCTION: WDA_DelTSReqCallback
5736 * send DEL TS RSP back to PE
5737 */
5738void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5739{
5740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005742 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5744 vos_mem_free(pWdaParams->wdaMsgParam) ;
5745 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 /*
5747 * No respone required for WDA_DEL_TS_REQ so just free the request
5748 * param here
5749 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 return ;
5751}
5752
Jeff Johnson295189b2012-06-20 16:38:30 -07005753/*
5754 * FUNCTION: WDA_ProcessDelTSReq
5755 * Request to WDI to Update the DELTS REQ params.
5756 */
5757VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5758 tDelTsParams *pDelTSReqParams)
5759{
5760 WDI_Status status = WDI_STATUS_SUCCESS ;
5761 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5762 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5763 sizeof(WDI_DelTSReqParamsType)) ;
5764 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005766 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005767 if(NULL == wdiDelTSReqParam)
5768 {
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 VOS_ASSERT(0);
5772 return VOS_STATUS_E_NOMEM;
5773 }
5774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5775 if(NULL == pWdaParams)
5776 {
5777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 VOS_ASSERT(0);
5780 vos_mem_free(wdiDelTSReqParam);
5781 return VOS_STATUS_E_NOMEM;
5782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5784 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5785 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5786 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5787 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 pWdaParams->pWdaContext = pWDA;
5789 /* Store DEL TS pointer, as this will be used for response */
5790 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 /* store Params pass it to WDI */
5792 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 status = WDI_DelTSReq(wdiDelTSReqParam,
5794 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005795 if(IS_WDI_STATUS_FAILURE(status))
5796 {
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5798 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5800 vos_mem_free(pWdaParams->wdaMsgParam);
5801 vos_mem_free(pWdaParams);
5802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005804}
Jeff Johnson295189b2012-06-20 16:38:30 -07005805/*
5806 * FUNCTION: WDA_UpdateBeaconParamsCallback
5807 * Free the memory. No need to send any response to PE in this case
5808 */
5809void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5810{
5811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005814 if(NULL == pWdaParams)
5815 {
5816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005817 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 VOS_ASSERT(0) ;
5819 return ;
5820 }
5821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5822 vos_mem_free(pWdaParams->wdaMsgParam) ;
5823 vos_mem_free(pWdaParams);
5824 /*
5825 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5826 * param here
5827 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 return ;
5829}
Jeff Johnson295189b2012-06-20 16:38:30 -07005830/*
5831 * FUNCTION: WDA_ProcessUpdateBeaconParams
5832 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5833 */
5834VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5835 tUpdateBeaconParams *pUpdateBeaconParams)
5836{
5837 WDI_Status status = WDI_STATUS_SUCCESS ;
5838 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5839 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5840 sizeof(WDI_UpdateBeaconParamsType)) ;
5841 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 if(NULL == wdiUpdateBeaconParams)
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_ASSERT(0);
5849 return VOS_STATUS_E_NOMEM;
5850 }
5851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5852 if(NULL == pWdaParams)
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_ASSERT(0);
5857 vos_mem_free(wdiUpdateBeaconParams);
5858 return VOS_STATUS_E_NOMEM;
5859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5861 pUpdateBeaconParams->bssIdx;
5862 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5863 pUpdateBeaconParams->fShortPreamble;
5864 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5865 pUpdateBeaconParams->fShortSlotTime;
5866 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5867 pUpdateBeaconParams->beaconInterval;
5868 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5869 pUpdateBeaconParams->llaCoexist;
5870 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5871 pUpdateBeaconParams->llbCoexist;
5872 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5873 pUpdateBeaconParams->llgCoexist;
5874 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5875 pUpdateBeaconParams->ht20MhzCoexist;
5876 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5877 pUpdateBeaconParams->llnNonGFCoexist;
5878 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5879 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5880 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5881 pUpdateBeaconParams->fRIFSMode;
5882 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5883 pUpdateBeaconParams->paramChangeBitmap;
5884 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5885
5886 pWdaParams->pWdaContext = pWDA;
5887 /* Store UpdateBeacon Req pointer, as this will be used for response */
5888 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 /* store Params pass it to WDI */
5890 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5892 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5893 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 if(IS_WDI_STATUS_FAILURE(status))
5895 {
5896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5897 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5899 vos_mem_free(pWdaParams->wdaMsgParam);
5900 vos_mem_free(pWdaParams);
5901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005902 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903}
Jeff Johnson295189b2012-06-20 16:38:30 -07005904#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005905/*
5906 * FUNCTION: WDA_TSMStatsReqCallback
5907 * send TSM Stats RSP back to PE
5908 */
5909void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5910{
5911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5912 tWDA_CbContext *pWDA = NULL;
5913 tTSMStats *pTsmRspParams = NULL;
5914
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 if(NULL == pWdaParams)
5918 {
5919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005920 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 VOS_ASSERT(0) ;
5922 return ;
5923 }
5924 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5925 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 if( NULL == pTsmRspParams )
5927 {
5928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005929 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 VOS_ASSERT( 0 );
5931 return ;
5932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5934 vos_mem_free(pWdaParams);
5935
5936 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5937 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5938 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5939 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5940 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5941 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5942 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5943 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5944 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5945 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 return ;
5948}
5949
5950
Jeff Johnson295189b2012-06-20 16:38:30 -07005951/*
5952 * FUNCTION: WDA_ProcessTsmStatsReq
5953 * Request to WDI to get the TSM Stats params.
5954 */
5955VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5956 tTSMStats *pTsmStats)
5957{
5958 WDI_Status status = WDI_STATUS_SUCCESS ;
5959 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5960 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005962 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5964 sizeof(WDI_TSMStatsReqParamsType));
5965 if(NULL == wdiTSMReqParam)
5966 {
5967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 VOS_ASSERT(0);
5970 return VOS_STATUS_E_NOMEM;
5971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5973 if(NULL == pWdaParams)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 VOS_ASSERT(0);
5978 vos_mem_free(wdiTSMReqParam);
5979 return VOS_STATUS_E_NOMEM;
5980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5982 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5983 pTsmStats->bssId,
5984 sizeof(wpt_macAddr));
5985 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5986
5987 pWdaParams->pWdaContext = pWDA;
5988 /* Store TSM Stats pointer, as this will be used for response */
5989 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 /* store Params pass it to WDI */
5991 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 status = WDI_TSMStatsReq(wdiTSMReqParam,
5993 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 if(IS_WDI_STATUS_FAILURE(status))
5995 {
5996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5997 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5999 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006000 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 return CONVERT_WDI2VOS_STATUS(status) ;
6003}
6004#endif
6005/*
6006 * FUNCTION: WDA_SendBeaconParamsCallback
6007 * No need to send any response to PE in this case
6008 */
6009void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6010{
6011
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 return ;
6015}
Jeff Johnson295189b2012-06-20 16:38:30 -07006016/*
6017 * FUNCTION: WDA_ProcessSendBeacon
6018 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6019 * start beacon trasmission
6020 */
6021VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6022 tSendbeaconParams *pSendbeaconParams)
6023{
6024 WDI_Status status = WDI_STATUS_SUCCESS ;
6025 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006027 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6029 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6030 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6031 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6033 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306034 /* p2pIeOffset should be atleast greater than timIeOffset */
6035 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6036 (pSendbeaconParams->p2pIeOffset <
6037 pSendbeaconParams->timIeOffset))
6038 {
6039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6040 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6041 VOS_ASSERT( 0 );
6042 return WDI_STATUS_E_FAILURE;
6043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6045 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 /* Copy the beacon template to local buffer */
6047 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6048 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6049 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6050
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6052 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 if(IS_WDI_STATUS_FAILURE(status))
6054 {
6055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6056 "Failure in SEND BEACON REQ Params WDI API" );
6057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 vos_mem_free(pSendbeaconParams);
6059 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060}
Jeff Johnson295189b2012-06-20 16:38:30 -07006061/*
6062 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6063 * No need to send any response to PE in this case
6064 */
6065void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6066{
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 return ;
6070}
6071
Jeff Johnson295189b2012-06-20 16:38:30 -07006072/*
6073 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6074 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6075 * send probe response
6076 */
6077VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6078 tSendProbeRespParams *pSendProbeRspParams)
6079{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006080 WDI_Status status = WDI_STATUS_SUCCESS;
6081 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6082 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006084 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006085
6086 if (!wdiSendProbeRspParam)
6087 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6088
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006090 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006092 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 /* Copy the Probe Response template to local buffer */
6095 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006096 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 pSendProbeRspParams->pProbeRespTemplate,
6098 pSendProbeRspParams->probeRespTemplateLen);
6099 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006100 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6102 WDI_PROBE_REQ_BITMAP_IE_LEN);
6103
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006104 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006105
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006106 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 if(IS_WDI_STATUS_FAILURE(status))
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6111 "Failure in SEND Probe RSP Params WDI API" );
6112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006114 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006116}
Jeff Johnson295189b2012-06-20 16:38:30 -07006117#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6118/*
6119 * FUNCTION: WDA_SetMaxTxPowerCallBack
6120 * send the response to PE with power value received from WDI
6121 */
6122void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6123 void* pUserData)
6124{
6125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6126 tWDA_CbContext *pWDA = NULL;
6127 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6128
6129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006130 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 if(NULL == pWdaParams)
6132 {
6133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006134 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 VOS_ASSERT(0) ;
6136 return ;
6137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6139 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 if( NULL == pMaxTxPowerParams )
6141 {
6142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006143 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006144 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6146 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 return ;
6148 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006149
Jeff Johnson295189b2012-06-20 16:38:30 -07006150
6151 /*need to free memory for the pointers used in the
6152 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6154 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006156
Jeff Johnson295189b2012-06-20 16:38:30 -07006157
6158 /* send response to UMAC*/
6159 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6160
6161 return;
6162}
Jeff Johnson295189b2012-06-20 16:38:30 -07006163/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006164 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006165 * Request to WDI to send set Max Tx Power Request
6166 */
6167 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6168 tMaxTxPowerParams *MaxTxPowerParams)
6169{
6170 WDI_Status status = WDI_STATUS_SUCCESS;
6171 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6172 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006173
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006175 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006176
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6178 sizeof(WDI_SetMaxTxPowerParamsType));
6179 if(NULL == wdiSetMaxTxPowerParams)
6180 {
6181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 VOS_ASSERT(0);
6184 return VOS_STATUS_E_NOMEM;
6185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6187 if(NULL == pWdaParams)
6188 {
6189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 vos_mem_free(wdiSetMaxTxPowerParams);
6192 VOS_ASSERT(0);
6193 return VOS_STATUS_E_NOMEM;
6194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 /* Copy.Max.Tx.Power Params to WDI structure */
6196 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6197 MaxTxPowerParams->bssId,
6198 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6200 MaxTxPowerParams->selfStaMacAddr,
6201 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6203 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 pWdaParams->pWdaContext = pWDA;
6206 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 /* store Params pass it to WDI */
6208 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6210 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 if(IS_WDI_STATUS_FAILURE(status))
6212 {
6213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6214 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6216 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006217 /* send response to UMAC*/
6218 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 }
6220 return CONVERT_WDI2VOS_STATUS(status);
6221
6222}
Jeff Johnson295189b2012-06-20 16:38:30 -07006223#endif
schang86c22c42013-03-13 18:41:24 -07006224
6225/*
6226 * FUNCTION: WDA_SetTxPowerCallBack
6227 * send the response to PE with power value received from WDI
6228 */
6229void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6230 void* pUserData)
6231{
6232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6233 tWDA_CbContext *pWDA = NULL;
6234 tSirSetTxPowerReq *pTxPowerParams = NULL;
6235
6236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6237 "<------ %s ", __func__);
6238 if(NULL == pWdaParams)
6239 {
6240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6241 "%s: pWdaParams received NULL", __func__);
6242 VOS_ASSERT(0) ;
6243 return ;
6244 }
6245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6246 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6247 if(NULL == pTxPowerParams)
6248 {
6249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6250 "%s: pTxPowerParams received NULL " ,__func__);
6251 VOS_ASSERT(0);
6252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6253 vos_mem_free(pWdaParams);
6254 return ;
6255 }
6256
6257 /*need to free memory for the pointers used in the
6258 WDA Process.Set Max Tx Power Req function*/
6259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6260 vos_mem_free(pWdaParams);
6261
6262 /* send response to UMAC*/
6263 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6264 return;
6265}
6266
6267/*
6268 * FUNCTION: WDA_ProcessSetTxPowerReq
6269 * Request to WDI to send set Tx Power Request
6270 */
6271 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6272 tSirSetTxPowerReq *txPowerParams)
6273{
6274 WDI_Status status = WDI_STATUS_SUCCESS;
6275 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6276 tWDA_ReqParams *pWdaParams = NULL;
6277
6278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6279 "------> %s ", __func__);
6280
6281 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6282 sizeof(WDI_SetTxPowerParamsType));
6283 if(NULL == wdiSetTxPowerParams)
6284 {
6285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6286 "%s: VOS MEM Alloc Failure", __func__);
6287 VOS_ASSERT(0);
6288 return VOS_STATUS_E_NOMEM;
6289 }
6290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6291 if(NULL == pWdaParams)
6292 {
6293 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6294 "%s: VOS MEM Alloc Failure", __func__);
6295 vos_mem_free(wdiSetTxPowerParams);
6296 VOS_ASSERT(0);
6297 return VOS_STATUS_E_NOMEM;
6298 }
6299 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6300 txPowerParams->bssIdx;
6301 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6302 txPowerParams->mwPower;
6303 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6304 pWdaParams->pWdaContext = pWDA;
6305 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6306 /* store Params pass it to WDI */
6307 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6308 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6309 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6310 if(IS_WDI_STATUS_FAILURE(status))
6311 {
6312 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6313 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6315 vos_mem_free(pWdaParams);
6316 /* send response to UMAC*/
6317 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6318 }
6319 return CONVERT_WDI2VOS_STATUS(status);
6320}
6321
Jeff Johnson295189b2012-06-20 16:38:30 -07006322/*
6323 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6324 * Free the memory. No need to send any response to PE in this case
6325 */
6326void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6327{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6329
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006331 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006332
6333 if(NULL == pWdaParams)
6334 {
6335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006336 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006337 VOS_ASSERT(0) ;
6338 return ;
6339 }
6340
6341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6342 vos_mem_free(pWdaParams->wdaMsgParam) ;
6343 vos_mem_free(pWdaParams);
6344
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 /*
6346 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6347 * so just free the request param here
6348 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 return ;
6350}
6351
Jeff Johnson295189b2012-06-20 16:38:30 -07006352/*
6353 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6354 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6355 */
6356VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6357 tP2pPsParams *pP2pPsConfigParams)
6358{
6359 WDI_Status status = WDI_STATUS_SUCCESS ;
6360 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6361 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6362 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006363 tWDA_ReqParams *pWdaParams = NULL;
6364
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 if(NULL == wdiSetP2PGONOAReqParam)
6368 {
6369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 VOS_ASSERT(0);
6372 return VOS_STATUS_E_NOMEM;
6373 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006374
6375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6376 if(NULL == pWdaParams)
6377 {
6378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006379 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006380 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006381 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006382 VOS_ASSERT(0);
6383 return VOS_STATUS_E_NOMEM;
6384 }
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6387 pP2pPsConfigParams->opp_ps;
6388 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6389 pP2pPsConfigParams->ctWindow;
6390 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6391 pP2pPsConfigParams->count;
6392 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6393 pP2pPsConfigParams->duration;
6394 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6395 pP2pPsConfigParams->interval;
6396 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6397 pP2pPsConfigParams->single_noa_duration;
6398 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6399 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006400
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6402 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006403 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6404
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006406 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6407 pWdaParams->pWdaContext = pWDA;
6408
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006410 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6411
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 if(IS_WDI_STATUS_FAILURE(status))
6413 {
6414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6415 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6417 vos_mem_free(pWdaParams->wdaMsgParam);
6418 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 return CONVERT_WDI2VOS_STATUS(status);
6421
Jeff Johnson295189b2012-06-20 16:38:30 -07006422}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306423
6424#ifdef FEATURE_WLAN_TDLS
6425/*
6426 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6427 * Free the memory. No need to send any response to PE in this case
6428 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306429void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6430 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306431{
6432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6433 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306434 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306435
6436
6437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6438 "<------ %s " ,__func__);
6439 if(NULL == pWdaParams)
6440 {
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6442 "%s: pWdaParams received NULL", __func__);
6443 VOS_ASSERT(0) ;
6444 return ;
6445 }
6446 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6447
6448 if(NULL == pWdaParams)
6449 {
6450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6451 "%s: pWdaParams received NULL", __func__);
6452 VOS_ASSERT(0) ;
6453 return ;
6454 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306455 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6456 if( NULL == pTdlsLinkEstablishParams )
6457 {
6458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6459 "%s: pTdlsLinkEstablishParams "
6460 "received NULL " ,__func__);
6461 VOS_ASSERT(0);
6462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6463 vos_mem_free(pWdaParams);
6464 return ;
6465 }
6466 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6467 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306469 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306470 /* send response to UMAC*/
6471 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6472
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306473 return ;
6474}
6475
6476VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6477 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6478{
6479 WDI_Status status = WDI_STATUS_SUCCESS ;
6480 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6481 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6482 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6483 tWDA_ReqParams *pWdaParams = NULL;
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6485 "------> %s " ,__func__);
6486 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6487 {
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6489 "%s: VOS MEM Alloc Failure", __func__);
6490 VOS_ASSERT(0);
6491 return VOS_STATUS_E_NOMEM;
6492 }
6493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6494 if(NULL == pWdaParams)
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6497 "%s: VOS MEM Alloc Failure", __func__);
6498 vos_mem_free(pTdlsLinkEstablishParams);
6499 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6500 VOS_ASSERT(0);
6501 return VOS_STATUS_E_NOMEM;
6502 }
6503 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306504 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306505 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306506 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306507 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306508 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306509 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306510 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306511 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306512 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306513
6514 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6515 /* Store msg pointer from PE, as this will be used for response */
6516 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6517 /* store Params pass it to WDI */
6518 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6519 pWdaParams->pWdaContext = pWDA;
6520
6521 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6522 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6523 WDA_SetTDLSLinkEstablishReqParamsCallback,
6524 pWdaParams);
6525 if(IS_WDI_STATUS_FAILURE(status))
6526 {
6527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6528 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6530 vos_mem_free(pWdaParams->wdaMsgParam);
6531 vos_mem_free(pWdaParams);
6532 }
6533 return CONVERT_WDI2VOS_STATUS(status);
6534}
6535#endif
6536
6537
Jeff Johnson295189b2012-06-20 16:38:30 -07006538#ifdef WLAN_FEATURE_VOWIFI_11R
6539/*
6540 * FUNCTION: WDA_AggrAddTSReqCallback
6541 * send ADD AGGREGATED TS RSP back to PE
6542 */
6543void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6544{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6546 tWDA_CbContext *pWDA;
6547 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006550 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006551 if(NULL == pWdaParams)
6552 {
6553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006554 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006555 VOS_ASSERT(0) ;
6556 return ;
6557 }
6558
6559 pWDA = pWdaParams->pWdaContext;
6560 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006561
6562 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6563 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006564 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006567
6568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6569 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 return ;
6571}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006572/*
6573 * FUNCTION: WDA_ProcessAddTSReq
6574 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6575 */
6576VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6577 tAggrAddTsParams *pAggrAddTsReqParams)
6578{
6579 WDI_Status status = WDI_STATUS_SUCCESS ;
6580 int i;
6581 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006582 tWDA_ReqParams *pWdaParams = NULL;
6583
6584
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6588 sizeof(WDI_AggrAddTSReqParamsType)) ;
6589 if(NULL == wdiAggrAddTSReqParam)
6590 {
6591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 VOS_ASSERT(0);
6594 return VOS_STATUS_E_NOMEM;
6595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006596
6597
6598 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6599 if(NULL == pWdaParams)
6600 {
6601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006602 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006603 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006604 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006605 VOS_ASSERT(0);
6606 return VOS_STATUS_E_NOMEM;
6607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6609 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6610 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6612 {
6613 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6614 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6615 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6617 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6618 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6619 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6620 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6621 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6622 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6623 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6624 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6625 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6626 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6627 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6628 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6629 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6630 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6631 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6633 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6635 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6636 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6637 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6638 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6639 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6640 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6641 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6642 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6643 pAggrAddTsReqParams->tspec[i].inactInterval;
6644 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6645 pAggrAddTsReqParams->tspec[i].suspendInterval;
6646 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6647 pAggrAddTsReqParams->tspec[i].svcStartTime;
6648 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6649 pAggrAddTsReqParams->tspec[i].minDataRate;
6650 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6651 pAggrAddTsReqParams->tspec[i].meanDataRate;
6652 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6653 pAggrAddTsReqParams->tspec[i].peakDataRate;
6654 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6655 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6656 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6657 pAggrAddTsReqParams->tspec[i].delayBound;
6658 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6659 pAggrAddTsReqParams->tspec[i].minPhyRate;
6660 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6661 pAggrAddTsReqParams->tspec[i].surplusBw;
6662 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6663 pAggrAddTsReqParams->tspec[i].mediumTime;
6664 }
6665
6666 /* TODO: tAggrAddTsParams doesn't have the following fields */
6667#if 0
6668 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6669 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6670 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6671 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6672#endif
6673 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6674
6675 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006676 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006678 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6679
6680 pWdaParams->pWdaContext = pWDA;
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006683 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6684
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 if(IS_WDI_STATUS_FAILURE(status))
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6688 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6690 vos_mem_free(pWdaParams);
6691
6692 /* send the failure response back to PE*/
6693 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6694 {
6695 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6696 }
6697
6698 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6699 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 return CONVERT_WDI2VOS_STATUS(status) ;
6702}
6703#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006704/*
6705 * FUNCTION: WDA_EnterImpsReqCallback
6706 * send Enter IMPS RSP back to PE
6707 */
6708void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6709{
6710 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006712 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006713 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 return ;
6715}
Jeff Johnson295189b2012-06-20 16:38:30 -07006716/*
6717 * FUNCTION: WDA_ProcessEnterImpsReq
6718 * Request to WDI to Enter IMPS power state.
6719 */
6720VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6721{
6722 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006724 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 if(IS_WDI_STATUS_FAILURE(status))
6727 {
6728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6729 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006730 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006732 return CONVERT_WDI2VOS_STATUS(status) ;
6733}
Jeff Johnson295189b2012-06-20 16:38:30 -07006734/*
6735 * FUNCTION: WDA_ExitImpsReqCallback
6736 * send Exit IMPS RSP back to PE
6737 */
6738void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6739{
6740 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006742 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006743 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 return ;
6745}
Jeff Johnson295189b2012-06-20 16:38:30 -07006746/*
6747 * FUNCTION: WDA_ProcessExitImpsReq
6748 * Request to WDI to Exit IMPS power state.
6749 */
6750VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6751{
6752 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006754 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 if(IS_WDI_STATUS_FAILURE(status))
6757 {
6758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6759 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006760 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 return CONVERT_WDI2VOS_STATUS(status) ;
6763}
Jeff Johnson295189b2012-06-20 16:38:30 -07006764/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006765 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 * send Enter BMPS RSP back to PE
6767 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006768void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006769{
6770 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6771 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006772 tEnterBmpsParams *pEnterBmpsRspParams;
6773
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 if(NULL == pWdaParams)
6777 {
6778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 VOS_ASSERT(0) ;
6781 return ;
6782 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006783
6784 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6785 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6786
6787 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006788 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006789
6790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006792 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6793
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 return ;
6795}
Jeff Johnson295189b2012-06-20 16:38:30 -07006796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006797 * FUNCTION: WDA_EnterBmpsReqCallback
6798 * Free memory and send Enter BMPS RSP back to PE.
6799 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6800 */
6801void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6802{
6803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6804 tWDA_CbContext *pWDA;
6805 tEnterBmpsParams *pEnterBmpsRspParams;
6806
6807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6808 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6809
6810 if(NULL == pWdaParams)
6811 {
6812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6813 "%s: pWdaParams received NULL", __func__);
6814 VOS_ASSERT(0);
6815 return;
6816 }
6817
6818 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6819 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6820 pEnterBmpsRspParams->status = wdiStatus;
6821
6822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6823 {
6824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6825 vos_mem_free(pWdaParams);
6826 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6827 }
6828
6829 return;
6830}
6831/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 * FUNCTION: WDA_ProcessEnterBmpsReq
6833 * Request to WDI to Enter BMPS power state.
6834 */
6835VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6836 tEnterBmpsParams *pEnterBmpsReqParams)
6837{
6838 WDI_Status status = WDI_STATUS_SUCCESS;
6839 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6840 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006846 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 VOS_ASSERT(0);
6848 return VOS_STATUS_E_FAILURE;
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6851 if (NULL == wdiEnterBmpsReqParams)
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006856 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6857 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 return VOS_STATUS_E_NOMEM;
6859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6861 if (NULL == pWdaParams)
6862 {
6863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 VOS_ASSERT(0);
6866 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006867 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6868 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 return VOS_STATUS_E_NOMEM;
6870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6872 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6873 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6874 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 // For CCX and 11R Roaming
6876 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6877 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6878 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006879 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6880 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006881
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 /* Store param pointer as passed in by caller */
6883 /* store Params pass it to WDI */
6884 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006885 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006888 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 if (IS_WDI_STATUS_FAILURE(status))
6890 {
6891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6892 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006894 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006896 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 return CONVERT_WDI2VOS_STATUS(status);
6899}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006900
6901
6902static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6903 WDI_Status wdiStatus,
6904 tExitBmpsParams *pExitBmpsReqParams)
6905{
6906 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6907
6908 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6909}
6910
6911
Jeff Johnson295189b2012-06-20 16:38:30 -07006912/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006913 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 * send Exit BMPS RSP back to PE
6915 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006916void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006917{
6918 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6919 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006920 tExitBmpsParams *pExitBmpsRspParams;
6921
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 if(NULL == pWdaParams)
6925 {
6926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006927 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 VOS_ASSERT(0) ;
6929 return ;
6930 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006931
6932 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6933 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6934
6935 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006936 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6939 vos_mem_free(pWdaParams) ;
6940
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006941 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 return ;
6943}
Jeff Johnson295189b2012-06-20 16:38:30 -07006944/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006945 * FUNCTION: WDA_ExitBmpsReqCallback
6946 * Free memory and send Exit BMPS RSP back to PE.
6947 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6948 */
6949void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6950{
6951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6952 tWDA_CbContext *pWDA;
6953 tExitBmpsParams *pExitBmpsRspParams;
6954
6955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6956 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6957
6958 if(NULL == pWdaParams)
6959 {
6960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6961 "%s: pWdaParams received NULL", __func__);
6962 VOS_ASSERT(0);
6963 return;
6964 }
6965
6966 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6967 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6968 pExitBmpsRspParams->status = wdiStatus;
6969
6970 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6971 {
6972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6973 vos_mem_free(pWdaParams);
6974 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
6975 }
6976
6977 return;
6978}
6979/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 * FUNCTION: WDA_ProcessExitBmpsReq
6981 * Request to WDI to Exit BMPS power state.
6982 */
6983VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6984 tExitBmpsParams *pExitBmpsReqParams)
6985{
6986 WDI_Status status = WDI_STATUS_SUCCESS ;
6987 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6988 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6989 sizeof(WDI_ExitBmpsReqParamsType)) ;
6990 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 if(NULL == wdiExitBmpsReqParams)
6994 {
6995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006998 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 return VOS_STATUS_E_NOMEM;
7000 }
7001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7002 if(NULL == pWdaParams)
7003 {
7004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 VOS_ASSERT(0);
7007 vos_mem_free(wdiExitBmpsReqParams);
7008 return VOS_STATUS_E_NOMEM;
7009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007011
7012 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7013
Yue Ma7f44bbe2013-04-12 11:47:39 -07007014 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7015 wdiExitBmpsReqParams->pUserData = pWdaParams;
7016
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 /* Store param pointer as passed in by caller */
7018 /* store Params pass it to WDI */
7019 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7020 pWdaParams->pWdaContext = pWDA;
7021 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007023 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 if(IS_WDI_STATUS_FAILURE(status))
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7027 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7029 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007030 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 return CONVERT_WDI2VOS_STATUS(status) ;
7033}
Jeff Johnson295189b2012-06-20 16:38:30 -07007034/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007035 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 * send Enter UAPSD RSP back to PE
7037 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007038void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007039{
7040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7041 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007042 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 if(NULL == pWdaParams)
7046 {
7047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 VOS_ASSERT(0) ;
7050 return ;
7051 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007052
7053 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7054 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7055
7056 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007057 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007058
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7060 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007061 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 return ;
7063}
Jeff Johnson295189b2012-06-20 16:38:30 -07007064/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007065 * FUNCTION: WDA_EnterUapsdReqCallback
7066 * Free memory and send Enter UAPSD RSP back to PE.
7067 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7068 */
7069void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7070{
7071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7072 tWDA_CbContext *pWDA;
7073 tUapsdParams *pEnterUapsdRsqParams;
7074
7075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7076 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7077
7078 if(NULL == pWdaParams)
7079 {
7080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7081 "%s: pWdaParams received NULL", __func__);
7082 VOS_ASSERT(0);
7083 return;
7084 }
7085
7086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7087 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7088 pEnterUapsdRsqParams->status = wdiStatus;
7089
7090 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7091 {
7092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7093 vos_mem_free(pWdaParams);
7094 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7095 }
7096
7097 return;
7098}
7099/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 * FUNCTION: WDA_ProcessEnterUapsdReq
7101 * Request to WDI to Enter UAPSD power state.
7102 */
7103VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7104 tUapsdParams *pEnterUapsdReqParams)
7105{
7106 WDI_Status status = WDI_STATUS_SUCCESS ;
7107 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7108 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7109 sizeof(WDI_EnterUapsdReqParamsType)) ;
7110 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 if(NULL == wdiEnterUapsdReqParams)
7114 {
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_ASSERT(0);
7118 return VOS_STATUS_E_NOMEM;
7119 }
7120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7121 if(NULL == pWdaParams)
7122 {
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_ASSERT(0);
7126 vos_mem_free(wdiEnterUapsdReqParams);
7127 return VOS_STATUS_E_NOMEM;
7128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7130 pEnterUapsdReqParams->beDeliveryEnabled;
7131 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7132 pEnterUapsdReqParams->beTriggerEnabled;
7133 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7134 pEnterUapsdReqParams->bkDeliveryEnabled;
7135 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7136 pEnterUapsdReqParams->bkTriggerEnabled;
7137 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7138 pEnterUapsdReqParams->viDeliveryEnabled;
7139 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7140 pEnterUapsdReqParams->viTriggerEnabled;
7141 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7142 pEnterUapsdReqParams->voDeliveryEnabled;
7143 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7144 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007145 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007146
Yue Ma7f44bbe2013-04-12 11:47:39 -07007147 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7148 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007149
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 /* Store param pointer as passed in by caller */
7151 /* store Params pass it to WDI */
7152 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7153 pWdaParams->pWdaContext = pWDA;
7154 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007156 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 if(IS_WDI_STATUS_FAILURE(status))
7158 {
7159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7160 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7161 vos_mem_free(pWdaParams->wdaMsgParam) ;
7162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7163 vos_mem_free(pWdaParams) ;
7164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 return CONVERT_WDI2VOS_STATUS(status) ;
7166}
Jeff Johnson295189b2012-06-20 16:38:30 -07007167/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007168 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 * send Exit UAPSD RSP back to PE
7170 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007171void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007172{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007173
7174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7175 tWDA_CbContext *pWDA;
7176 tExitUapsdParams *pExitUapsdRspParams;
7177
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007179 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007180 if(NULL == pWdaParams)
7181 {
7182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007183 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007184 VOS_ASSERT(0);
7185 return;
7186 }
7187
7188 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7189 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7190
7191 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007192 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007193
7194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7195 vos_mem_free(pWdaParams) ;
7196
7197 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 return ;
7199}
Jeff Johnson295189b2012-06-20 16:38:30 -07007200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007201 * FUNCTION: WDA_ExitUapsdReqCallback
7202 * Free memory and send Exit UAPSD RSP back to PE.
7203 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7204 */
7205void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7206{
7207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7208 tWDA_CbContext *pWDA;
7209 tExitUapsdParams *pExitUapsdRspParams;
7210
7211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7212 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7213
7214 if(NULL == pWdaParams)
7215 {
7216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7217 "%s: pWdaParams received NULL", __func__);
7218 VOS_ASSERT(0);
7219 return;
7220 }
7221
7222 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7223 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7224 pExitUapsdRspParams->status = wdiStatus;
7225
7226 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7227 {
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7229 vos_mem_free(pWdaParams);
7230 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7231 }
7232
7233 return;
7234}
7235/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 * FUNCTION: WDA_ProcessExitUapsdReq
7237 * Request to WDI to Exit UAPSD power state.
7238 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007239VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7240 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007241{
7242 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007243 tWDA_ReqParams *pWdaParams ;
7244 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7245 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7246 sizeof(WDI_ExitUapsdReqParamsType)) ;
7247
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007250
7251 if(NULL == wdiExitUapsdReqParams)
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007255 VOS_ASSERT(0);
7256 return VOS_STATUS_E_NOMEM;
7257 }
7258 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7259 if(NULL == pWdaParams)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007263 VOS_ASSERT(0);
7264 vos_mem_free(wdiExitUapsdReqParams);
7265 return VOS_STATUS_E_NOMEM;
7266 }
7267
7268 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007269 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7270 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007271
7272 /* Store param pointer as passed in by caller */
7273 /* store Params pass it to WDI */
7274 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7275 pWdaParams->pWdaContext = pWDA;
7276 pWdaParams->wdaMsgParam = pExitUapsdParams;
7277
Yue Ma7f44bbe2013-04-12 11:47:39 -07007278 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 if(IS_WDI_STATUS_FAILURE(status))
7280 {
7281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7282 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007283 vos_mem_free(pWdaParams->wdaMsgParam) ;
7284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7285 vos_mem_free(pWdaParams) ;
7286
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 return CONVERT_WDI2VOS_STATUS(status) ;
7289}
7290
Jeff Johnson295189b2012-06-20 16:38:30 -07007291/*
7292 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7293 *
7294 */
7295void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7296{
7297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007299 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007300 if(NULL == pWdaParams)
7301 {
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007303 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 VOS_ASSERT(0) ;
7305 return ;
7306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 if( pWdaParams != NULL )
7308 {
7309 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7310 {
7311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7312 }
7313 if( pWdaParams->wdaMsgParam != NULL )
7314 {
7315 vos_mem_free(pWdaParams->wdaMsgParam) ;
7316 }
7317 vos_mem_free(pWdaParams) ;
7318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 return ;
7320}
Jeff Johnson295189b2012-06-20 16:38:30 -07007321/*
7322 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7323 * Request to WDI to set the power save params at start.
7324 */
7325VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7326 tSirPowerSaveCfg *pPowerSaveCfg)
7327{
7328 WDI_Status status = WDI_STATUS_SUCCESS ;
7329 tHalCfg *tlvStruct = NULL ;
7330 tANI_U8 *tlvStructStart = NULL ;
7331 v_PVOID_t *configParam;
7332 tANI_U32 configParamSize;
7333 tANI_U32 *configDataValue;
7334 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7335 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007337 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007338 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7339 {
7340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007341 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007343 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 return VOS_STATUS_E_FAILURE;
7345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7347 if (NULL == wdiPowerSaveCfg)
7348 {
7349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007352 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 return VOS_STATUS_E_NOMEM;
7354 }
7355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7356 if(NULL == pWdaParams)
7357 {
7358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 VOS_ASSERT(0);
7361 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007362 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 return VOS_STATUS_E_NOMEM;
7364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7366 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 if(NULL == configParam)
7368 {
7369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007370 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007371 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 vos_mem_free(pWdaParams);
7373 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007374 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 return VOS_STATUS_E_NOMEM;
7376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 vos_mem_set(configParam, configParamSize, 0);
7378 wdiPowerSaveCfg->pConfigBuffer = configParam;
7379 tlvStruct = (tHalCfg *)configParam;
7380 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7382 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7383 tlvStruct->length = sizeof(tANI_U32);
7384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7385 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7387 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7389 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7390 tlvStruct->length = sizeof(tANI_U32);
7391 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7392 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007393 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7394 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7396 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7397 tlvStruct->length = sizeof(tANI_U32);
7398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7399 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7401 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7403 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7404 tlvStruct->length = sizeof(tANI_U32);
7405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7406 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7408 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7410 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7411 tlvStruct->length = sizeof(tANI_U32);
7412 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7413 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7415 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7417 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7418 tlvStruct->length = sizeof(tANI_U32);
7419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7420 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007421 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7422 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7424 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7425 tlvStruct->length = sizeof(tANI_U32);
7426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7427 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7429 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7431 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7432 tlvStruct->length = sizeof(tANI_U32);
7433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7434 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7435 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7436 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7438 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7439 tlvStruct->length = sizeof(tANI_U32);
7440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7441 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7442 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7443 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7445 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7446 tlvStruct->length = sizeof(tANI_U32);
7447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7448 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7450 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7452 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7453 tlvStruct->length = sizeof(tANI_U32);
7454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7455 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007456 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7457 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 /* store Params pass it to WDI */
7461 pWdaParams->wdaMsgParam = configParam;
7462 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7463 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7465 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 if(IS_WDI_STATUS_FAILURE(status))
7467 {
7468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7469 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7470 vos_mem_free(pWdaParams->wdaMsgParam);
7471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7472 vos_mem_free(pWdaParams);
7473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 return CONVERT_WDI2VOS_STATUS(status);
7476}
Jeff Johnson295189b2012-06-20 16:38:30 -07007477/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007478 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 *
7480 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007481void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007482{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7484
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007486 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007487
7488 if(NULL == pWdaParams)
7489 {
7490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7491 "%s: pWdaParams received NULL", __func__);
7492 VOS_ASSERT(0);
7493 return ;
7494 }
7495
7496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 vos_mem_free(pWdaParams);
7498
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 return ;
7500}
Jeff Johnson295189b2012-06-20 16:38:30 -07007501/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007502 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7503 * Free memory.
7504 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7505 */
7506void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7507{
7508 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7509
7510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7511 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7512
7513 if(NULL == pWdaParams)
7514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7516 "%s: pWdaParams received NULL", __func__);
7517 VOS_ASSERT(0);
7518 return;
7519 }
7520
7521 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7522 {
7523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7524 vos_mem_free(pWdaParams);
7525 }
7526
7527 return;
7528}
7529/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 * FUNCTION: WDA_SetUapsdAcParamsReq
7531 * Request to WDI to set the UAPSD params for an ac (sta mode).
7532 */
7533VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7534 tUapsdInfo *pUapsdInfo)
7535{
7536 WDI_Status status = WDI_STATUS_SUCCESS;
7537 tWDA_CbContext *pWDA = NULL ;
7538 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7539 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7540 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7541 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007543 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 if(NULL == wdiUapsdParams)
7545 {
7546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 VOS_ASSERT(0);
7549 return VOS_STATUS_E_NOMEM;
7550 }
7551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7552 if(NULL == pWdaParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0);
7557 vos_mem_free(wdiUapsdParams);
7558 return VOS_STATUS_E_NOMEM;
7559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7561 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7562 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7563 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7564 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7565 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007566 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7567 wdiUapsdParams->pUserData = pWdaParams;
7568
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 pWdaParams->pWdaContext = pWDA;
7571 /* Store param pointer as passed in by caller */
7572 pWdaParams->wdaMsgParam = pUapsdInfo;
7573 /* store Params pass it to WDI */
7574 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007576 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 if(IS_WDI_STATUS_FAILURE(status))
7579 {
7580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7581 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7583 vos_mem_free(pWdaParams);
7584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7586 return VOS_STATUS_SUCCESS;
7587 else
7588 return VOS_STATUS_E_FAILURE;
7589
Jeff Johnson295189b2012-06-20 16:38:30 -07007590}
7591/*
7592 * FUNCTION: WDA_ClearUapsdAcParamsReq
7593 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7594 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7595 * and again enter the UPASD with the modified params. Hence the disable
7596 * function was kept empty.
7597 *
7598 */
7599VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7600{
7601 /* do nothing */
7602 return VOS_STATUS_SUCCESS;
7603}
Jeff Johnson295189b2012-06-20 16:38:30 -07007604/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007605 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 *
7607 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007608void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007609{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7611
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007613 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007614
7615 if(NULL == pWdaParams)
7616 {
7617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007618 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007619 VOS_ASSERT(0) ;
7620 return ;
7621 }
7622
7623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7624 vos_mem_free(pWdaParams->wdaMsgParam);
7625 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007626
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 //print a msg, nothing else to do
7628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007629 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 return ;
7631}
Jeff Johnson295189b2012-06-20 16:38:30 -07007632/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007633 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7634 * Free memory.
7635 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7636 */
7637void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7638{
7639 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7640
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7642 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7643
7644 if(NULL == pWdaParams)
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7647 "%s: pWdaParams received NULL", __func__);
7648 VOS_ASSERT(0);
7649 return;
7650 }
7651
7652 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7653 {
7654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7655 vos_mem_free(pWdaParams->wdaMsgParam);
7656 vos_mem_free(pWdaParams);
7657 }
7658
7659 return;
7660}
7661/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 * FUNCTION: WDA_UpdateUapsdParamsReq
7663 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7664 */
7665VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7666 tUpdateUapsdParams* pUpdateUapsdInfo)
7667{
7668 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007669 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7671 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7672 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007673 tWDA_ReqParams *pWdaParams = NULL;
7674
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007676 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 if(NULL == wdiUpdateUapsdParams)
7678 {
7679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 VOS_ASSERT(0);
7682 return VOS_STATUS_E_NOMEM;
7683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7685 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7686 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007687 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7688 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007689
7690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7691 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007696 vos_mem_free(pUpdateUapsdInfo);
7697 vos_mem_free(wdiUpdateUapsdParams);
7698 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007701 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007702 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007703 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7704 pWdaParams->pWdaContext = pWDA;
7705
Jeff Johnson43971f52012-07-17 12:26:56 -07007706 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007707 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007708 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007709
Jeff Johnson43971f52012-07-17 12:26:56 -07007710 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 {
7712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7713 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007714 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7716 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007717 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007719 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007720}
Jeff Johnson295189b2012-06-20 16:38:30 -07007721/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007722 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 *
7724 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007725void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007726{
7727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 if(WDI_STATUS_SUCCESS != wdiStatus)
7731 {
7732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007733 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 if(NULL == pWdaParams)
7736 {
7737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007738 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 VOS_ASSERT(0) ;
7740 return ;
7741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7743 vos_mem_free(pWdaParams->wdaMsgParam);
7744 vos_mem_free(pWdaParams);
7745 return ;
7746}
Jeff Johnson295189b2012-06-20 16:38:30 -07007747/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007748 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7749 * Free memory.
7750 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7751 */
7752void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7753{
7754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7755
7756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7757 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7758
7759 if(NULL == pWdaParams)
7760 {
7761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7762 "%s: pWdaParams received NULL", __func__);
7763 VOS_ASSERT(0);
7764 return;
7765 }
7766
7767 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7768 {
7769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7770 vos_mem_free(pWdaParams->wdaMsgParam);
7771 vos_mem_free(pWdaParams);
7772 }
7773
7774 return;
7775}
7776/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7778 *
7779 */
7780VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7781 tSirWlanSetRxpFilters *pWlanSuspendParam)
7782{
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007784 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7786 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7787 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7788 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 if(NULL == wdiRxpFilterParams)
7792 {
7793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 VOS_ASSERT(0);
7796 vos_mem_free(pWlanSuspendParam);
7797 return VOS_STATUS_E_NOMEM;
7798 }
7799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7800 if(NULL == pWdaParams)
7801 {
7802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 VOS_ASSERT(0);
7805 vos_mem_free(wdiRxpFilterParams);
7806 vos_mem_free(pWlanSuspendParam);
7807 return VOS_STATUS_E_NOMEM;
7808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7810 pWlanSuspendParam->setMcstBcstFilter;
7811 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7812 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7813
Yue Ma7f44bbe2013-04-12 11:47:39 -07007814 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7815 wdiRxpFilterParams->pUserData = pWdaParams;
7816
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 pWdaParams->pWdaContext = pWDA;
7818 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7819 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007820 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007821 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007823 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 {
7825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7826 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007827 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7829 vos_mem_free(pWdaParams->wdaMsgParam);
7830 vos_mem_free(pWdaParams);
7831 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007832 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833}
Jeff Johnson295189b2012-06-20 16:38:30 -07007834/*
7835 * FUNCTION: WDA_WdiIndicationCallback
7836 *
7837 */
7838void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7839 void* pUserData)
7840{
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843}
Jeff Johnson295189b2012-06-20 16:38:30 -07007844/*
7845 * FUNCTION: WDA_ProcessWlanSuspendInd
7846 *
7847 */
7848VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7849 tSirWlanSuspendParam *pWlanSuspendParam)
7850{
7851 WDI_Status wdiStatus;
7852 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007854 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7856 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7857 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7858 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7861 if(WDI_STATUS_PENDING == wdiStatus)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007864 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 }
7866 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007869 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 vos_mem_free(pWlanSuspendParam);
7872 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7873}
7874
Chet Lanctot186b5732013-03-18 10:26:30 -07007875#ifdef WLAN_FEATURE_11W
7876/*
7877 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7878 *
7879 */
7880VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7881 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7882{
7883 WDI_Status wdiStatus;
7884 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7886 "------> %s ", __func__);
7887
7888 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7889 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7890 sizeof(tSirMacAddr));
7891
7892 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7893 wdiExclUnencryptParams.pUserData = pWDA;
7894
7895 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7896 if(WDI_STATUS_PENDING == wdiStatus)
7897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7899 "Pending received for %s:%d ", __func__, __LINE__ );
7900 }
7901 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7902 {
7903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7904 "Failure in %s:%d ", __func__, __LINE__ );
7905 }
7906 vos_mem_free(pExclUnencryptParam);
7907 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7908}
7909#endif
7910
Jeff Johnson295189b2012-06-20 16:38:30 -07007911/*
7912 * FUNCTION: WDA_ProcessWlanResumeCallback
7913 *
7914 */
7915void WDA_ProcessWlanResumeCallback(
7916 WDI_SuspendResumeRspParamsType *resumeRspParams,
7917 void* pUserData)
7918{
7919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007921 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 if(NULL == pWdaParams)
7923 {
7924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007925 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 VOS_ASSERT(0) ;
7927 return ;
7928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7930 {
7931 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007932 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7935 vos_mem_free(pWdaParams->wdaMsgParam);
7936 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 return ;
7938}
Jeff Johnson295189b2012-06-20 16:38:30 -07007939/*
7940 * FUNCTION: WDA_ProcessWlanResumeReq
7941 *
7942 */
7943VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7944 tSirWlanResumeParam *pWlanResumeParam)
7945{
7946 WDI_Status wdiStatus;
7947 WDI_ResumeParamsType *wdiResumeParams =
7948 (WDI_ResumeParamsType *)vos_mem_malloc(
7949 sizeof(WDI_ResumeParamsType) ) ;
7950 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007952 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 if(NULL == wdiResumeParams)
7954 {
7955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 VOS_ASSERT(0);
7958 return VOS_STATUS_E_NOMEM;
7959 }
7960 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7961 if(NULL == pWdaParams)
7962 {
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 VOS_ASSERT(0);
7966 vos_mem_free(wdiResumeParams);
7967 return VOS_STATUS_E_NOMEM;
7968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7970 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 wdiResumeParams->wdiReqStatusCB = NULL;
7973 pWdaParams->wdaMsgParam = pWlanResumeParam;
7974 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7975 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7977 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7978 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "Failure in Host Resume REQ WDI API, free all the memory " );
7983 VOS_ASSERT(0);
7984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7985 vos_mem_free(pWdaParams->wdaMsgParam);
7986 vos_mem_free(pWdaParams);
7987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7989}
7990
Jeff Johnson295189b2012-06-20 16:38:30 -07007991/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007992 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 *
7994 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007995void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007996{
7997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 if(NULL == pWdaParams)
8001 {
8002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 VOS_ASSERT(0) ;
8005 return ;
8006 }
8007
8008 vos_mem_free(pWdaParams->wdaMsgParam) ;
8009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8010 vos_mem_free(pWdaParams) ;
8011 /*
8012 * No respone required for SetBeaconFilter req so just free the request
8013 * param here
8014 */
8015
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 return ;
8017}
Jeff Johnson295189b2012-06-20 16:38:30 -07008018/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008019 * FUNCTION: WDA_SetBeaconFilterReqCallback
8020 * Free memory.
8021 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8022 */
8023void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8024{
8025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8026
8027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8028 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8029
8030 if(NULL == pWdaParams)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8033 "%s: pWdaParams received NULL", __func__);
8034 VOS_ASSERT(0);
8035 return;
8036 }
8037
8038 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8039 {
8040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8041 vos_mem_free(pWdaParams->wdaMsgParam);
8042 vos_mem_free(pWdaParams);
8043 }
8044
8045 return;
8046}
8047/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 * FUNCTION: WDA_SetBeaconFilterReq
8049 * Request to WDI to send the beacon filtering related information.
8050 */
8051VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8052 tBeaconFilterMsg* pBeaconFilterInfo)
8053{
8054 WDI_Status status = WDI_STATUS_SUCCESS;
8055 tANI_U8 *dstPtr, *srcPtr;
8056 tANI_U8 filterLength;
8057 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8058 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8059 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8060 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 if(NULL == wdiBeaconFilterInfo)
8064 {
8065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008066 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 VOS_ASSERT(0);
8068 return VOS_STATUS_E_NOMEM;
8069 }
8070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8071 if(NULL == pWdaParams)
8072 {
8073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 VOS_ASSERT(0);
8076 vos_mem_free(wdiBeaconFilterInfo);
8077 return VOS_STATUS_E_NOMEM;
8078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8080 pBeaconFilterInfo->beaconInterval;
8081 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8082 pBeaconFilterInfo->capabilityInfo;
8083 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8084 pBeaconFilterInfo->capabilityMask;
8085 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008086
8087 //Fill the BssIdx
8088 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8089
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 //Fill structure with info contained in the beaconFilterTable
8091 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8092 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8093 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8094 if(WDI_BEACON_FILTER_LEN < filterLength)
8095 {
8096 filterLength = WDI_BEACON_FILTER_LEN;
8097 }
8098 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008099 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8100 wdiBeaconFilterInfo->pUserData = pWdaParams;
8101
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 /* Store param pointer as passed in by caller */
8103 /* store Params pass it to WDI */
8104 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8105 pWdaParams->pWdaContext = pWDA;
8106 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8107
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008109 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 if(IS_WDI_STATUS_FAILURE(status))
8111 {
8112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8113 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8114 vos_mem_free(pWdaParams->wdaMsgParam) ;
8115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8116 vos_mem_free(pWdaParams) ;
8117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 return CONVERT_WDI2VOS_STATUS(status) ;
8119}
Jeff Johnson295189b2012-06-20 16:38:30 -07008120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008121 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 *
8123 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008124void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008125{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8127
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008129 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008130
8131 if(NULL == pWdaParams)
8132 {
8133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008134 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008135 VOS_ASSERT(0) ;
8136 return ;
8137 }
8138
8139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8140 vos_mem_free(pWdaParams->wdaMsgParam);
8141 vos_mem_free(pWdaParams);
8142
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 //print a msg, nothing else to do
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008145 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 return ;
8147}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008148/*
8149 * FUNCTION: WDA_RemBeaconFilterReqCallback
8150 * Free memory.
8151 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8152 */
8153void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8154{
8155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8156
8157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8158 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8159
8160 if(NULL == pWdaParams)
8161 {
8162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8163 "%s: pWdaParams received NULL", __func__);
8164 VOS_ASSERT(0);
8165 return;
8166 }
8167
8168 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8169 {
8170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8171 vos_mem_free(pWdaParams->wdaMsgParam);
8172 vos_mem_free(pWdaParams);
8173 }
8174
8175 return;
8176}
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 // TODO: PE does not have this feature for now implemented,
8178 // but the support for removing beacon filter exists between
8179 // HAL and FW. This function can be called whenever PE defines
8180 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008181/*
8182 * FUNCTION: WDA_RemBeaconFilterReq
8183 * Request to WDI to send the removal of beacon filtering related information.
8184 */
8185VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8186 tRemBeaconFilterMsg* pBeaconFilterInfo)
8187{
8188 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008189 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8191 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8192 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008193 tWDA_ReqParams *pWdaParams ;
8194
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008196 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 if(NULL == wdiBeaconFilterInfo)
8198 {
8199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 VOS_ASSERT(0);
8202 return VOS_STATUS_E_NOMEM;
8203 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008204 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8205 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 {
8207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008210 vos_mem_free(wdiBeaconFilterInfo);
8211 vos_mem_free(pBeaconFilterInfo);
8212 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008214
8215 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8216 pBeaconFilterInfo->ucIeCount;
8217 //Fill structure with info contained in the ucRemIeId
8218 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8219 pBeaconFilterInfo->ucRemIeId,
8220 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8221 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8222 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223
8224 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008225 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008227 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8228
8229 pWdaParams->pWdaContext = pWDA;
8230
Jeff Johnson43971f52012-07-17 12:26:56 -07008231 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008232 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008233 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 {
8235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8236 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008237 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8239 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008240 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008242 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008243}
Jeff Johnson295189b2012-06-20 16:38:30 -07008244/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008245 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 *
8247 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008248void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008249{
8250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 if(NULL == pWdaParams)
8254 {
8255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 VOS_ASSERT(0) ;
8258 return ;
8259 }
8260
8261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8262 vos_mem_free(pWdaParams) ;
8263
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 return ;
8265}
Jeff Johnson295189b2012-06-20 16:38:30 -07008266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008267 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8268 * Free memory.
8269 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8270 */
8271void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8272{
8273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8274
8275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8276 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8277
8278 if(NULL == pWdaParams)
8279 {
8280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8281 "%s: pWdaParams received NULL", __func__);
8282 VOS_ASSERT(0);
8283 return;
8284 }
8285
8286 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8287 {
8288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8289 vos_mem_free(pWdaParams);
8290 }
8291
8292 return;
8293}
8294/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 * FUNCTION: WDA_SetRSSIThresholdsReq
8296 * Request to WDI to set the RSSI thresholds (sta mode).
8297 */
8298VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8299{
8300 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008301 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 tWDA_CbContext *pWDA = NULL ;
8303 v_PVOID_t pVosContext = NULL;
8304 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8305 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8306 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8307 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008309 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 if(NULL == wdiRSSIThresholdsInfo)
8311 {
8312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 VOS_ASSERT(0);
8315 return VOS_STATUS_E_NOMEM;
8316 }
8317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8318 if(NULL == pWdaParams)
8319 {
8320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 VOS_ASSERT(0);
8323 vos_mem_free(wdiRSSIThresholdsInfo);
8324 return VOS_STATUS_E_NOMEM;
8325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8328 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8329 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8331 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8332 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8334 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8335 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008336 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8337 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8339 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8340
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 /* Store param pointer as passed in by caller */
8342 /* store Params pass it to WDI */
8343 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8344 pWdaParams->pWdaContext = pWDA;
8345 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008346 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008347 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008348 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8351 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008352 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8354 vos_mem_free(pWdaParams) ;
8355 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008356 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357
8358}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008359/*
Yue Madb90ac12013-04-04 13:39:13 -07008360 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 *
8362 */
Yue Madb90ac12013-04-04 13:39:13 -07008363void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008364{
8365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8366
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 if(NULL == pWdaParams)
8370 {
8371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 VOS_ASSERT(0) ;
8374 return ;
8375 }
8376
8377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8378 vos_mem_free(pWdaParams->wdaMsgParam);
8379 vos_mem_free(pWdaParams) ;
8380
8381 //print a msg, nothing else to do
8382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008383 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 return ;
8385}
Jeff Johnson295189b2012-06-20 16:38:30 -07008386/*
Yue Madb90ac12013-04-04 13:39:13 -07008387 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008388 * Free memory.
8389 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008390 */
8391void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8392{
8393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8394
8395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8396 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8397
8398 if(NULL == pWdaParams)
8399 {
8400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8401 "%s: Invalid pWdaParams pointer", __func__);
8402 VOS_ASSERT(0);
8403 return;
8404 }
8405
8406 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8407 {
8408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8409 vos_mem_free(pWdaParams->wdaMsgParam);
8410 vos_mem_free(pWdaParams);
8411 }
8412
8413 return;
8414}
8415/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 * FUNCTION: WDA_ProcessHostOffloadReq
8417 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8418 * to broadcast traffic (sta mode).
8419 */
8420VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8421 tSirHostOffloadReq *pHostOffloadParams)
8422{
8423 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008424 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8426 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8427 sizeof(WDI_HostOffloadReqParamsType)) ;
8428 tWDA_ReqParams *pWdaParams ;
8429
8430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008431 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008432
8433 if(NULL == wdiHostOffloadInfo)
8434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 VOS_ASSERT(0);
8438 return VOS_STATUS_E_NOMEM;
8439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8441 if(NULL == pWdaParams)
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 VOS_ASSERT(0);
8446 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008447 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 return VOS_STATUS_E_NOMEM;
8449 }
8450
8451 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8452 pHostOffloadParams->offloadType;
8453 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8454 pHostOffloadParams->enableOrDisable;
8455
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008456 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8457 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8458
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8460 {
8461 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8462 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8463 pHostOffloadParams->params.hostIpv4Addr,
8464 4);
8465 break;
8466 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8467 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8468 pHostOffloadParams->params.hostIpv6Addr,
8469 16);
8470 break;
8471 case SIR_IPV6_NS_OFFLOAD:
8472 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8473 pHostOffloadParams->params.hostIpv6Addr,
8474 16);
8475
8476#ifdef WLAN_NS_OFFLOAD
8477 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8478 {
8479 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8480 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8481 16);
8482 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8483 }
8484 else
8485 {
8486 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8487 }
8488
8489 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8490 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8491 16);
8492 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8493 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8494 6);
8495
8496 //Only two are supported so let's go through them without a loop
8497 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8498 {
8499 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8500 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8501 16);
8502 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8503 }
8504 else
8505 {
8506 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8507 }
8508
8509 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8510 {
8511 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8512 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8513 16);
8514 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8515 }
8516 else
8517 {
8518 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8519 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308520 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8521 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 break;
8523#endif //WLAN_NS_OFFLOAD
8524 default:
8525 {
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8527 "No Handling for Offload Type %x in WDA "
8528 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8529 //WDA_VOS_ASSERT(0) ;
8530 }
8531 }
Yue Madb90ac12013-04-04 13:39:13 -07008532 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8533 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008534
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008536 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 /* store Params pass it to WDI */
8538 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8539 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008540
Jeff Johnson295189b2012-06-20 16:38:30 -07008541
Jeff Johnson43971f52012-07-17 12:26:56 -07008542 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008543 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008544
Jeff Johnson43971f52012-07-17 12:26:56 -07008545 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 {
8547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8548 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008549 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8551 vos_mem_free(pWdaParams->wdaMsgParam);
8552 vos_mem_free(pWdaParams) ;
8553 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008554 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008555
8556}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008557/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008558 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 *
8560 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008561void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008562{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8564
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008567
8568 if(NULL == pWdaParams)
8569 {
8570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008571 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008572 VOS_ASSERT(0) ;
8573 return ;
8574 }
8575
8576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8577 vos_mem_free(pWdaParams->wdaMsgParam);
8578 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008579
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 //print a msg, nothing else to do
8581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008582 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008583 return ;
8584}
Jeff Johnson295189b2012-06-20 16:38:30 -07008585/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008586 * FUNCTION: WDA_KeepAliveReqCallback
8587 * Free memory.
8588 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8589 */
8590void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8591{
8592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8593
8594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8595 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8596
8597 if(NULL == pWdaParams)
8598 {
8599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8600 "%s: pWdaParams received NULL", __func__);
8601 VOS_ASSERT(0);
8602 return;
8603 }
8604
8605 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8606 {
8607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8608 vos_mem_free(pWdaParams->wdaMsgParam);
8609 vos_mem_free(pWdaParams);
8610 }
8611
8612 return;
8613}
8614/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 * FUNCTION: WDA_ProcessKeepAliveReq
8616 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8617 * wakeup due to broadcast traffic (sta mode).
8618 */
8619VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8620 tSirKeepAliveReq *pKeepAliveParams)
8621{
8622 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008623 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8625 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8626 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008627 tWDA_ReqParams *pWdaParams;
8628
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 if(NULL == wdiKeepAliveInfo)
8632 {
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008636 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 return VOS_STATUS_E_NOMEM;
8638 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008639
8640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8641 if(NULL == pWdaParams)
8642 {
8643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008644 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008645 VOS_ASSERT(0);
8646 vos_mem_free(wdiKeepAliveInfo);
8647 vos_mem_free(pKeepAliveParams);
8648 return VOS_STATUS_E_NOMEM;
8649 }
8650
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8652 pKeepAliveParams->packetType;
8653 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8654 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008655
8656 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8657 pKeepAliveParams->bssId,
8658 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008659
8660 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8661 {
8662 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8663 pKeepAliveParams->hostIpv4Addr,
8664 SIR_IPV4_ADDR_LEN);
8665 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8666 pKeepAliveParams->destIpv4Addr,
8667 SIR_IPV4_ADDR_LEN);
8668 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8669 pKeepAliveParams->destMacAddr,
8670 SIR_MAC_ADDR_LEN);
8671 }
8672 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8673 {
8674 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8675 SIR_IPV4_ADDR_LEN,
8676 0);
8677 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8678 SIR_IPV4_ADDR_LEN,
8679 0);
8680 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8681 SIR_MAC_ADDR_LEN,
8682 0);
8683 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008684 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8685 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008686
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008688 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8691 pWdaParams->pWdaContext = pWDA;
8692
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8694 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8695 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8696 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8697 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8699 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8700 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8701 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8702 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8704 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8705 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8706 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8707 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8708 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8709 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8710 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8712 "TimePeriod %d PacketType %d",
8713 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8714 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008715 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008716 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008717
Jeff Johnson43971f52012-07-17 12:26:56 -07008718 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8721 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008722 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8724 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008725 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008727 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008728
8729}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008730/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008731 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 *
8733 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008734void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008735 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8736 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008737{
8738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008740 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 if(NULL == pWdaParams)
8742 {
8743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008744 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 VOS_ASSERT(0) ;
8746 return ;
8747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8749 vos_mem_free(pWdaParams->wdaMsgParam);
8750 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 return ;
8752}
Jeff Johnson295189b2012-06-20 16:38:30 -07008753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008754 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8755 * Free memory.
8756 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8757 */
8758void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8759{
8760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8761
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8763 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8764
8765 if(NULL == pWdaParams)
8766 {
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8768 "%s: pWdaParams received NULL", __func__);
8769 VOS_ASSERT(0);
8770 return;
8771 }
8772
8773 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8774 {
8775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8776 vos_mem_free(pWdaParams->wdaMsgParam);
8777 vos_mem_free(pWdaParams);
8778 }
8779
8780 return;
8781}
8782
8783/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8785 * Request to WDI to add WOWL Bcast pattern
8786 */
8787VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8788 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8789{
8790 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008791 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8793 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8794 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8795 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 if(NULL == wdiWowlAddBcPtrnInfo)
8799 {
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 VOS_ASSERT(0);
8803 return VOS_STATUS_E_NOMEM;
8804 }
8805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8806 if(NULL == pWdaParams)
8807 {
8808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_ASSERT(0);
8811 vos_mem_free(wdiWowlAddBcPtrnInfo);
8812 return VOS_STATUS_E_NOMEM;
8813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8815 pWowlAddBcPtrnParams->ucPatternId;
8816 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8817 pWowlAddBcPtrnParams->ucPatternByteOffset;
8818 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8819 pWowlAddBcPtrnParams->ucPatternMaskSize;
8820 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8821 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8823 {
8824 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8825 pWowlAddBcPtrnParams->ucPattern,
8826 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8827 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8828 pWowlAddBcPtrnParams->ucPatternMask,
8829 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8830 }
8831 else
8832 {
8833 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8834 pWowlAddBcPtrnParams->ucPattern,
8835 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8836 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8837 pWowlAddBcPtrnParams->ucPatternMask,
8838 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8839
8840 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8841 pWowlAddBcPtrnParams->ucPatternExt,
8842 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8843 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8844 pWowlAddBcPtrnParams->ucPatternMaskExt,
8845 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8846 }
8847
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008848 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8849 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8850
Yue Ma7f44bbe2013-04-12 11:47:39 -07008851 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8852 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 /* Store param pointer as passed in by caller */
8854 /* store Params pass it to WDI */
8855 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8856 pWdaParams->pWdaContext = pWDA;
8857 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008858 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008859 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008860 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 {
8862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8863 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008864 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 vos_mem_free(pWdaParams->wdaMsgParam) ;
8866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8867 vos_mem_free(pWdaParams) ;
8868 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008869 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008870
8871}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008873 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 *
8875 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008876void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008877 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8878 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008879{
8880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008882 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 if(NULL == pWdaParams)
8884 {
8885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008886 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008887 VOS_ASSERT(0) ;
8888 return ;
8889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8891 vos_mem_free(pWdaParams->wdaMsgParam);
8892 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 return ;
8894}
Jeff Johnson295189b2012-06-20 16:38:30 -07008895/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008896 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8897 * Free memory.
8898 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8899 */
8900void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8901{
8902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8903
8904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8905 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8906
8907 if(NULL == pWdaParams)
8908 {
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8910 "%s: pWdaParams received NULL", __func__);
8911 VOS_ASSERT(0);
8912 return;
8913 }
8914
8915 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8916 {
8917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8918 vos_mem_free(pWdaParams->wdaMsgParam);
8919 vos_mem_free(pWdaParams);
8920 }
8921
8922 return;
8923}
8924/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8926 * Request to WDI to delete WOWL Bcast pattern
8927 */
8928VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8929 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8930{
8931 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008932 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8934 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8935 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8936 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008938 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 if(NULL == wdiWowlDelBcPtrnInfo)
8940 {
8941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 VOS_ASSERT(0);
8944 return VOS_STATUS_E_NOMEM;
8945 }
8946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8947 if(NULL == pWdaParams)
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 VOS_ASSERT(0);
8952 vos_mem_free(wdiWowlDelBcPtrnInfo);
8953 return VOS_STATUS_E_NOMEM;
8954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8956 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008957
8958 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8959 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8960
Yue Ma7f44bbe2013-04-12 11:47:39 -07008961 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
8962 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 /* Store param pointer as passed in by caller */
8964 /* store Params pass it to WDI */
8965 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8966 pWdaParams->pWdaContext = pWDA;
8967 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008968 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008969 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008970 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 {
8972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8973 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008974 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 vos_mem_free(pWdaParams->wdaMsgParam) ;
8976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8977 vos_mem_free(pWdaParams) ;
8978 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008979 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008980
8981}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008982/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008983 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 *
8985 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008986void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008987{
8988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8989 tWDA_CbContext *pWDA;
8990 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 if(NULL == pWdaParams)
8994 {
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 VOS_ASSERT(0) ;
8998 return ;
8999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9001 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9002
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009003 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9004
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9006 vos_mem_free(pWdaParams) ;
9007
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009008 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009009 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 return ;
9012}
Jeff Johnson295189b2012-06-20 16:38:30 -07009013/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009014 * FUNCTION: WDA_WowlEnterReqCallback
9015 * Free memory and send WOWL Enter RSP back to PE.
9016 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9017 */
9018void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9019{
9020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9021 tWDA_CbContext *pWDA;
9022 tSirHalWowlEnterParams *pWowlEnterParams;
9023
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9025 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9026
9027 if(NULL == pWdaParams)
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "%s: pWdaParams received NULL", __func__);
9031 VOS_ASSERT(0);
9032 return;
9033 }
9034
9035 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9036 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9037 pWowlEnterParams->status = wdiStatus;
9038
9039 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9040 {
9041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9042 vos_mem_free(pWdaParams);
9043 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9044 }
9045
9046 return;
9047}
9048/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 * FUNCTION: WDA_ProcessWowlEnterReq
9050 * Request to WDI to enter WOWL
9051 */
9052VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9053 tSirHalWowlEnterParams *pWowlEnterParams)
9054{
9055 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009056 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9058 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9059 sizeof(WDI_WowlEnterReqParamsType)) ;
9060 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 if(NULL == wdiWowlEnterInfo)
9064 {
9065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009066 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 VOS_ASSERT(0);
9068 return VOS_STATUS_E_NOMEM;
9069 }
9070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9071 if(NULL == pWdaParams)
9072 {
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 VOS_ASSERT(0);
9076 vos_mem_free(wdiWowlEnterInfo);
9077 return VOS_STATUS_E_NOMEM;
9078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9080 pWowlEnterParams->magicPtrn,
9081 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9083 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9085 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9087 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9089 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9091 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9093 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9095 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9097 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009098#ifdef WLAN_WAKEUP_EVENTS
9099 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9100 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9101
9102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9103 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9104
9105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9106 pWowlEnterParams->ucWowNetScanOffloadMatch;
9107
9108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9109 pWowlEnterParams->ucWowGTKRekeyError;
9110
9111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9112 pWowlEnterParams->ucWoWBSSConnLoss;
9113#endif // WLAN_WAKEUP_EVENTS
9114
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009115 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9116 pWowlEnterParams->bssIdx;
9117
Yue Ma7f44bbe2013-04-12 11:47:39 -07009118 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9119 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 /* Store param pointer as passed in by caller */
9121 /* store Params pass it to WDI */
9122 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9123 pWdaParams->pWdaContext = pWDA;
9124 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009125 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009126 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009127 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 {
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9130 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009131 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 vos_mem_free(pWdaParams->wdaMsgParam) ;
9133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9134 vos_mem_free(pWdaParams) ;
9135 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009136 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009137
9138}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009139/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009140 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 *
9142 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009143void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009144{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9146 tWDA_CbContext *pWDA;
9147 tSirHalWowlExitParams *pWowlExitParams;
9148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009149 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009150 if(NULL == pWdaParams)
9151 {
9152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009153 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009154 VOS_ASSERT(0) ;
9155 return ;
9156 }
9157 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9158 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9159
9160 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009161 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009162
9163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9164 vos_mem_free(pWdaParams) ;
9165
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009167 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009168 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 return ;
9170}
Jeff Johnson295189b2012-06-20 16:38:30 -07009171/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009172 * FUNCTION: WDA_WowlExitReqCallback
9173 * Free memory and send WOWL Exit RSP back to PE.
9174 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9175 */
9176void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9177{
9178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9179 tWDA_CbContext *pWDA;
9180 tSirHalWowlExitParams *pWowlExitParams;
9181
9182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9183 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9184
9185 if(NULL == pWdaParams)
9186 {
9187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9188 "%s: pWdaParams received NULL", __func__);
9189 VOS_ASSERT(0);
9190 return;
9191 }
9192
9193 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9194 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9195 pWowlExitParams->status = wdiStatus;
9196
9197 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9198 {
9199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9200 vos_mem_free(pWdaParams);
9201 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9202 }
9203
9204 return;
9205}
9206/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 * FUNCTION: WDA_ProcessWowlExitReq
9208 * Request to WDI to add WOWL Bcast pattern
9209 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009210VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9211 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009212{
9213 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009214 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009215 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9216 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9217 sizeof(WDI_WowlExitReqParamsType)) ;
9218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009220 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009221 if(NULL == wdiWowlExitInfo)
9222 {
9223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009224 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009225 VOS_ASSERT(0);
9226 return VOS_STATUS_E_NOMEM;
9227 }
9228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9229 if(NULL == pWdaParams)
9230 {
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009232 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009233 VOS_ASSERT(0);
9234 vos_mem_free(wdiWowlExitInfo);
9235 return VOS_STATUS_E_NOMEM;
9236 }
9237
9238 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9239 pWowlExitParams->bssIdx;
9240
Yue Ma7f44bbe2013-04-12 11:47:39 -07009241 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9242 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009243
9244 /* Store param pointer as passed in by caller */
9245 /* store Params pass it to WDI */
9246 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9247 pWdaParams->pWdaContext = pWDA;
9248 pWdaParams->wdaMsgParam = pWowlExitParams;
9249
9250 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009251 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009252
Jeff Johnson43971f52012-07-17 12:26:56 -07009253 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 {
9255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9256 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009257 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9259 vos_mem_free(pWdaParams->wdaMsgParam);
9260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009262 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009263}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009264/*
9265 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9266 * Request to WDI to determine whether a given station is capable of
9267 * using HW-based frame translation
9268 */
9269v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9270 tANI_U8 staIdx)
9271{
9272 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9273}
Jeff Johnson295189b2012-06-20 16:38:30 -07009274/*
9275 * FUNCTION: WDA_NvDownloadReqCallback
9276 * send NV Download RSP back to PE
9277 */
9278void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9279 void* pUserData)
9280{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009281
9282 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9283 tWDA_CbContext *pWDA;
9284
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009286 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009287
9288 if(NULL == pWdaParams)
9289 {
9290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009291 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009292 VOS_ASSERT(0) ;
9293 return ;
9294 }
9295
9296 pWDA = pWdaParams->pWdaContext;
9297
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9300 vos_mem_free(pWdaParams);
9301
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 return ;
9304}
Jeff Johnson295189b2012-06-20 16:38:30 -07009305/*
9306 * FUNCTION: WDA_ProcessNvDownloadReq
9307 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9308 */
9309VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9310{
9311 /* Initialize the local Variables*/
9312 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9313 v_VOID_t *pNvBuffer=NULL;
9314 v_SIZE_t bufferSize = 0;
9315 WDI_Status status = WDI_STATUS_E_FAILURE;
9316 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009317 tWDA_ReqParams *pWdaParams ;
9318
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 if(NULL == pWDA)
9322 {
9323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009324 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009325 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 return VOS_STATUS_E_FAILURE;
9327 }
9328
9329 /* Get the NV structure base address and size from VOS */
9330 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9332 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009333 if(NULL == wdiNvDownloadReqParam)
9334 {
9335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 VOS_ASSERT(0);
9338 return VOS_STATUS_E_NOMEM;
9339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 /* Copy Params to wdiNvDownloadReqParam*/
9341 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9342 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009343
9344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9345 if(NULL == pWdaParams)
9346 {
9347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009348 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009349 VOS_ASSERT(0);
9350 vos_mem_free(wdiNvDownloadReqParam);
9351 return VOS_STATUS_E_NOMEM;
9352 }
9353
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009355 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9356 pWdaParams->wdaMsgParam = NULL;
9357 pWdaParams->pWdaContext = pWDA;
9358
9359
Jeff Johnson295189b2012-06-20 16:38:30 -07009360 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009361
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009363 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9364
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 if(IS_WDI_STATUS_FAILURE(status))
9366 {
9367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9368 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9370 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009373}
9374/*
9375 * FUNCTION: WDA_FlushAcReqCallback
9376 * send Flush AC RSP back to TL
9377 */
9378void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9379{
9380 vos_msg_t wdaMsg = {0} ;
9381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9382 tFlushACReq *pFlushACReqParams;
9383 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009385 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 if(NULL == pWdaParams)
9387 {
9388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009389 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 VOS_ASSERT(0) ;
9391 return ;
9392 }
9393
9394 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9395 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9396 if(NULL == pFlushACRspParams)
9397 {
9398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009399 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009401 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 return ;
9403 }
9404 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9405 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9406 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9407 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9408 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009409 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 vos_mem_free(pWdaParams->wdaMsgParam) ;
9411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9412 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9414 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9415 // POST message to TL
9416 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9417
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 return ;
9419}
Jeff Johnson295189b2012-06-20 16:38:30 -07009420/*
9421 * FUNCTION: WDA_ProcessFlushAcReq
9422 * Request to WDI to Update the DELBA REQ params.
9423 */
9424VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9425 tFlushACReq *pFlushAcReqParams)
9426{
9427 WDI_Status status = WDI_STATUS_SUCCESS ;
9428 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9429 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9430 sizeof(WDI_FlushAcReqParamsType)) ;
9431 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 if(NULL == wdiFlushAcReqParam)
9433 {
9434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 VOS_ASSERT(0);
9437 return VOS_STATUS_E_NOMEM;
9438 }
9439 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9440 if(NULL == pWdaParams)
9441 {
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_ASSERT(0);
9445 vos_mem_free(wdiFlushAcReqParam);
9446 return VOS_STATUS_E_NOMEM;
9447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009449 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009450 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9451 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9452 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9453 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 /* Store Flush AC pointer, as this will be used for response */
9455 /* store Params pass it to WDI */
9456 pWdaParams->pWdaContext = pWDA;
9457 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9458 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9460 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 if(IS_WDI_STATUS_FAILURE(status))
9462 {
9463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9464 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9465 vos_mem_free(pWdaParams->wdaMsgParam) ;
9466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9467 vos_mem_free(pWdaParams) ;
9468 //TODO: respond to TL with failure
9469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009471}
Jeff Johnson295189b2012-06-20 16:38:30 -07009472/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009473 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 *
9475 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009476void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009477{
9478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9479 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009480 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009481
9482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009483 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 if(NULL == pWdaParams)
9485 {
9486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009487 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 VOS_ASSERT(0) ;
9489 return ;
9490 }
9491 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9492 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9493 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9494 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9495 {
9496 pWDA->wdaAmpSessionOn = VOS_FALSE;
9497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 vos_mem_free(pWdaParams->wdaMsgParam) ;
9499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9500 vos_mem_free(pWdaParams) ;
9501 /*
9502 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9503 * param here
9504 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 return ;
9506}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009507/*
9508 * FUNCTION: WDA_BtAmpEventReqCallback
9509 * Free memory.
9510 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9511 */
9512void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9513{
9514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9515 tWDA_CbContext *pWDA;
9516 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009517
Yue Ma7f44bbe2013-04-12 11:47:39 -07009518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9520
9521 if(NULL == pWdaParams)
9522 {
9523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9524 "%s: pWdaParams received NULL", __func__);
9525 VOS_ASSERT(0);
9526 return;
9527 }
9528
9529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9530 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9531
9532 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9533 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9534 {
9535 pWDA->wdaAmpSessionOn = VOS_FALSE;
9536 }
9537
9538 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9539 {
9540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9541 vos_mem_free(pWdaParams->wdaMsgParam);
9542 vos_mem_free(pWdaParams);
9543 }
9544
9545 return;
9546}
Jeff Johnson295189b2012-06-20 16:38:30 -07009547/*
9548 * FUNCTION: WDA_ProcessBtAmpEventReq
9549 * Request to WDI to Update with BT AMP events.
9550 */
9551VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9552 tSmeBtAmpEvent *pBtAmpEventParams)
9553{
9554 WDI_Status status = WDI_STATUS_SUCCESS ;
9555 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9556 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9557 sizeof(WDI_BtAmpEventParamsType)) ;
9558 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 if(NULL == wdiBtAmpEventParam)
9562 {
9563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 VOS_ASSERT(0);
9566 return VOS_STATUS_E_NOMEM;
9567 }
9568 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9569 if(NULL == pWdaParams)
9570 {
9571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 VOS_ASSERT(0);
9574 vos_mem_free(wdiBtAmpEventParam);
9575 return VOS_STATUS_E_NOMEM;
9576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9578 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9580 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 /* Store BT AMP event pointer, as this will be used for response */
9582 /* store Params pass it to WDI */
9583 pWdaParams->pWdaContext = pWDA;
9584 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9585 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009587 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 if(IS_WDI_STATUS_FAILURE(status))
9589 {
9590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9591 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9592 vos_mem_free(pWdaParams->wdaMsgParam) ;
9593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9594 vos_mem_free(pWdaParams) ;
9595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009596 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9597 {
9598 pWDA->wdaAmpSessionOn = VOS_TRUE;
9599 }
9600 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009601}
9602
Jeff Johnson295189b2012-06-20 16:38:30 -07009603/*
9604 * FUNCTION: WDA_FTMCommandReqCallback
9605 * Handle FTM CMD response came from HAL
9606 * Route responce to HDD FTM
9607 */
9608void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9609 void *usrData)
9610{
9611 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9613 {
9614 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309615 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 return;
9617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 /* Release Current FTM Command Request */
9619 vos_mem_free(pWDA->wdaFTMCmdReq);
9620 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 /* Post FTM Responce to HDD FTM */
9622 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 return;
9624}
Jeff Johnson295189b2012-06-20 16:38:30 -07009625/*
9626 * FUNCTION: WDA_ProcessFTMCommand
9627 * Send FTM command to WDI
9628 */
9629VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9630 tPttMsgbuffer *pPTTFtmCmd)
9631{
9632 WDI_Status status = WDI_STATUS_SUCCESS;
9633 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 ftmCMDReq = (WDI_FTMCommandReqType *)
9635 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9636 if(NULL == ftmCMDReq)
9637 {
9638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9639 "WDA FTM Command buffer alloc fail");
9640 return VOS_STATUS_E_NOMEM;
9641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9643 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 /* Send command to WDI */
9646 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009647 return status;
9648}
Jeff Johnsone7245742012-09-05 17:12:55 -07009649#ifdef FEATURE_OEM_DATA_SUPPORT
9650/*
9651 * FUNCTION: WDA_StartOemDataReqCallback
9652 *
9653 */
9654void WDA_StartOemDataReqCallback(
9655 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9656 void* pUserData)
9657{
9658 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9660 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009661 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009662
Jeff Johnsone7245742012-09-05 17:12:55 -07009663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009664 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009665
9666 if(NULL == pWdaParams)
9667 {
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009669 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009670 VOS_ASSERT(0) ;
9671 return ;
9672 }
9673 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9674
Jeff Johnsone7245742012-09-05 17:12:55 -07009675 if(NULL == pWDA)
9676 {
9677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009678 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009679 VOS_ASSERT(0);
9680 return ;
9681 }
9682
9683 /*
9684 * Allocate memory for response params sent to PE
9685 */
9686 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9687
9688 // Check if memory is allocated for OemdataMeasRsp Params.
9689 if(NULL == pOemDataRspParams)
9690 {
9691 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9692 "OEM DATA WDA callback alloc fail");
9693 VOS_ASSERT(0) ;
9694 return;
9695 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009696
Jeff Johnsone7245742012-09-05 17:12:55 -07009697 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9699 vos_mem_free(pWdaParams->wdaMsgParam);
9700 vos_mem_free(pWdaParams) ;
9701
Jeff Johnsone7245742012-09-05 17:12:55 -07009702 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009703 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009704 * Also, here success always means that we have atleast one BSSID.
9705 */
9706 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9707
9708 //enable Tx
9709 status = WDA_ResumeDataTx(pWDA);
9710 if(status != VOS_STATUS_SUCCESS)
9711 {
9712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9713 }
9714 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9715 return ;
9716}
9717/*
9718 * FUNCTION: WDA_ProcessStartOemDataReq
9719 * Send Start Oem Data Req to WDI
9720 */
9721VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9722 tStartOemDataReq *pOemDataReqParams)
9723{
9724 WDI_Status status = WDI_STATUS_SUCCESS;
9725 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009726 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009727
9728 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9729
9730 if(NULL == wdiOemDataReqParams)
9731 {
9732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009734 VOS_ASSERT(0);
9735 return VOS_STATUS_E_NOMEM;
9736 }
9737
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009738 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9739 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9740 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9741 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009742
9743 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9744
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9746 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009747 {
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009750 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009751 vos_mem_free(pOemDataReqParams);
9752 VOS_ASSERT(0);
9753 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009754 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009755
Bernald44a1ae2013-01-09 08:30:39 -08009756 pWdaParams->pWdaContext = (void*)pWDA;
9757 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9758 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009759
9760 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9761 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009762
9763 if(IS_WDI_STATUS_FAILURE(status))
9764 {
9765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9766 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9768 vos_mem_free(pWdaParams->wdaMsgParam);
9769 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009770 }
9771 return CONVERT_WDI2VOS_STATUS(status) ;
9772}
9773#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009774/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009775 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 *
9777 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009778void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009779{
9780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009782 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009783 if(NULL == pWdaParams)
9784 {
9785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009786 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009787 VOS_ASSERT(0) ;
9788 return ;
9789 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009790
9791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9792 vos_mem_free(pWdaParams->wdaMsgParam);
9793 vos_mem_free(pWdaParams);
9794
9795 return ;
9796}
9797/*
9798 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9799 * Free memory.
9800 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9801 */
9802void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9803{
9804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9805
9806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9807 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9808
9809 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9812 "%s: pWdaParams received NULL", __func__);
9813 VOS_ASSERT(0);
9814 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009815 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009816
9817 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 {
9819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009820 vos_mem_free(pWdaParams->wdaMsgParam);
9821 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009822 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009823
9824 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009825}
Jeff Johnson295189b2012-06-20 16:38:30 -07009826#ifdef WLAN_FEATURE_GTK_OFFLOAD
9827/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009828 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009829 *
9830 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009831void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009832 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009833{
9834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9835
9836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009837 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009838
9839 VOS_ASSERT(NULL != pWdaParams);
9840
9841 vos_mem_free(pWdaParams->wdaMsgParam) ;
9842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9843 vos_mem_free(pWdaParams) ;
9844
9845 //print a msg, nothing else to do
9846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009847 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009848
9849 return ;
9850}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009851/*
9852 * FUNCTION: WDA_GTKOffloadReqCallback
9853 * Free memory.
9854 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9855 */
9856void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9857{
9858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009859
Yue Ma7f44bbe2013-04-12 11:47:39 -07009860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9862
9863 if(NULL == pWdaParams)
9864 {
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9866 "%s: pWdaParams received NULL", __func__);
9867 VOS_ASSERT(0);
9868 return;
9869 }
9870
9871 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9872 {
9873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9874 vos_mem_free(pWdaParams->wdaMsgParam);
9875 vos_mem_free(pWdaParams);
9876 }
9877
9878 return;
9879}
Jeff Johnson295189b2012-06-20 16:38:30 -07009880/*
9881 * FUNCTION: WDA_ProcessGTKOffloadReq
9882 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9883 * to broadcast traffic (sta mode).
9884 */
9885VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9886 tpSirGtkOffloadParams pGtkOffloadParams)
9887{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309888 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9890 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9891 sizeof(WDI_GtkOffloadReqMsg)) ;
9892 tWDA_ReqParams *pWdaParams ;
9893
9894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009896
9897 if(NULL == wdiGtkOffloadReqMsg)
9898 {
9899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 VOS_ASSERT(0);
9902 return VOS_STATUS_E_NOMEM;
9903 }
9904
9905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9906 if(NULL == pWdaParams)
9907 {
9908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 VOS_ASSERT(0);
9911 vos_mem_free(wdiGtkOffloadReqMsg);
9912 return VOS_STATUS_E_NOMEM;
9913 }
9914
9915 //
9916 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9917 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009918
9919 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309920 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009921
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9923 // Copy KCK
9924 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9925 // Copy KEK
9926 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9927 // Copy KeyReplayCounter
9928 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9929 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9930
Yue Ma7f44bbe2013-04-12 11:47:39 -07009931 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9932 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009933
Jeff Johnson295189b2012-06-20 16:38:30 -07009934
9935 /* Store Params pass it to WDI */
9936 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9937 pWdaParams->pWdaContext = pWDA;
9938 /* Store param pointer as passed in by caller */
9939 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9940
Yue Ma7f44bbe2013-04-12 11:47:39 -07009941 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009942
9943 if(IS_WDI_STATUS_FAILURE(status))
9944 {
9945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9946 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9948 vos_mem_free(pWdaParams->wdaMsgParam);
9949 vos_mem_free(pWdaParams);
9950 }
9951
9952 return CONVERT_WDI2VOS_STATUS(status) ;
9953}
9954
9955/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009956 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 *
9958 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009959void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009960 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009961{
9962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9963 tWDA_CbContext *pWDA;
9964 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -07009965 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 vos_msg_t vosMsg;
9967
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009969 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009970
9971 VOS_ASSERT(NULL != pWdaParams);
9972
9973 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9974 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9975
9976 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9977 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9978
9979 /* Message Header */
9980 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9981 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9982
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009983 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9984 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9985 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9986 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9987 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009988
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309989 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9990 pwdiGtkOffloadGetInfoRsparams->bssId,
9991 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 /* VOS message wrapper */
9993 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9994 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9995 vosMsg.bodyval = 0;
9996
9997 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9998 {
9999 /* free the mem and return */
10000 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10001 }
10002
10003 vos_mem_free(pWdaParams->wdaMsgParam) ;
10004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10005 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010006
10007 return;
10008}
10009/*
10010 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10011 * Free memory and send RSP back to SME.
10012 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10013 */
10014void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10015{
10016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10017 vos_msg_t vosMsg;
10018
10019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10020 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10021
10022 if(NULL == pWdaParams)
10023 {
10024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10025 "%s: pWdaParams received NULL", __func__);
10026 VOS_ASSERT(0);
10027 return;
10028 }
10029
10030 /* VOS message wrapper */
10031 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10032 vosMsg.bodyptr = NULL;
10033 vosMsg.bodyval = 0;
10034
10035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10036 {
10037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10038 vos_mem_free(pWdaParams->wdaMsgParam);
10039 vos_mem_free(pWdaParams);
10040 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10041 }
10042
10043 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010044}
10045#endif
10046
10047/*
10048 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10049 * Request to WDI to set Tx Per Tracking configurations
10050 */
10051VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10052{
10053 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010054 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10056 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10057 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10058 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 if(NULL == pwdiSetTxPerTrackingReqParams)
10062 {
10063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 vos_mem_free(pTxPerTrackingParams);
10066 VOS_ASSERT(0);
10067 return VOS_STATUS_E_NOMEM;
10068 }
10069 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10070 if(NULL == pWdaParams)
10071 {
10072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10075 vos_mem_free(pTxPerTrackingParams);
10076 VOS_ASSERT(0);
10077 return VOS_STATUS_E_NOMEM;
10078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10080 pTxPerTrackingParams->ucTxPerTrackingEnable;
10081 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10082 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10083 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10084 pTxPerTrackingParams->ucTxPerTrackingRatio;
10085 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10086 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010087 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10088 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 /* Store param pointer as passed in by caller */
10090 /* store Params pass it to WDI
10091 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10092 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10093 pWdaParams->pWdaContext = pWDA;
10094 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010095 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010096 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010097 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 {
10099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10100 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010101 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 vos_mem_free(pWdaParams->wdaMsgParam) ;
10103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10104 vos_mem_free(pWdaParams) ;
10105 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010106 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010107
10108}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010109/*
10110 * FUNCTION: WDA_HALDumpCmdCallback
10111 * Send the VOS complete .
10112 */
10113void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10114 void* pUserData)
10115{
10116 tANI_U8 *buffer = NULL;
10117 tWDA_CbContext *pWDA = NULL;
10118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 if(NULL == pWdaParams)
10120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 VOS_ASSERT(0) ;
10124 return ;
10125 }
10126
10127 pWDA = pWdaParams->pWdaContext;
10128 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010129 if(wdiRspParams->usBufferLen > 0)
10130 {
10131 /*Copy the Resp data to UMAC supplied buffer*/
10132 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10135 vos_mem_free(pWdaParams);
10136
10137 /* Indicate VOSS about the start complete */
10138 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 return ;
10140}
10141
Jeff Johnson295189b2012-06-20 16:38:30 -070010142/*
10143 * FUNCTION: WDA_ProcessHALDumpCmdReq
10144 * Send Dump command to WDI
10145 */
10146VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10147 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10148 tANI_U32 arg4, tANI_U8 *pBuffer)
10149{
10150 WDI_Status status = WDI_STATUS_SUCCESS;
10151 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10152 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10153 tWDA_ReqParams *pWdaParams ;
10154 pVosContextType pVosContext = NULL;
10155 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10157 (void *)pMac);
10158
10159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10160 if(NULL == pWdaParams)
10161 {
10162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 return VOS_STATUS_E_NOMEM;
10165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 /* Allocate memory WDI request structure*/
10167 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10168 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10169 if(NULL == wdiHALDumpCmdReqParam)
10170 {
10171 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10172 "WDA HAL DUMP Command buffer alloc fail");
10173 vos_mem_free(pWdaParams);
10174 return WDI_STATUS_E_FAILURE;
10175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010177 /* Extract the arguments */
10178 wdiHalDumpCmdInfo->command = cmd;
10179 wdiHalDumpCmdInfo->argument1 = arg1;
10180 wdiHalDumpCmdInfo->argument2 = arg2;
10181 wdiHalDumpCmdInfo->argument3 = arg3;
10182 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10185
10186 /* Response message will be passed through the buffer */
10187 pWdaParams->wdaMsgParam = (void *)pBuffer;
10188
10189 /* store Params pass it to WDI */
10190 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 /* Send command to WDI */
10192 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010193 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 if ( vStatus != VOS_STATUS_SUCCESS )
10195 {
10196 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010199 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 }
10201 else
10202 {
10203 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010204 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 }
10206 VOS_ASSERT(0);
10207 }
10208 return status;
10209}
Jeff Johnson295189b2012-06-20 16:38:30 -070010210#ifdef WLAN_FEATURE_GTK_OFFLOAD
10211/*
10212 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10213 * Request to WDI to get GTK Offload Information
10214 */
10215VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10216 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10217{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010218 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10220 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10221 tWDA_ReqParams *pWdaParams ;
10222
10223 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10224 {
10225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 VOS_ASSERT(0);
10228 return VOS_STATUS_E_NOMEM;
10229 }
10230
10231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10232 if(NULL == pWdaParams)
10233 {
10234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 VOS_ASSERT(0);
10237 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10238 return VOS_STATUS_E_NOMEM;
10239 }
10240
Yue Ma7f44bbe2013-04-12 11:47:39 -070010241 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10242 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010243
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 /* Store Params pass it to WDI */
10245 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10246 pWdaParams->pWdaContext = pWDA;
10247 /* Store param pointer as passed in by caller */
10248 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10249
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010250 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010251 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010252
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254
10255 if(IS_WDI_STATUS_FAILURE(status))
10256 {
10257 /* failure returned by WDI API */
10258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10259 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10261 vos_mem_free(pWdaParams) ;
10262 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10263 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10264 }
10265
10266 return CONVERT_WDI2VOS_STATUS(status) ;
10267}
10268#endif // WLAN_FEATURE_GTK_OFFLOAD
10269
10270/*
10271 * -------------------------------------------------------------------------
10272 * DATA interface with WDI for Mgmt Frames
10273 * -------------------------------------------------------------------------
10274 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010275/*
10276 * FUNCTION: WDA_TxComplete
10277 * Callback function for the WDA_TxPacket
10278 */
10279VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10280 VOS_STATUS status )
10281{
10282
10283 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10284 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010285 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286
10287 if(NULL == wdaContext)
10288 {
10289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10290 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010291 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 VOS_ASSERT(0);
10293 return VOS_STATUS_E_FAILURE;
10294 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010295
10296 /*Check if frame was timed out or not*/
10297 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10298 (v_PVOID_t)&uUserData);
10299
10300 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10301 {
10302 /*Discard frame - no further processing is needed*/
10303 vos_pkt_return_packet(pData);
10304 return VOS_STATUS_SUCCESS;
10305 }
10306
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10308 if( NULL!=wdaContext->pTxCbFunc)
10309 {
10310 /*check if packet is freed already*/
10311 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10312 {
10313 wdaContext->pTxCbFunc(pMac, pData);
10314 }
10315 else
10316 {
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010318 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010319 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010320 //Return from here since we reaching here because the packet already timeout
10321 return status;
10322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 }
10324
10325 /*
10326 * Trigger the event to bring the HAL TL Tx complete function to come
10327 * out of wait
10328 * Let the coe above to complete the packet first. When this event is set,
10329 * the thread waiting for the event may run and set Vospacket_freed causing the original
10330 * packet not being freed.
10331 */
10332 status = vos_event_set(&wdaContext->txFrameEvent);
10333 if(!VOS_IS_STATUS_SUCCESS(status))
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10336 "NEW VOS Event Set failed - status = %d \n", status);
10337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 return status;
10339}
Jeff Johnson295189b2012-06-20 16:38:30 -070010340/*
10341 * FUNCTION: WDA_TxPacket
10342 * Forward TX management frame to WDI
10343 */
10344VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10345 void *pFrmBuf,
10346 tANI_U16 frmLen,
10347 eFrameType frmType,
10348 eFrameTxDir txDir,
10349 tANI_U8 tid,
10350 pWDATxRxCompFunc pCompFunc,
10351 void *pData,
10352 pWDAAckFnTxComp pAckTxComp,
10353 tANI_U8 txFlag)
10354{
10355 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10356 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10357 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10358 tANI_U8 eventIdx = 0;
10359 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10360 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 if((NULL == pWDA)||(NULL == pFrmBuf))
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010364 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 VOS_ASSERT(0);
10367 return VOS_STATUS_E_FAILURE;
10368 }
10369
10370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010371 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10373 if(NULL == pMac)
10374 {
10375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010376 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 VOS_ASSERT(0);
10378 return VOS_STATUS_E_FAILURE;
10379 }
10380
10381
10382
10383 /* store the call back function in WDA context */
10384 pWDA->pTxCbFunc = pCompFunc;
10385 /* store the call back for the function of ackTxComplete */
10386 if( pAckTxComp )
10387 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010388 if( NULL != pWDA->pAckTxCbFunc )
10389 {
10390 /* Already TxComp is active no need to active again */
10391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10392 "There is already one request pending for tx complete\n");
10393 pWDA->pAckTxCbFunc( pMac, 0);
10394 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010395
Jeff Johnsone7245742012-09-05 17:12:55 -070010396 if( VOS_STATUS_SUCCESS !=
10397 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10398 {
10399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10400 "Tx Complete timeout Timer Stop Failed ");
10401 }
10402 else
10403 {
10404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010405 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010406 }
10407 }
10408
10409 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10410 pWDA->pAckTxCbFunc = pAckTxComp;
10411 if( VOS_STATUS_SUCCESS !=
10412 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10413 {
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10415 "Tx Complete Timer Start Failed ");
10416 pWDA->pAckTxCbFunc = NULL;
10417 return eHAL_STATUS_FAILURE;
10418 }
10419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 /* Reset the event to be not signalled */
10421 status = vos_event_reset(&pWDA->txFrameEvent);
10422 if(!VOS_IS_STATUS_SUCCESS(status))
10423 {
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10425 "VOS Event reset failed - status = %d\n",status);
10426 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10427 if( pAckTxComp )
10428 {
10429 pWDA->pAckTxCbFunc = NULL;
10430 if( VOS_STATUS_SUCCESS !=
10431 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10432 {
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10434 "Tx Complete timeout Timer Stop Failed ");
10435 }
10436 }
10437 return VOS_STATUS_E_FAILURE;
10438 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010439
10440 /* If Peer Sta mask is set don't overwrite to self sta */
10441 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010443 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010445 else
10446 {
Ganesh K08bce952012-12-13 15:04:41 -080010447 /* Get system role, use the self station if in unknown role or STA role */
10448 systemRole = wdaGetGlobalSystemRole(pMac);
10449 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10450 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010451#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010452 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010453#endif
Ganesh K08bce952012-12-13 15:04:41 -080010454 ))
10455 {
10456 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10457 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010458 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010459
Jeff Johnsone7245742012-09-05 17:12:55 -070010460 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10461 disassoc frame reaches the HW, HAL has already deleted the peer station */
10462 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010464 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010465 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 /*Send Probe request frames on self sta idx*/
10468 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 /* Since we donot want probe responses to be retried, send probe responses
10471 through the NO_ACK queues */
10472 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10473 {
10474 //probe response is sent out using self station and no retries options.
10475 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10476 }
10477 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10478 {
10479 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10480 }
10481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10483
10484 /*Set frame tag to 0
10485 We will use the WDA user data in order to tag a frame as expired*/
10486 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10487 (v_PVOID_t)0);
10488
10489
10490 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10491 frmLen, ucTypeSubType, tid,
10492 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10493 {
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10495 "Sending Mgmt Frame failed - status = %d\n", status);
10496 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10497 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10498 if( pAckTxComp )
10499 {
10500 pWDA->pAckTxCbFunc = NULL;
10501 if( VOS_STATUS_SUCCESS !=
10502 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10503 {
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10505 "Tx Complete timeout Timer Stop Failed ");
10506 }
10507 }
10508 return VOS_STATUS_E_FAILURE;
10509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 /*
10511 * Wait for the event to be set by the TL, to get the response of TX
10512 * complete, this event should be set by the Callback function called by TL
10513 */
10514 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10515 &eventIdx);
10516 if(!VOS_IS_STATUS_SUCCESS(status))
10517 {
10518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10519 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010520 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10522 after the packet gets completed(packet freed once)*/
10523
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010524 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010525 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010526
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010527 /*Tag Frame as timed out for later deletion*/
10528 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10529 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10530
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 /* check whether the packet was freed already,so need not free again when
10532 * TL calls the WDA_Txcomplete routine
10533 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010534 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10535 /*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 -070010536 {
10537 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010538 } */
10539
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 if( pAckTxComp )
10541 {
10542 pWDA->pAckTxCbFunc = NULL;
10543 if( VOS_STATUS_SUCCESS !=
10544 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10547 "Tx Complete timeout Timer Stop Failed ");
10548 }
10549 }
10550 status = VOS_STATUS_E_FAILURE;
10551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 return status;
10553}
Jeff Johnson295189b2012-06-20 16:38:30 -070010554/*
10555 * FUNCTION: WDA_McProcessMsg
10556 * Trigger DAL-AL to start CFG download
10557 */
10558VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10559{
10560 VOS_STATUS status = VOS_STATUS_SUCCESS;
10561 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010562 if(NULL == pMsg)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010565 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 VOS_ASSERT(0);
10567 return VOS_STATUS_E_FAILURE;
10568 }
10569
10570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010571 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010572
10573 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10574 if(NULL == pWDA )
10575 {
10576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010577 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010578 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010579 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 return VOS_STATUS_E_FAILURE;
10581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 /* Process all the WDA messages.. */
10583 switch( pMsg->type )
10584 {
10585 case WNI_CFG_DNLD_REQ:
10586 {
10587 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 /* call WDA complete event if config download success */
10589 if( VOS_IS_STATUS_SUCCESS(status) )
10590 {
10591 vos_WDAComplete_cback(pVosContext);
10592 }
10593 else
10594 {
10595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10596 "WDA Config Download failure" );
10597 }
10598 break ;
10599 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 /*
10601 * Init SCAN request from PE, convert it into DAL format
10602 * and send it to DAL
10603 */
10604 case WDA_INIT_SCAN_REQ:
10605 {
10606 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10607 break ;
10608 }
10609 /* start SCAN request from PE */
10610 case WDA_START_SCAN_REQ:
10611 {
10612 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10613 break ;
10614 }
10615 /* end SCAN request from PE */
10616 case WDA_END_SCAN_REQ:
10617 {
10618 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10619 break ;
10620 }
10621 /* end SCAN request from PE */
10622 case WDA_FINISH_SCAN_REQ:
10623 {
10624 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10625 break ;
10626 }
10627 /* join request from PE */
10628 case WDA_CHNL_SWITCH_REQ:
10629 {
10630 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10631 {
10632 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10633 }
10634 else
10635 {
10636 WDA_ProcessChannelSwitchReq(pWDA,
10637 (tSwitchChannelParams*)pMsg->bodyptr) ;
10638 }
10639 break ;
10640 }
10641 /* ADD BSS request from PE */
10642 case WDA_ADD_BSS_REQ:
10643 {
10644 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10645 break ;
10646 }
10647 case WDA_ADD_STA_REQ:
10648 {
10649 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10650 break ;
10651 }
10652 case WDA_DELETE_BSS_REQ:
10653 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10655 break ;
10656 }
10657 case WDA_DELETE_STA_REQ:
10658 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10660 break ;
10661 }
10662 case WDA_CONFIG_PARAM_UPDATE_REQ:
10663 {
10664 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10665 break ;
10666 }
10667 case WDA_SET_BSSKEY_REQ:
10668 {
10669 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10670 break ;
10671 }
10672 case WDA_SET_STAKEY_REQ:
10673 {
10674 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10675 break ;
10676 }
10677 case WDA_SET_STA_BCASTKEY_REQ:
10678 {
10679 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10680 break ;
10681 }
10682 case WDA_REMOVE_BSSKEY_REQ:
10683 {
10684 WDA_ProcessRemoveBssKeyReq(pWDA,
10685 (tRemoveBssKeyParams *)pMsg->bodyptr);
10686 break ;
10687 }
10688 case WDA_REMOVE_STAKEY_REQ:
10689 {
10690 WDA_ProcessRemoveStaKeyReq(pWDA,
10691 (tRemoveStaKeyParams *)pMsg->bodyptr);
10692 break ;
10693 }
10694 case WDA_REMOVE_STA_BCASTKEY_REQ:
10695 {
10696 /* TODO: currently UMAC is not sending this request, Add the code for
10697 handling this request when UMAC supports */
10698 break;
10699 }
10700#ifdef FEATURE_WLAN_CCX
10701 case WDA_TSM_STATS_REQ:
10702 {
10703 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10704 break;
10705 }
10706#endif
10707 case WDA_UPDATE_EDCA_PROFILE_IND:
10708 {
10709 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10710 break;
10711 }
10712 case WDA_ADD_TS_REQ:
10713 {
10714 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10715 break;
10716 }
10717 case WDA_DEL_TS_REQ:
10718 {
10719 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10720 break;
10721 }
10722 case WDA_ADDBA_REQ:
10723 {
10724 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10725 break;
10726 }
10727 case WDA_DELBA_IND:
10728 {
10729 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10730 break;
10731 }
10732 case WDA_SET_LINK_STATE:
10733 {
10734 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10735 break;
10736 }
10737 case WDA_GET_STATISTICS_REQ:
10738 {
10739 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10740 break;
10741 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010742#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10743 case WDA_GET_ROAM_RSSI_REQ:
10744 {
10745 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10746 break;
10747 }
10748#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 case WDA_PWR_SAVE_CFG:
10750 {
10751 if(pWDA->wdaState == WDA_READY_STATE)
10752 {
10753 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10754 }
10755 else
10756 {
10757 if(NULL != pMsg->bodyptr)
10758 {
10759 vos_mem_free(pMsg->bodyptr);
10760 }
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10762 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10763 }
10764 break;
10765 }
10766 case WDA_ENTER_IMPS_REQ:
10767 {
10768 if(pWDA->wdaState == WDA_READY_STATE)
10769 {
10770 WDA_ProcessEnterImpsReq(pWDA);
10771 }
10772 else
10773 {
10774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10775 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10776 }
10777 break;
10778 }
10779 case WDA_EXIT_IMPS_REQ:
10780 {
10781 if(pWDA->wdaState == WDA_READY_STATE)
10782 {
10783 WDA_ProcessExitImpsReq(pWDA);
10784 }
10785 else
10786 {
10787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10788 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10789 }
10790 break;
10791 }
10792 case WDA_ENTER_BMPS_REQ:
10793 {
10794 if(pWDA->wdaState == WDA_READY_STATE)
10795 {
10796 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10797 }
10798 else
10799 {
10800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10801 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10802 }
10803 break;
10804 }
10805 case WDA_EXIT_BMPS_REQ:
10806 {
10807 if(pWDA->wdaState == WDA_READY_STATE)
10808 {
10809 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10810 }
10811 else
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10814 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10815 }
10816 break;
10817 }
10818 case WDA_ENTER_UAPSD_REQ:
10819 {
10820 if(pWDA->wdaState == WDA_READY_STATE)
10821 {
10822 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10823 }
10824 else
10825 {
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10827 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10828 }
10829 break;
10830 }
10831 case WDA_EXIT_UAPSD_REQ:
10832 {
10833 if(pWDA->wdaState == WDA_READY_STATE)
10834 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010835 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 }
10837 else
10838 {
10839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10840 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10841 }
10842 break;
10843 }
10844 case WDA_UPDATE_UAPSD_IND:
10845 {
10846 if(pWDA->wdaState == WDA_READY_STATE)
10847 {
10848 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10849 }
10850 else
10851 {
10852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10853 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10854 }
10855 break;
10856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010857 case WDA_REGISTER_PE_CALLBACK :
10858 {
10859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10860 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10861 /*TODO: store the PE callback */
10862 /* Do Nothing? MSG Body should be freed at here */
10863 if(NULL != pMsg->bodyptr)
10864 {
10865 vos_mem_free(pMsg->bodyptr);
10866 }
10867 break;
10868 }
10869 case WDA_SYS_READY_IND :
10870 {
10871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10872 "Handling msg type WDA_SYS_READY_IND " );
10873 pWDA->wdaState = WDA_READY_STATE;
10874 if(NULL != pMsg->bodyptr)
10875 {
10876 vos_mem_free(pMsg->bodyptr);
10877 }
10878 break;
10879 }
10880 case WDA_BEACON_FILTER_IND :
10881 {
10882 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10883 break;
10884 }
10885 case WDA_BTC_SET_CFG:
10886 {
10887 /*TODO: handle this while dealing with BTC */
10888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10889 "Handling msg type WDA_BTC_SET_CFG " );
10890 /* Do Nothing? MSG Body should be freed at here */
10891 if(NULL != pMsg->bodyptr)
10892 {
10893 vos_mem_free(pMsg->bodyptr);
10894 }
10895 break;
10896 }
10897 case WDA_SIGNAL_BT_EVENT:
10898 {
10899 /*TODO: handle this while dealing with BTC */
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10901 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10902 /* Do Nothing? MSG Body should be freed at here */
10903 if(NULL != pMsg->bodyptr)
10904 {
10905 vos_mem_free(pMsg->bodyptr);
10906 }
10907 break;
10908 }
10909 case WDA_CFG_RXP_FILTER_REQ:
10910 {
10911 WDA_ProcessConfigureRxpFilterReq(pWDA,
10912 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10913 break;
10914 }
10915 case WDA_SET_HOST_OFFLOAD:
10916 {
10917 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10918 break;
10919 }
10920 case WDA_SET_KEEP_ALIVE:
10921 {
10922 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10923 break;
10924 }
10925#ifdef WLAN_NS_OFFLOAD
10926 case WDA_SET_NS_OFFLOAD:
10927 {
10928 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10929 break;
10930 }
10931#endif //WLAN_NS_OFFLOAD
10932 case WDA_ADD_STA_SELF_REQ:
10933 {
10934 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10935 break;
10936 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 case WDA_DEL_STA_SELF_REQ:
10938 {
10939 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10940 break;
10941 }
10942 case WDA_WOWL_ADD_BCAST_PTRN:
10943 {
10944 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10945 break;
10946 }
10947 case WDA_WOWL_DEL_BCAST_PTRN:
10948 {
10949 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10950 break;
10951 }
10952 case WDA_WOWL_ENTER_REQ:
10953 {
10954 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10955 break;
10956 }
10957 case WDA_WOWL_EXIT_REQ:
10958 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010959 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010960 break;
10961 }
10962 case WDA_TL_FLUSH_AC_REQ:
10963 {
10964 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10965 break;
10966 }
10967 case WDA_SIGNAL_BTAMP_EVENT:
10968 {
10969 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10970 break;
10971 }
10972#ifdef WDA_UT
10973 case WDA_WDI_EVENT_MSG:
10974 {
10975 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10976 break ;
10977 }
10978#endif
10979 case WDA_UPDATE_BEACON_IND:
10980 {
10981 WDA_ProcessUpdateBeaconParams(pWDA,
10982 (tUpdateBeaconParams *)pMsg->bodyptr);
10983 break;
10984 }
10985 case WDA_SEND_BEACON_REQ:
10986 {
10987 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10988 break;
10989 }
10990 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10991 {
10992 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10993 (tSendProbeRespParams *)pMsg->bodyptr);
10994 break;
10995 }
10996#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10997 case WDA_SET_MAX_TX_POWER_REQ:
10998 {
10999 WDA_ProcessSetMaxTxPowerReq(pWDA,
11000 (tMaxTxPowerParams *)pMsg->bodyptr);
11001 break;
11002 }
11003#endif
schang86c22c42013-03-13 18:41:24 -070011004 case WDA_SET_TX_POWER_REQ:
11005 {
11006 WDA_ProcessSetTxPowerReq(pWDA,
11007 (tSirSetTxPowerReq *)pMsg->bodyptr);
11008 break;
11009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 case WDA_SET_P2P_GO_NOA_REQ:
11011 {
11012 WDA_ProcessSetP2PGONOAReq(pWDA,
11013 (tP2pPsParams *)pMsg->bodyptr);
11014 break;
11015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 /* timer related messages */
11017 case WDA_TIMER_BA_ACTIVITY_REQ:
11018 {
11019 WDA_BaCheckActivity(pWDA) ;
11020 break ;
11021 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011022
11023 /* timer related messages */
11024 case WDA_TIMER_TRAFFIC_STATS_IND:
11025 {
11026 WDA_TimerTrafficStatsInd(pWDA);
11027 break;
11028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011029#ifdef WLAN_FEATURE_VOWIFI_11R
11030 case WDA_AGGR_QOS_REQ:
11031 {
11032 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11033 break;
11034 }
11035#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 case WDA_FTM_CMD_REQ:
11037 {
11038 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11039 break ;
11040 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011041#ifdef FEATURE_OEM_DATA_SUPPORT
11042 case WDA_START_OEM_DATA_REQ:
11043 {
11044 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11045 break;
11046 }
11047#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 /* Tx Complete Time out Indication */
11049 case WDA_TX_COMPLETE_TIMEOUT_IND:
11050 {
11051 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11052 break;
11053 }
11054 case WDA_WLAN_SUSPEND_IND:
11055 {
11056 WDA_ProcessWlanSuspendInd(pWDA,
11057 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11058 break;
11059 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 case WDA_WLAN_RESUME_REQ:
11061 {
11062 WDA_ProcessWlanResumeReq(pWDA,
11063 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11064 break;
11065 }
11066
11067 case WDA_UPDATE_CF_IND:
11068 {
11069 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11070 pMsg->bodyptr = NULL;
11071 break;
11072 }
11073#ifdef FEATURE_WLAN_SCAN_PNO
11074 case WDA_SET_PNO_REQ:
11075 {
11076 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11077 break;
11078 }
11079 case WDA_UPDATE_SCAN_PARAMS_REQ:
11080 {
11081 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11082 break;
11083 }
11084 case WDA_SET_RSSI_FILTER_REQ:
11085 {
11086 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11087 break;
11088 }
11089#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011090#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011091 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011092 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011093 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011094 break;
11095 }
11096#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 case WDA_SET_TX_PER_TRACKING_REQ:
11098 {
11099 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11100 break;
11101 }
11102
11103#ifdef WLAN_FEATURE_PACKET_FILTERING
11104 case WDA_8023_MULTICAST_LIST_REQ:
11105 {
11106 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11107 break;
11108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11110 {
11111 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11112 break;
11113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11115 {
11116 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11117 break;
11118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11120 {
11121 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11122 break;
11123 }
11124#endif // WLAN_FEATURE_PACKET_FILTERING
11125
11126
11127 case WDA_TRANSMISSION_CONTROL_IND:
11128 {
11129 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11130 break;
11131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 case WDA_SET_POWER_PARAMS_REQ:
11133 {
11134 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11135 break;
11136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011137#ifdef WLAN_FEATURE_GTK_OFFLOAD
11138 case WDA_GTK_OFFLOAD_REQ:
11139 {
11140 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11141 break;
11142 }
11143
11144 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11145 {
11146 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11147 break;
11148 }
11149#endif //WLAN_FEATURE_GTK_OFFLOAD
11150
11151 case WDA_SET_TM_LEVEL_REQ:
11152 {
11153 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11154 break;
11155 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011156#ifdef WLAN_FEATURE_11AC
11157 case WDA_UPDATE_OP_MODE:
11158 {
11159 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11160 {
11161 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11162 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11163 else
11164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11165 " VHT OpMode Feature is Not Supported \n");
11166 }
11167 else
11168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11169 " 11AC Feature is Not Supported \n");
11170 break;
11171 }
11172#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011173#ifdef WLAN_FEATURE_11W
11174 case WDA_EXCLUDE_UNENCRYPTED_IND:
11175 {
11176 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11177 break;
11178 }
11179#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011180#ifdef FEATURE_WLAN_TDLS
11181 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11182 {
11183 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11184 break;
11185 }
11186#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 default:
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11190 "No Handling for msg type %x in WDA "
11191 ,pMsg->type);
11192 /* Do Nothing? MSG Body should be freed at here */
11193 if(NULL != pMsg->bodyptr)
11194 {
11195 vos_mem_free(pMsg->bodyptr);
11196 }
11197 //WDA_VOS_ASSERT(0) ;
11198 }
11199 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 return status ;
11201}
11202
Jeff Johnson295189b2012-06-20 16:38:30 -070011203/*
11204 * FUNCTION: WDA_LowLevelIndCallback
11205 * IND API callback from WDI, send Ind to PE
11206 */
11207void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11208 void* pUserData )
11209{
11210 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11211#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11212 tSirRSSINotification rssiNotification;
11213#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 if(NULL == pWDA)
11215 {
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011217 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 VOS_ASSERT(0);
11219 return ;
11220 }
11221
11222 switch(wdiLowLevelInd->wdiIndicationType)
11223 {
11224 case WDI_RSSI_NOTIFICATION_IND:
11225 {
11226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11227 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011228#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11229 rssiNotification.bReserved =
11230 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11231 rssiNotification.bRssiThres1NegCross =
11232 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11233 rssiNotification.bRssiThres1PosCross =
11234 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11235 rssiNotification.bRssiThres2NegCross =
11236 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11237 rssiNotification.bRssiThres2PosCross =
11238 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11239 rssiNotification.bRssiThres3NegCross =
11240 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11241 rssiNotification.bRssiThres3PosCross =
11242 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011243 rssiNotification.avgRssi = (v_S7_t)
11244 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 WLANTL_BMPSRSSIRegionChangedNotification(
11246 pWDA->pVosContext,
11247 &rssiNotification);
11248#endif
11249 break ;
11250 }
11251 case WDI_MISSED_BEACON_IND:
11252 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011253 tpSirSmeMissedBeaconInd pMissBeacInd =
11254 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11256 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011258 if(NULL == pMissBeacInd)
11259 {
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11261 "%s: VOS MEM Alloc Failure", __func__);
11262 break;
11263 }
11264 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11265 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11266 pMissBeacInd->bssIdx =
11267 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11268 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011269 break ;
11270 }
11271 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11272 {
11273 /* TODO: Decode Ind and send Ind to PE */
11274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11275 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11276 break ;
11277 }
11278
11279 case WDI_MIC_FAILURE_IND:
11280 {
11281 tpSirSmeMicFailureInd pMicInd =
11282 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11283
11284 if(NULL == pMicInd)
11285 {
11286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 break;
11289 }
11290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11291 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11293 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11294 vos_mem_copy(pMicInd->bssId,
11295 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11296 sizeof(tSirMacAddr));
11297 vos_mem_copy(pMicInd->info.srcMacAddr,
11298 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11299 sizeof(tSirMacAddr));
11300 vos_mem_copy(pMicInd->info.taMacAddr,
11301 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11302 sizeof(tSirMacAddr));
11303 vos_mem_copy(pMicInd->info.dstMacAddr,
11304 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11305 sizeof(tSirMacAddr));
11306 vos_mem_copy(pMicInd->info.rxMacAddr,
11307 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11308 sizeof(tSirMacAddr));
11309 pMicInd->info.multicast =
11310 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11311 pMicInd->info.keyId=
11312 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11313 pMicInd->info.IV1=
11314 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11315 vos_mem_copy(pMicInd->info.TSC,
11316 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11318 (void *)pMicInd , 0) ;
11319 break ;
11320 }
11321 case WDI_FATAL_ERROR_IND:
11322 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011323 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 /* TODO: Decode Ind and send Ind to PE */
11325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11326 "Received WDI_FATAL_ERROR_IND from WDI ");
11327 break ;
11328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 case WDI_DEL_STA_IND:
11330 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 tpDeleteStaContext pDelSTACtx =
11332 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11333
11334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11335 "Received WDI_DEL_STA_IND from WDI ");
11336 if(NULL == pDelSTACtx)
11337 {
11338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 break;
11341 }
11342 vos_mem_copy(pDelSTACtx->addr2,
11343 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11344 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 vos_mem_copy(pDelSTACtx->bssId,
11346 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11347 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 pDelSTACtx->assocId =
11349 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11350 pDelSTACtx->reasonCode =
11351 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11352 pDelSTACtx->staId =
11353 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11355 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 break ;
11357 }
11358 case WDI_COEX_IND:
11359 {
11360 tANI_U32 index;
11361 vos_msg_t vosMsg;
11362 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11363 if(NULL == pSmeCoexInd)
11364 {
11365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011366 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 break;
11368 }
11369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11370 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 /* Message Header */
11372 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11373 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 /* Info from WDI Indication */
11375 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11376 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11377 {
11378 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11379 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 /* VOS message wrapper */
11381 vosMsg.type = eWNI_SME_COEX_IND;
11382 vosMsg.bodyptr = (void *)pSmeCoexInd;
11383 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 /* Send message to SME */
11385 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11386 {
11387 /* free the mem and return */
11388 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11389 }
11390 else
11391 {
11392 /* DEBUG */
11393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11394 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11395 pSmeCoexInd->coexIndType,
11396 pSmeCoexInd->coexIndData[0],
11397 pSmeCoexInd->coexIndData[1],
11398 pSmeCoexInd->coexIndData[2],
11399 pSmeCoexInd->coexIndData[3]);
11400 }
11401 break;
11402 }
11403 case WDI_TX_COMPLETE_IND:
11404 {
11405 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11406 /* Calling TxCompleteAck Indication from wda context*/
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11408 "Complete Indication received from HAL");
11409 if( pWDA->pAckTxCbFunc )
11410 {
11411 if( VOS_STATUS_SUCCESS !=
11412 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11415 "Tx Complete timeout Timer Stop Failed ");
11416 }
11417 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11418 pWDA->pAckTxCbFunc = NULL;
11419 }
11420 else
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11423 "Tx Complete Indication is received after timeout ");
11424 }
11425 break;
11426 }
Viral Modid86bde22012-12-10 13:09:21 -080011427 case WDI_P2P_NOA_START_IND :
11428 {
11429 tSirP2PNoaStart *pP2pNoaStart =
11430 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11431
11432 if (NULL == pP2pNoaStart)
11433 {
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11435 "Memory allocation failure, "
11436 "WDI_P2P_NOA_START_IND not forwarded");
11437 break;
11438 }
11439 pP2pNoaStart->status =
11440 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11441 pP2pNoaStart->bssIdx =
11442 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11443 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11444 (void *)pP2pNoaStart , 0) ;
11445 break;
11446 }
11447
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011448#ifdef FEATURE_WLAN_TDLS
11449 case WDI_TDLS_IND :
11450 {
11451 tSirTdlsInd *pTdlsInd =
11452 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11453
11454 if (NULL == pTdlsInd)
11455 {
11456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11457 "Memory allocation failure, "
11458 "WDI_TDLS_IND not forwarded");
11459 break;
11460 }
11461 pTdlsInd->status =
11462 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11463 pTdlsInd->assocId =
11464 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11465 pTdlsInd->staIdx =
11466 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11467 pTdlsInd->reasonCode =
11468 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11469 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11470 (void *)pTdlsInd , 0) ;
11471 break;
11472 }
11473#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 case WDI_P2P_NOA_ATTR_IND :
11475 {
11476 tSirP2PNoaAttr *pP2pNoaAttr =
11477 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11479 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 if (NULL == pP2pNoaAttr)
11481 {
11482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11483 "Memory allocation failure, "
11484 "WDI_P2P_NOA_ATTR_IND not forwarded");
11485 break;
11486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 pP2pNoaAttr->index =
11488 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11489 pP2pNoaAttr->oppPsFlag =
11490 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11491 pP2pNoaAttr->ctWin =
11492 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11493
11494 pP2pNoaAttr->uNoa1IntervalCnt =
11495 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11496 pP2pNoaAttr->uNoa1Duration =
11497 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11498 pP2pNoaAttr->uNoa1Interval =
11499 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11500 pP2pNoaAttr->uNoa1StartTime =
11501 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 pP2pNoaAttr->uNoa2IntervalCnt =
11503 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11504 pP2pNoaAttr->uNoa2Duration =
11505 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11506 pP2pNoaAttr->uNoa2Interval =
11507 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11508 pP2pNoaAttr->uNoa2StartTime =
11509 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11511 (void *)pP2pNoaAttr , 0) ;
11512 break;
11513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011514#ifdef FEATURE_WLAN_SCAN_PNO
11515 case WDI_PREF_NETWORK_FOUND_IND:
11516 {
11517 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011518 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11519 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11520 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11521 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11522
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11524 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 if (NULL == pPrefNetworkFoundInd)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11528 "Memory allocation failure, "
11529 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11530 break;
11531 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 /* Message Header */
11533 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011534 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011535
11536 /* Info from WDI Indication */
11537 pPrefNetworkFoundInd->ssId.length =
11538 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11541 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11542 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011543 if (NULL !=
11544 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11545 {
11546 pPrefNetworkFoundInd->frameLength =
11547 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11548 vos_mem_copy( pPrefNetworkFoundInd->data,
11549 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11550 pPrefNetworkFoundInd->frameLength);
11551 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11552 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11553 }
11554 else
11555 {
11556 pPrefNetworkFoundInd->frameLength = 0;
11557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 /* VOS message wrapper */
11560 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11561 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11562 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 /* Send message to SME */
11564 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11565 {
11566 /* free the mem and return */
11567 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 break;
11570 }
11571#endif // FEATURE_WLAN_SCAN_PNO
11572
11573#ifdef WLAN_WAKEUP_EVENTS
11574 case WDI_WAKE_REASON_IND:
11575 {
11576 vos_msg_t vosMsg;
11577 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11578 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11579 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11580
11581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11582 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11583 wdiLowLevelInd->wdiIndicationType,
11584 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11585 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11586 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11587
11588 if (NULL == pWakeReasonInd)
11589 {
11590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11591 "Memory allocation failure, "
11592 "WDI_WAKE_REASON_IND not forwarded");
11593 break;
11594 }
11595
11596 vos_mem_zero(pWakeReasonInd, allocSize);
11597
11598 /* Message Header */
11599 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11600 pWakeReasonInd->mesgLen = allocSize;
11601
11602 /* Info from WDI Indication */
11603 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11604 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11605 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11606 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11607 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11608 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11609 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11610 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11611
11612 /* VOS message wrapper */
11613 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11614 vosMsg.bodyptr = (void *) pWakeReasonInd;
11615 vosMsg.bodyval = 0;
11616
11617 /* Send message to SME */
11618 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11619 {
11620 /* free the mem and return */
11621 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11622 }
11623
11624 break;
11625 }
11626#endif // WLAN_WAKEUP_EVENTS
11627
11628 case WDI_TX_PER_HIT_IND:
11629 {
11630 vos_msg_t vosMsg;
11631 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11632 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11633 /* VOS message wrapper */
11634 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11635 vosMsg.bodyptr = NULL;
11636 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 /* Send message to SME */
11638 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11639 {
11640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11641 }
11642 break;
11643 }
11644
11645 default:
11646 {
11647 /* TODO error */
11648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11649 "Received UNKNOWN Indication from WDI ");
11650 }
11651 }
11652 return ;
11653}
11654
Jeff Johnson295189b2012-06-20 16:38:30 -070011655/*
11656 * BA related processing in WDA.
11657 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011658void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11659 void* pUserData)
11660{
11661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11662 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 if(NULL == pWdaParams)
11664 {
11665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011666 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 VOS_ASSERT(0) ;
11668 return ;
11669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 vos_mem_free(pWdaParams->wdaMsgParam) ;
11672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11673 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11677 {
11678 tANI_U8 i = 0 ;
11679 tBaActivityInd *baActivityInd = NULL ;
11680 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11681 tANI_U8 allocSize = sizeof(tBaActivityInd)
11682 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11683 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11684 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011686 if(NULL == baActivityInd)
11687 {
11688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 VOS_ASSERT(0) ;
11691 return;
11692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11694 sizeof(tSirMacAddr)) ;
11695 baActivityInd->baCandidateCnt = baCandidateCount ;
11696
11697 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11698 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11699
11700 for(i = 0 ; i < baCandidateCount ; i++)
11701 {
11702 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11704 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11706 {
11707 baCandidate->baInfo[tid].fBaEnable =
11708 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11709 baCandidate->baInfo[tid].startingSeqNum =
11710 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11711 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011712 wdiBaCandidate++ ;
11713 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011715 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11716 }
11717 else
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11720 "BA Trigger RSP with Failure received ");
11721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011722 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011723}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011724
11725
11726/*
11727 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11728 * during MCC
11729 */
11730void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11731{
11732 wpt_uint32 enabled;
11733 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11734 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11735 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11736
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011737 if (NULL == pMac )
11738 {
11739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11740 "%s: Invoked with invalid MAC context ", __func__ );
11741 VOS_ASSERT(0);
11742 return;
11743 }
11744
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011745 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11746 != eSIR_SUCCESS)
11747 {
11748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11749 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11750 return;
11751 }
11752
11753 if(!enabled)
11754 {
11755 return;
11756 }
11757
11758 if(NULL == pWDA)
11759 {
11760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11761 "%s:WDA context is NULL", __func__);
11762 VOS_ASSERT(0);
11763 return;
11764 }
11765
11766 if(activate)
11767 {
11768 if( VOS_STATUS_SUCCESS !=
11769 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11770 {
11771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11772 "Traffic Stats Timer Start Failed ");
11773 return;
11774 }
11775 WDI_DS_ActivateTrafficStats();
11776 }
11777 else
11778 {
11779 WDI_DS_DeactivateTrafficStats();
11780 WDI_DS_ClearTrafficStats();
11781
11782 if( VOS_STATUS_SUCCESS !=
11783 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11784 {
11785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11786 "Traffic Stats Timer Stop Failed ");
11787 return;
11788 }
11789 }
11790}
11791
11792/*
11793 * Traffic Stats Timer handler
11794 */
11795void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11796{
11797 WDI_Status wdiStatus;
11798 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11799 WDI_TrafficStatsIndType trafficStatsIndParams;
11800 wpt_uint32 length, enabled;
11801 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11802
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011803 if (NULL == pMac )
11804 {
11805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11806 "%s: Invoked with invalid MAC context ", __func__ );
11807 VOS_ASSERT(0);
11808 return;
11809 }
11810
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011811 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11812 != eSIR_SUCCESS)
11813 {
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11815 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11816 return;
11817 }
11818
11819 if(!enabled)
11820 {
11821 WDI_DS_DeactivateTrafficStats();
11822 return;
11823 }
11824
11825 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
11826
11827 if(pWdiTrafficStats != NULL)
11828 {
11829 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
11830 trafficStatsIndParams.length = length;
11831 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080011832 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011833 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11834 trafficStatsIndParams.pUserData = pWDA;
11835
11836 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
11837
11838 if(WDI_STATUS_PENDING == wdiStatus)
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11841 "Pending received for %s:%d ",__func__,__LINE__ );
11842 }
11843 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11844 {
11845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11846 "Failure in %s:%d ",__func__,__LINE__ );
11847 }
11848
11849 WDI_DS_ClearTrafficStats();
11850 }
11851 else
11852 {
11853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11854 "pWdiTrafficStats is Null");
11855 }
11856
11857 if( VOS_STATUS_SUCCESS !=
11858 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11859 {
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11861 "Traffic Stats Timer Start Failed ");
11862 return;
11863 }
11864}
11865
Jeff Johnson295189b2012-06-20 16:38:30 -070011866/*
11867 * BA Activity check timer handler
11868 */
11869void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
11870{
11871 tANI_U8 curSta = 0 ;
11872 tANI_U8 tid = 0 ;
11873 tANI_U8 size = 0 ;
11874 tANI_U8 baCandidateCount = 0 ;
11875 tANI_U8 newBaCandidate = 0 ;
11876 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11877
11878 if(NULL == pWDA)
11879 {
11880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011881 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 VOS_ASSERT(0);
11883 return ;
11884 }
11885 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11886 {
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11888 "Inconsistent STA entries in WDA");
11889 VOS_ASSERT(0) ;
11890 }
11891 /* walk through all STA entries and find out TX packet count */
11892 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11893 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011894#ifdef WLAN_SOFTAP_VSTA_FEATURE
11895 // We can only do BA on "hard" STAs.
11896 if (!(IS_HWSTA_IDX(curSta)))
11897 {
11898 continue;
11899 }
11900#endif //WLAN_SOFTAP_VSTA_FEATURE
11901 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11902 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011903 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 tANI_U32 txPktCount = 0 ;
11905 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011907 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11908 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11910 curSta, tid, &txPktCount)))
11911 {
11912#if 0
11913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11914 "************* %d:%d, %d ",curSta, txPktCount,
11915 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11916#endif
11917 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011918 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11920 curSta, tid)))
11921 {
11922 /* get prepare for sending message to HAL */
11923 //baCandidate[baCandidateCount].staIdx = curSta ;
11924 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11925 newBaCandidate = WDA_ENABLE_BA ;
11926 }
11927 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11928 }
11929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 /* fill the entry for all the sta with given TID's */
11931 if(WDA_ENABLE_BA == newBaCandidate)
11932 {
11933 /* move to next BA candidate */
11934 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11935 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11936 baCandidateCount++ ;
11937 newBaCandidate = WDA_DISABLE_BA ;
11938 }
11939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 /* prepare and send message to hal */
11941 if( 0 < baCandidateCount)
11942 {
11943 WDI_Status status = WDI_STATUS_SUCCESS ;
11944 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11945 tWDA_ReqParams *pWdaParams =
11946 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 if(NULL == pWdaParams)
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;
11953 }
11954 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11955 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11956 if(NULL == wdiTriggerBaReq)
11957 {
11958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 VOS_ASSERT(0) ;
11961 vos_mem_free(pWdaParams);
11962 return;
11963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 do
11965 {
11966 WDI_TriggerBAReqinfoType *triggerBaInfo =
11967 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11968 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11969 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11970 * for each request */
11971 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11972 triggerBaInfo->ucBASessionID = 0;
11973 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11974 } while(0) ;
11975 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 pWdaParams->pWdaContext = pWDA;
11979 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11980 pWdaParams->wdaMsgParam = NULL;
11981 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11982 WDA_TriggerBaReqCallback, pWdaParams) ;
11983 if(IS_WDI_STATUS_FAILURE(status))
11984 {
11985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11986 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11987 vos_mem_free(pWdaParams->wdaMsgParam) ;
11988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11989 vos_mem_free(pWdaParams) ;
11990 }
11991 }
11992 else
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11995 "There is no TID for initiating BA");
11996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011997 if( VOS_STATUS_SUCCESS !=
11998 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11999 {
12000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12001 "BA Activity Timer Stop Failed ");
12002 return ;
12003 }
12004 if( VOS_STATUS_SUCCESS !=
12005 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12006 {
12007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12008 "BA Activity Timer Start Failed ");
12009 return;
12010 }
12011 return ;
12012}
Jeff Johnson295189b2012-06-20 16:38:30 -070012013/*
12014 * WDA common routine to create timer used by WDA.
12015 */
12016static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12017{
Jeff Johnson295189b2012-06-20 16:38:30 -070012018 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12019 tANI_U32 val = 0 ;
12020 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12021
12022 if(NULL == pMac)
12023 {
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012025 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 VOS_ASSERT(0);
12027 return VOS_STATUS_E_FAILURE;
12028 }
12029 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12030 != eSIR_SUCCESS)
12031 {
12032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12033 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12034 return VOS_STATUS_E_FAILURE;
12035 }
12036 val = SYS_MS_TO_TICKS(val) ;
12037
12038 /* BA activity check timer */
12039 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12040 "BA Activity Check timer", WDA_TimerHandler,
12041 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12042 if(status != TX_SUCCESS)
12043 {
12044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12045 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012046 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 /* Tx Complete Timeout timer */
12050 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12051 "Tx Complete Check timer", WDA_TimerHandler,
12052 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 if(status != TX_SUCCESS)
12054 {
12055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12056 "Unable to create Tx Complete Timeout timer");
12057 /* Destroy timer of BA activity check timer */
12058 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12059 if(status != TX_SUCCESS)
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012063 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012065 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012067
12068 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12069
12070 /* Traffic Stats timer */
12071 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12072 "Traffic Stats timer", WDA_TimerHandler,
12073 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12074 if(status != TX_SUCCESS)
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12077 "Unable to create traffic stats timer");
12078 /* Destroy timer of BA activity check timer */
12079 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12080 if(status != TX_SUCCESS)
12081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12083 "Unable to Destroy BA activity timer");
12084 }
12085 /* Destroy timer of tx complete timer */
12086 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12087 if(status != TX_SUCCESS)
12088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12090 "Unable to Tx complete timer");
12091 }
12092 return VOS_STATUS_E_FAILURE ;
12093 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012094 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012095}
Jeff Johnson295189b2012-06-20 16:38:30 -070012096/*
12097 * WDA common routine to destroy timer used by WDA.
12098 */
12099static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12100{
12101 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12103 if(status != TX_SUCCESS)
12104 {
12105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12106 "Unable to Destroy Tx Complete Timeout timer");
12107 return eSIR_FAILURE ;
12108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12110 if(status != TX_SUCCESS)
12111 {
12112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12113 "Unable to Destroy BA activity timer");
12114 return eSIR_FAILURE ;
12115 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012116 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12117 if(status != TX_SUCCESS)
12118 {
12119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12120 "Unable to Destroy traffic stats timer");
12121 return eSIR_FAILURE ;
12122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 return eSIR_SUCCESS ;
12124}
Jeff Johnson295189b2012-06-20 16:38:30 -070012125/*
12126 * WDA timer handler.
12127 */
12128void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12129{
12130 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12131 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 /*
12133 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12134 */
12135 wdaMsg.type = timerInfo ;
12136 wdaMsg.bodyptr = NULL;
12137 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 /* post the message.. */
12139 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12140 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12141 {
12142 vosStatus = VOS_STATUS_E_BADMSG;
12143 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012144}
Jeff Johnson295189b2012-06-20 16:38:30 -070012145/*
12146 * WDA Tx Complete timeout Indication.
12147 */
12148void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12149{
12150 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012151 if( pWDA->pAckTxCbFunc )
12152 {
12153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12154 "TxComplete timer expired\n");
12155 pWDA->pAckTxCbFunc( pMac, 0);
12156 pWDA->pAckTxCbFunc = NULL;
12157 }
12158 else
12159 {
12160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12161 "There is no request pending for TxComplete and wait timer expired\n");
12162 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012163}
Jeff Johnson295189b2012-06-20 16:38:30 -070012164/*
12165 * WDA Set REG Domain to VOS NV
12166 */
12167eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12168{
12169 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12170 {
12171 return eHAL_STATUS_INVALID_PARAMETER;
12172 }
12173 return eHAL_STATUS_SUCCESS;
12174}
Jeff Johnson295189b2012-06-20 16:38:30 -070012175
Jeff Johnson295189b2012-06-20 16:38:30 -070012176#ifdef FEATURE_WLAN_SCAN_PNO
12177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012178 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 *
12180 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012181void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012182{
12183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012185 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012186 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012189 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 VOS_ASSERT(0) ;
12191 return ;
12192 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012193
Yue Ma7f44bbe2013-04-12 11:47:39 -070012194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12195 vos_mem_free(pWdaParams->wdaMsgParam);
12196 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012197
12198 return ;
12199}
Jeff Johnson295189b2012-06-20 16:38:30 -070012200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012201 * FUNCTION: WDA_PNOScanReqCallback
12202 * Free memory.
12203 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12204 */
12205void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012206{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12208
12209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12210 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12211
12212 if(NULL == pWdaParams)
12213 {
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12215 "%s: pWdaParams received NULL", __func__);
12216 VOS_ASSERT(0);
12217 return;
12218 }
12219
12220 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12221 {
12222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12223 vos_mem_free(pWdaParams->wdaMsgParam);
12224 vos_mem_free(pWdaParams);
12225 }
12226
12227 return;
12228}
12229/*
12230 * FUNCTION: WDA_UpdateScanParamsRespCallback
12231 *
12232 */
12233void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12234{
12235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012237 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012238 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012239 {
12240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 VOS_ASSERT(0) ;
12243 return ;
12244 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012245
12246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12247 vos_mem_free(pWdaParams->wdaMsgParam);
12248 vos_mem_free(pWdaParams);
12249
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 return ;
12251}
Jeff Johnson295189b2012-06-20 16:38:30 -070012252/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012253 * FUNCTION: WDA_UpdateScanParamsReqCallback
12254 * Free memory.
12255 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12256 */
12257void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12258{
12259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12260
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12262 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12263
12264 if(NULL == pWdaParams)
12265 {
12266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12267 "%s: pWdaParams received NULL", __func__);
12268 VOS_ASSERT(0);
12269 return;
12270 }
12271
12272 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12273 {
12274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12275 vos_mem_free(pWdaParams->wdaMsgParam);
12276 vos_mem_free(pWdaParams);
12277 }
12278
12279 return;
12280}
12281/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12283 * Request to WDI to set Preferred Network List.Offload
12284 */
12285VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12286 tSirPNOScanReq *pPNOScanReqParams)
12287{
Jeff Johnson43971f52012-07-17 12:26:56 -070012288 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12290 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12291 tWDA_ReqParams *pWdaParams ;
12292 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012294 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012295 if(NULL == pwdiPNOScanReqInfo)
12296 {
12297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 VOS_ASSERT(0);
12300 return VOS_STATUS_E_NOMEM;
12301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12303 if(NULL == pWdaParams)
12304 {
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 VOS_ASSERT(0);
12308 vos_mem_free(pwdiPNOScanReqInfo);
12309 return VOS_STATUS_E_NOMEM;
12310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 //
12312 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12313 //
12314 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12315 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012316 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12317 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12318 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12320 {
12321 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12322 &pPNOScanReqParams->aNetworks[i],
12323 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 /*Scan timer intervals*/
12326 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12327 &pPNOScanReqParams->scanTimers,
12328 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 /*Probe template for 2.4GHz band*/
12330 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12331 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12332 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012333 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12334 pPNOScanReqParams->p24GProbeTemplate,
12335 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 /*Probe template for 5GHz band*/
12337 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12338 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12339 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12341 pPNOScanReqParams->p5GProbeTemplate,
12342 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012343 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12344 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012345
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 /* Store Params pass it to WDI */
12347 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12348 pWdaParams->pWdaContext = pWDA;
12349 /* Store param pointer as passed in by caller */
12350 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012352 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 if(IS_WDI_STATUS_FAILURE(status))
12354 {
12355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12356 "Failure in Set PNO REQ WDI API, free all the memory " );
12357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12358 vos_mem_free(pWdaParams->wdaMsgParam);
12359 pWdaParams->wdaWdiApiMsgParam = NULL;
12360 pWdaParams->wdaMsgParam = NULL;
12361 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012362 return CONVERT_WDI2VOS_STATUS(status) ;
12363}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012364
12365#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12366
12367void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12368{
12369 /*Convert the CSR Auth types to WDI Auth types */
12370 switch (csrAuthType)
12371 {
12372 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12373 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12374 break;
12375#ifdef FEATURE_WLAN_CCX
12376 case eCSR_AUTH_TYPE_CCKM_WPA:
12377 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12378 break;
12379#endif
12380 case eCSR_AUTH_TYPE_WPA:
12381 *AuthType = eWDA_AUTH_TYPE_WPA;
12382 break;
12383 case eCSR_AUTH_TYPE_WPA_PSK:
12384 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12385 break;
12386#ifdef FEATURE_WLAN_CCX
12387 case eCSR_AUTH_TYPE_CCKM_RSN:
12388 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12389 break;
12390#endif
12391 case eCSR_AUTH_TYPE_RSN:
12392 *AuthType = eWDA_AUTH_TYPE_RSN;
12393 break;
12394 case eCSR_AUTH_TYPE_RSN_PSK:
12395 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12396 break;
12397#if defined WLAN_FEATURE_VOWIFI_11R
12398 case eCSR_AUTH_TYPE_FT_RSN:
12399 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12400 break;
12401 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12402 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12403 break;
12404#endif
12405#ifdef FEATURE_WLAN_WAPI
12406 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12407 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12408 break;
12409 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12410 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12411 break;
12412#endif /* FEATURE_WLAN_WAPI */
12413 case eCSR_AUTH_TYPE_SHARED_KEY:
12414 case eCSR_AUTH_TYPE_AUTOSWITCH:
12415 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12416 break;
12417#if 0
12418 case eCSR_AUTH_TYPE_SHARED_KEY:
12419 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12420 break;
12421 case eCSR_AUTH_TYPE_AUTOSWITCH:
12422 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12423#endif
12424 default:
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12426 "%s: Unknown Auth Type", __func__);
12427 break;
12428 }
12429}
12430void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12431{
12432 switch (csrEncrType)
12433 {
12434 case eCSR_ENCRYPT_TYPE_NONE:
12435 *EncrType = WDI_ED_NONE;
12436 break;
12437 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12438 case eCSR_ENCRYPT_TYPE_WEP40:
12439 *EncrType = WDI_ED_WEP40;
12440 break;
12441 case eCSR_ENCRYPT_TYPE_WEP104:
12442 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12443 *EncrType = WDI_ED_WEP104;
12444 break;
12445 case eCSR_ENCRYPT_TYPE_TKIP:
12446 *EncrType = WDI_ED_TKIP;
12447 break;
12448 case eCSR_ENCRYPT_TYPE_AES:
12449 *EncrType = WDI_ED_CCMP;
12450 break;
12451#ifdef WLAN_FEATURE_11W
12452 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12453 *EncrType = WDI_ED_AES_128_CMAC;
12454 break;
12455#endif
12456#ifdef FEATURE_WLAN_WAPI
12457 case eCSR_ENCRYPT_TYPE_WPI:
12458 *EncrType = WDI_ED_WPI;
12459 break;
12460#endif
12461 case eCSR_ENCRYPT_TYPE_ANY:
12462 *EncrType = WDI_ED_ANY;
12463 break;
12464
12465 default:
12466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12467 "%s: Unknown Encryption Type", __func__);
12468 break;
12469 }
12470}
12471
12472/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012473 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012474 * Request to WDI to set Roam Offload Scan
12475 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012476VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012477 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12478{
12479 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012480 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12481 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012482 tWDA_ReqParams *pWdaParams ;
12483 v_U8_t csrAuthType;
12484 WDI_RoamNetworkType *pwdiRoamNetworkType;
12485 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12487 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012488 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012489 {
12490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12491 "%s: VOS MEM Alloc Failure", __func__);
12492 VOS_ASSERT(0);
12493 return VOS_STATUS_E_NOMEM;
12494 }
12495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12496 if (NULL == pWdaParams)
12497 {
12498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12499 "%s: VOS MEM Alloc Failure", __func__);
12500 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012501 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012502 return VOS_STATUS_E_NOMEM;
12503 }
12504
12505 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012506 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012507 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012508 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12509 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012510 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12511 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12512 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12513 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12514 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12515 sizeof(pwdiRoamNetworkType->currAPbssid));
12516 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12517 csrAuthType);
12518 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12519 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12520 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12521 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12522 pwdiRoamOffloadScanInfo->LookupThreshold =
12523 pRoamOffloadScanReqParams->LookupThreshold ;
12524 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12525 pRoamOffloadScanReqParams->RoamRssiDiff ;
12526 pwdiRoamOffloadScanInfo->Command =
12527 pRoamOffloadScanReqParams->Command ;
12528 pwdiRoamOffloadScanInfo->StartScanReason =
12529 pRoamOffloadScanReqParams->StartScanReason ;
12530 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12531 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12532 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12533 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12534 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12535 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12536 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12537 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12538 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12539 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12540 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12541 pRoamOffloadScanReqParams->IsCCXEnabled ;
12542 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12543 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12544 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12545 pwdiRoamNetworkType->ssId.ucLength =
12546 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12547 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12548 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12549 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12550 pwdiRoamNetworkType->ChannelCount =
12551 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12552 pwdiRoamOffloadScanInfo->ChannelCacheType =
12553 pRoamOffloadScanReqParams->ChannelCacheType;
12554 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12555 pRoamOffloadScanReqParams->ValidChannelList,
12556 pRoamOffloadScanReqParams->ValidChannelCount);
12557 pwdiRoamOffloadScanInfo->ValidChannelCount =
12558 pRoamOffloadScanReqParams->ValidChannelCount;
12559 pwdiRoamOffloadScanInfo->us24GProbeSize =
12560 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12561 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12562 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12563 pRoamOffloadScanReqParams->p24GProbeTemplate,
12564 pwdiRoamOffloadScanInfo->us24GProbeSize);
12565 pwdiRoamOffloadScanInfo->us5GProbeSize =
12566 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12567 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12568 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12569 pRoamOffloadScanReqParams->p5GProbeTemplate,
12570 pwdiRoamOffloadScanInfo->us5GProbeSize);
12571 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12572 pRoamOffloadScanReqParams->MDID.mdiePresent;
12573 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12574 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012575 pwdiRoamOffloadScanInfo->nProbes =
12576 pRoamOffloadScanReqParams->nProbes;
12577 pwdiRoamOffloadScanInfo->HomeAwayTime =
12578 pRoamOffloadScanReqParams->HomeAwayTime;
12579 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012580 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012581 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012582 pWdaParams->pWdaContext = pWDA;
12583 /* Store param pointer as passed in by caller */
12584 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012585 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012586 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12587 if(IS_WDI_STATUS_FAILURE(status))
12588 {
12589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12590 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12592 vos_mem_free(pWdaParams->wdaMsgParam);
12593 pWdaParams->wdaWdiApiMsgParam = NULL;
12594 pWdaParams->wdaMsgParam = NULL;
12595 }
12596 return CONVERT_WDI2VOS_STATUS(status) ;
12597}
12598#endif
12599
Jeff Johnson295189b2012-06-20 16:38:30 -070012600/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012601 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012602 *
12603 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012604void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012605{
12606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12607
12608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012609 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012610
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012611 if(NULL == pWdaParams)
12612 {
12613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012614 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012615 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012616 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012617 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012618
Jeff Johnson295189b2012-06-20 16:38:30 -070012619 vos_mem_free(pWdaParams->wdaMsgParam) ;
12620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12621 vos_mem_free(pWdaParams) ;
12622
12623 return ;
12624}
12625/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012626 * FUNCTION: WDA_RssiFilterReqCallback
12627 * Free memory.
12628 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12629 */
12630void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12631{
12632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12633
12634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12635 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12636
12637 if(NULL == pWdaParams)
12638 {
12639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12640 "%s: pWdaParams received NULL", __func__);
12641 VOS_ASSERT(0);
12642 return;
12643 }
12644
12645 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12646 {
12647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12648 vos_mem_free(pWdaParams->wdaMsgParam);
12649 vos_mem_free(pWdaParams);
12650 }
12651
12652 return;
12653}
12654/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012655 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12656 * Request to WDI to set Preferred Network List.Offload
12657 */
12658VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12659 tSirSetRSSIFilterReq* pRssiFilterParams)
12660{
Jeff Johnson43971f52012-07-17 12:26:56 -070012661 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12663 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12664 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012666 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 if(NULL == pwdiSetRssiFilterReqInfo)
12668 {
12669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 VOS_ASSERT(0);
12672 return VOS_STATUS_E_NOMEM;
12673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12675 if(NULL == pWdaParams)
12676 {
12677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 VOS_ASSERT(0);
12680 vos_mem_free(pwdiSetRssiFilterReqInfo);
12681 return VOS_STATUS_E_NOMEM;
12682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012684 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12685 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012686
Jeff Johnson295189b2012-06-20 16:38:30 -070012687 /* Store Params pass it to WDI */
12688 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12689 pWdaParams->pWdaContext = pWDA;
12690 /* Store param pointer as passed in by caller */
12691 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012693 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012694 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 if(IS_WDI_STATUS_FAILURE(status))
12696 {
12697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12698 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12700 vos_mem_free(pWdaParams->wdaMsgParam);
12701 pWdaParams->wdaWdiApiMsgParam = NULL;
12702 pWdaParams->wdaMsgParam = NULL;
12703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 return CONVERT_WDI2VOS_STATUS(status) ;
12705}
12706
Jeff Johnson295189b2012-06-20 16:38:30 -070012707/*
12708 * FUNCTION: WDA_ProcessUpdateScanParams
12709 * Request to WDI to update Scan Parameters
12710 */
12711VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12712 tSirUpdateScanParams *pUpdateScanParams)
12713{
Jeff Johnson43971f52012-07-17 12:26:56 -070012714 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12716 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12717 sizeof(WDI_UpdateScanParamsInfoType)) ;
12718 tWDA_ReqParams *pWdaParams ;
12719 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 if(NULL == wdiUpdateScanParamsInfoType)
12723 {
12724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012726 VOS_ASSERT(0);
12727 return VOS_STATUS_E_NOMEM;
12728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012729 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12730 if ( NULL == pWdaParams )
12731 {
12732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012734 VOS_ASSERT(0);
12735 vos_mem_free(wdiUpdateScanParamsInfoType);
12736 return VOS_STATUS_E_NOMEM;
12737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012738 //
12739 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12740 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12742 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12743 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12744 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12745 "sir struct %d wdi struct %d",
12746 pUpdateScanParams->b11dEnabled,
12747 pUpdateScanParams->b11dResolved,
12748 pUpdateScanParams->ucChannelCount,
12749 pUpdateScanParams->usPassiveMinChTime,
12750 pUpdateScanParams->usPassiveMaxChTime,
12751 pUpdateScanParams->usActiveMinChTime,
12752 pUpdateScanParams->usActiveMaxChTime,
12753 sizeof(tSirUpdateScanParams),
12754 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12755
Jeff Johnson295189b2012-06-20 16:38:30 -070012756 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12757 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12759 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12761 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012762 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12763 pUpdateScanParams->usActiveMaxChTime;
12764 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12765 pUpdateScanParams->usActiveMinChTime;
12766 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12767 pUpdateScanParams->usPassiveMaxChTime;
12768 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12769 pUpdateScanParams->usPassiveMinChTime;
12770
Jeff Johnson295189b2012-06-20 16:38:30 -070012771 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012772 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12773 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012774
Jeff Johnson295189b2012-06-20 16:38:30 -070012775 for ( i = 0; i <
12776 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12777 i++)
12778 {
12779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12780 "Update Scan Parameters channel: %d",
12781 pUpdateScanParams->aChannels[i]);
12782
12783 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12784 pUpdateScanParams->aChannels[i];
12785 }
12786
Yue Ma7f44bbe2013-04-12 11:47:39 -070012787 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12788 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012789
Jeff Johnson295189b2012-06-20 16:38:30 -070012790 /* Store Params pass it to WDI */
12791 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12792 pWdaParams->pWdaContext = pWDA;
12793 /* Store param pointer as passed in by caller */
12794 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012795
Jeff Johnson295189b2012-06-20 16:38:30 -070012796
12797
12798 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012799 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012801 if(IS_WDI_STATUS_FAILURE(status))
12802 {
12803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12804 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12806 vos_mem_free(pWdaParams->wdaMsgParam);
12807 vos_mem_free(pWdaParams);
12808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012809 return CONVERT_WDI2VOS_STATUS(status) ;
12810}
12811#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012812
12813#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12814/*
12815 * FUNCTION: WDA_RoamOffloadScanReqCallback
12816 *
12817 */
12818void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12819{
12820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012821 vos_msg_t vosMsg;
12822 wpt_uint8 reason = 0;
12823
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070012824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012825 "<------ %s " ,__func__);
12826 if (NULL == pWdaParams)
12827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12829 "%s: pWdaParams received NULL", __func__);
12830 VOS_ASSERT(0) ;
12831 return ;
12832 }
12833 if ( pWdaParams != NULL )
12834 {
12835 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
12836 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012837 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12839 }
12840 if ( pWdaParams->wdaMsgParam != NULL)
12841 {
12842 vos_mem_free(pWdaParams->wdaMsgParam);
12843 }
12844
12845 vos_mem_free(pWdaParams) ;
12846 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012847 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
12848 vosMsg.bodyptr = NULL;
12849 if (WDI_STATUS_SUCCESS != status)
12850 {
12851 reason = 0;
12852 }
12853 vosMsg.bodyval = reason;
12854 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12855 {
12856 /* free the mem and return */
12857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12858 "Failed to post the rsp to UMAC" ,__func__);
12859 }
12860
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012861 return ;
12862}
12863#endif
12864
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012865/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012866 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012867 *
12868 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012869void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012870{
12871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12872
12873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12874 "<------ %s " ,__func__);
12875
12876 if(NULL == pWdaParams)
12877 {
12878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12879 "%s: pWdaParams received NULL", __func__);
12880 VOS_ASSERT(0);
12881 return;
12882 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012883
12884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12885 vos_mem_free(pWdaParams->wdaMsgParam);
12886 vos_mem_free(pWdaParams);
12887
12888 return;
12889}
12890/*
12891 * FUNCTION: WDA_SetPowerParamsReqCallback
12892 * Free memory.
12893 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
12894 */
12895void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12896{
12897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12898
12899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12900 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12901
12902 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012903 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12905 "%s: pWdaParams received NULL", __func__);
12906 VOS_ASSERT(0);
12907 return;
12908 }
12909
12910 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12911 {
12912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12913 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012914 vos_mem_free(pWdaParams);
12915 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012916
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012917 return;
12918}
12919
Jeff Johnson295189b2012-06-20 16:38:30 -070012920#ifdef WLAN_FEATURE_PACKET_FILTERING
12921/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012922 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012923 *
12924 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012925void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012926 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
12927 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012928{
12929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012931 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 if(NULL == pWdaParams)
12933 {
12934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012935 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 VOS_ASSERT(0) ;
12937 return ;
12938 }
12939
12940 vos_mem_free(pWdaParams->wdaMsgParam) ;
12941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12942 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 //print a msg, nothing else to do
12944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012945 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012946 return ;
12947}
Jeff Johnson295189b2012-06-20 16:38:30 -070012948/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012949 * FUNCTION: WDA_8023MulticastListReqCallback
12950 * Free memory.
12951 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
12952 */
12953void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
12954{
12955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12956
12957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12958 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12959
12960 if(NULL == pWdaParams)
12961 {
12962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12963 "%s: pWdaParams received NULL", __func__);
12964 VOS_ASSERT(0);
12965 return;
12966 }
12967
12968 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12969 {
12970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12971 vos_mem_free(pWdaParams->wdaMsgParam);
12972 vos_mem_free(pWdaParams);
12973 }
12974
12975 return;
12976}
12977/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 * FUNCTION: WDA_Process8023MulticastListReq
12979 * Request to WDI to add 8023 Multicast List
12980 */
12981VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
12982 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
12983{
Jeff Johnson43971f52012-07-17 12:26:56 -070012984 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
12986 tWDA_ReqParams *pWdaParams ;
12987 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012990 pwdiFltPktSetMcListReqParamsType =
12991 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
12992 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
12993 ) ;
12994 if(NULL == pwdiFltPktSetMcListReqParamsType)
12995 {
12996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 return VOS_STATUS_E_NOMEM;
12999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013000 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13001 if(NULL == pWdaParams)
13002 {
13003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13006 return VOS_STATUS_E_NOMEM;
13007 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013008
Jeff Johnson295189b2012-06-20 16:38:30 -070013009 //
13010 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13011 //
13012 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013013 pRcvFltMcAddrList->ulMulticastAddrCnt;
13014
13015 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13016 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13017 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13018 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13019
Jeff Johnson295189b2012-06-20 16:38:30 -070013020 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13021 {
13022 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13023 &(pRcvFltMcAddrList->multicastAddr[i]),
13024 sizeof(tSirMacAddr));
13025 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013026 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13027 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013028
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 /* Store Params pass it to WDI */
13030 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13031 pWdaParams->pWdaContext = pWDA;
13032 /* Store param pointer as passed in by caller */
13033 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013034 status = WDI_8023MulticastListReq(
13035 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013036 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013038 if(IS_WDI_STATUS_FAILURE(status))
13039 {
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13041 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13043 vos_mem_free(pWdaParams->wdaMsgParam);
13044 vos_mem_free(pWdaParams);
13045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013046 return CONVERT_WDI2VOS_STATUS(status) ;
13047}
Jeff Johnson295189b2012-06-20 16:38:30 -070013048/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013049 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013050 *
13051 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013052void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013053 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13054 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013055{
13056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 if(NULL == pWdaParams)
13061 {
13062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013064 VOS_ASSERT(0) ;
13065 return ;
13066 }
13067
13068 vos_mem_free(pWdaParams->wdaMsgParam) ;
13069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13070 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013071 //print a msg, nothing else to do
13072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013073 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 return ;
13075}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013076
13077/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013078 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13079 * Free memory.
13080 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013081 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013082void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013083 void* pUserData)
13084{
13085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13086
13087 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13088 "<------ %s, wdiStatus: %d",
13089 __func__, wdiStatus);
13090
13091 if (NULL == pWdaParams)
13092 {
13093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13094 "%s: Invalid pWdaParams pointer", __func__);
13095 VOS_ASSERT(0);
13096 return;
13097 }
13098
13099 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13100 {
13101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13102 vos_mem_free(pWdaParams->wdaMsgParam);
13103 vos_mem_free(pWdaParams);
13104 }
13105
13106 return;
13107}
13108
Jeff Johnson295189b2012-06-20 16:38:30 -070013109/*
13110 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13111 * Request to WDI to set Receive Filters
13112 */
13113VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13114 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13115{
Jeff Johnson43971f52012-07-17 12:26:56 -070013116 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13118 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13119 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13120 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13121 tWDA_ReqParams *pWdaParams ;
13122 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013125 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13126 {
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013129 VOS_ASSERT(0);
13130 return VOS_STATUS_E_NOMEM;
13131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13133 if(NULL == pWdaParams)
13134 {
13135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 VOS_ASSERT(0);
13138 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13139 return VOS_STATUS_E_NOMEM;
13140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013141 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13142 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13143 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13144 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013145 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13146 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13147
13148 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13149 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013150
13151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13152 "FID %d FT %d NParams %d CT %d",
13153 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13154 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13155 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13156 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13158 {
13159 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13160 &pRcvPktFilterCfg->paramsData[i],
13161 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13163 "Proto %d Comp Flag %d \n",
13164 pwdiSetRcvPktFilterReqParamsType->
13165 wdiPktFilterCfg.paramsData[i].protocolLayer,
13166 pwdiSetRcvPktFilterReqParamsType->
13167 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13169 "Data Offset %d Data Len %d\n",
13170 pwdiSetRcvPktFilterReqParamsType->
13171 wdiPktFilterCfg.paramsData[i].dataOffset,
13172 pwdiSetRcvPktFilterReqParamsType->
13173 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13175 "CData: %d:%d:%d:%d:%d:%d\n",
13176 pwdiSetRcvPktFilterReqParamsType->
13177 wdiPktFilterCfg.paramsData[i].compareData[0],
13178 pwdiSetRcvPktFilterReqParamsType->
13179 wdiPktFilterCfg.paramsData[i].compareData[1],
13180 pwdiSetRcvPktFilterReqParamsType->
13181 wdiPktFilterCfg.paramsData[i].compareData[2],
13182 pwdiSetRcvPktFilterReqParamsType->
13183 wdiPktFilterCfg.paramsData[i].compareData[3],
13184 pwdiSetRcvPktFilterReqParamsType->
13185 wdiPktFilterCfg.paramsData[i].compareData[4],
13186 pwdiSetRcvPktFilterReqParamsType->
13187 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13189 "MData: %d:%d:%d:%d:%d:%d\n",
13190 pwdiSetRcvPktFilterReqParamsType->
13191 wdiPktFilterCfg.paramsData[i].dataMask[0],
13192 pwdiSetRcvPktFilterReqParamsType->
13193 wdiPktFilterCfg.paramsData[i].dataMask[1],
13194 pwdiSetRcvPktFilterReqParamsType->
13195 wdiPktFilterCfg.paramsData[i].dataMask[2],
13196 pwdiSetRcvPktFilterReqParamsType->
13197 wdiPktFilterCfg.paramsData[i].dataMask[3],
13198 pwdiSetRcvPktFilterReqParamsType->
13199 wdiPktFilterCfg.paramsData[i].dataMask[4],
13200 pwdiSetRcvPktFilterReqParamsType->
13201 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013202 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013203 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013204 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013205 /* Store Params pass it to WDI */
13206 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13207 pWdaParams->pWdaContext = pWDA;
13208 /* Store param pointer as passed in by caller */
13209 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013211 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 if(IS_WDI_STATUS_FAILURE(status))
13214 {
13215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13216 "Failure in SetFilter(),free all the memory,status %d ",status);
13217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13218 vos_mem_free(pWdaParams->wdaMsgParam);
13219 vos_mem_free(pWdaParams);
13220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 return CONVERT_WDI2VOS_STATUS(status) ;
13222}
Jeff Johnson295189b2012-06-20 16:38:30 -070013223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013224 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013225 *
13226 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013227void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013228 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13229 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013230{
13231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13232 tWDA_CbContext *pWDA;
13233 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13234 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13235 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13236 tANI_U8 i;
13237 vos_msg_t vosMsg;
13238
13239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13242
Jeff Johnsone7245742012-09-05 17:12:55 -070013243 if(NULL == pRcvFltPktMatchCntRsp)
13244 {
13245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013246 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013247 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013248 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013249 return ;
13250 }
13251
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 if(NULL == pWdaParams)
13253 {
13254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013255 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013257 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 return ;
13259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13261 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13263 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13264
13265 /* Message Header */
13266 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13267 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13268
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013269 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013270
13271 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13272 {
13273 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13274 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 /* VOS message wrapper */
13277 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13278 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13279 vosMsg.bodyval = 0;
13280 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13281 {
13282 /* free the mem and return */
13283 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13284 }
13285
13286 vos_mem_free(pWdaParams->wdaMsgParam) ;
13287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13288 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013289
13290 return;
13291}
13292/*
13293 * FUNCTION: WDA_FilterMatchCountReqCallback
13294 * Free memory and send RSP back to SME.
13295 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13296 */
13297void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13298{
13299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13300 vos_msg_t vosMsg;
13301
13302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13303 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13304
13305 if(NULL == pWdaParams)
13306 {
13307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13308 "%s: pWdaParams received NULL", __func__);
13309 VOS_ASSERT(0);
13310 return;
13311 }
13312
13313 /* VOS message wrapper */
13314 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13315 vosMsg.bodyptr = NULL;
13316 vosMsg.bodyval = 0;
13317
13318 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13319 {
13320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13321 vos_mem_free(pWdaParams->wdaMsgParam);
13322 vos_mem_free(pWdaParams);
13323 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13324 }
13325
13326 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013327}
Jeff Johnson295189b2012-06-20 16:38:30 -070013328/*
13329 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13330 * Request to WDI to get PC Filter Match Count
13331 */
13332VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13333{
Jeff Johnson43971f52012-07-17 12:26:56 -070013334 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013335 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13336 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_ASSERT(0);
13345 return VOS_STATUS_E_NOMEM;
13346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13348 if(NULL == pWdaParams)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 VOS_ASSERT(0);
13353 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13354 return VOS_STATUS_E_NOMEM;
13355 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013356
Yue Ma7f44bbe2013-04-12 11:47:39 -070013357 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13358 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013359
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013360 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13361 pRcvFltPktMatchRsp->bssId,
13362 sizeof(wpt_macAddr));
13363
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 /* Store Params pass it to WDI */
13365 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13366 pWdaParams->pWdaContext = pWDA;
13367 /* Store param pointer as passed in by caller */
13368 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013369 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013370 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 if(IS_WDI_STATUS_FAILURE(status))
13373 {
13374 /* failure returned by WDI API */
13375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13376 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13378 vos_mem_free(pWdaParams) ;
13379 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13380 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13381 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 return CONVERT_WDI2VOS_STATUS(status) ;
13383}
Jeff Johnson295189b2012-06-20 16:38:30 -070013384/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013385 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013386 *
13387 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013388void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013389 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13390 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013391{
13392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013394 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013395/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13396 if(NULL == pWdaParams)
13397 {
13398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013399 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 VOS_ASSERT(0) ;
13401 return ;
13402 }
13403
13404 vos_mem_free(pWdaParams->wdaMsgParam) ;
13405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13406 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013407 //print a msg, nothing else to do
13408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013409 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013410 return ;
13411}
Jeff Johnson295189b2012-06-20 16:38:30 -070013412/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013413 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13414 * Free memory.
13415 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13416 */
13417void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13418{
13419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13420
13421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13422 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13423
13424 if(NULL == pWdaParams)
13425 {
13426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13427 "%s: Invalid pWdaParams pointer", __func__);
13428 VOS_ASSERT(0);
13429 return;
13430 }
13431
13432 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13433 {
13434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13435 vos_mem_free(pWdaParams->wdaMsgParam);
13436 vos_mem_free(pWdaParams);
13437 }
13438
13439 return;
13440}
13441/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013442 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13443 * Request to WDI to clear Receive Filters
13444 */
13445VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13446 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13447{
Jeff Johnson43971f52012-07-17 12:26:56 -070013448 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13450 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013454 if(NULL == pwdiRcvFltPktClearReqParamsType)
13455 {
13456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013458 VOS_ASSERT(0);
13459 return VOS_STATUS_E_NOMEM;
13460 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13462 if(NULL == pWdaParams)
13463 {
13464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 VOS_ASSERT(0);
13467 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13468 return VOS_STATUS_E_NOMEM;
13469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13471 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013472 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13473 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13474 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13475 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013476
Yue Ma7f44bbe2013-04-12 11:47:39 -070013477 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013478 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 /* Store Params pass it to WDI */
13480 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13481 pWdaParams->pWdaContext = pWDA;
13482 /* Store param pointer as passed in by caller */
13483 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013485 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 if(IS_WDI_STATUS_FAILURE(status))
13488 {
13489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13490 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013492 vos_mem_free(pWdaParams->wdaMsgParam);
13493 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 return CONVERT_WDI2VOS_STATUS(status) ;
13496}
13497#endif // WLAN_FEATURE_PACKET_FILTERING
13498
Jeff Johnson295189b2012-06-20 16:38:30 -070013499/*
13500 * FUNCTION: WDA_ProcessSetPowerParamsReq
13501 * Request to WDI to set power params
13502 */
13503VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13504 tSirSetPowerParamsReq *pPowerParams)
13505{
Jeff Johnson43971f52012-07-17 12:26:56 -070013506 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013507 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13508 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013511 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013512 if(NULL == pwdiSetPowerParamsReqInfo)
13513 {
13514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 VOS_ASSERT(0);
13517 return VOS_STATUS_E_NOMEM;
13518 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13520 if(NULL == pWdaParams)
13521 {
13522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 VOS_ASSERT(0);
13525 vos_mem_free(pwdiSetPowerParamsReqInfo);
13526 return VOS_STATUS_E_NOMEM;
13527 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013528
Jeff Johnson295189b2012-06-20 16:38:30 -070013529
13530 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13531 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13533 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013534 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13535 pPowerParams->uListenInterval;
13536 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13537 pPowerParams->uBcastMcastFilter;
13538 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13539 pPowerParams->uEnableBET;
13540 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13541 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013542 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13543 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013544 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13545 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013546
Jeff Johnson295189b2012-06-20 16:38:30 -070013547 /* Store Params pass it to WDI */
13548 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13549 pWdaParams->pWdaContext = pWDA;
13550 /* Store param pointer as passed in by caller */
13551 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013552 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013553 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 if(IS_WDI_STATUS_FAILURE(status))
13556 {
13557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13558 "Failure in Set power params REQ WDI API, free all the memory " );
13559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13560 vos_mem_free(pWdaParams->wdaMsgParam);
13561 pWdaParams->wdaWdiApiMsgParam = NULL;
13562 pWdaParams->wdaMsgParam = NULL;
13563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013564 return CONVERT_WDI2VOS_STATUS(status) ;
13565}
13566
13567/*
13568 * FUNCTION: WDA_SetTmLevelRspCallback
13569 * Set TM Level response
13570 */
13571void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13572{
13573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13574
13575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013577
13578 if(NULL == pWdaParams)
13579 {
13580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013581 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013582 VOS_ASSERT(0) ;
13583 return ;
13584 }
13585
13586 /* Dose not need to send notification to upper layer
13587 * Just free allocated resources */
13588 if( pWdaParams != NULL )
13589 {
13590 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13591 {
13592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13593 }
13594 vos_mem_free(pWdaParams->wdaMsgParam) ;
13595 vos_mem_free(pWdaParams) ;
13596 }
13597}
13598
13599/*
13600 * FUNCTION: WDA_ProcessSetTmLevelReq
13601 * Set TM Level request
13602 */
13603VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13604 tAniSetTmLevelReq *setTmLevelReq)
13605{
13606 WDI_Status status = WDI_STATUS_SUCCESS ;
13607 tWDA_ReqParams *pWdaParams ;
13608 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13609 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13610 sizeof(WDI_SetTmLevelReqType)) ;
13611 if(NULL == wdiSetTmLevelReq)
13612 {
13613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 VOS_ASSERT(0);
13616 return VOS_STATUS_E_NOMEM;
13617 }
13618
13619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13620 if(NULL == pWdaParams)
13621 {
13622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 VOS_ASSERT(0);
13625 vos_mem_free(wdiSetTmLevelReq);
13626 return VOS_STATUS_E_NOMEM;
13627 }
13628
13629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013631
13632 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13633 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13634
13635 pWdaParams->pWdaContext = pWDA;
13636 pWdaParams->wdaMsgParam = setTmLevelReq;
13637 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13638
13639 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13640 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13641
13642 if(IS_WDI_STATUS_FAILURE(status))
13643 {
13644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013645 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013646 vos_mem_free(pWdaParams->wdaMsgParam) ;
13647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13648 vos_mem_free(pWdaParams) ;
13649 }
13650
13651 return CONVERT_WDI2VOS_STATUS(status) ;
13652}
13653
13654VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13655 tpTxControlParams pTxCtrlParam)
13656{
13657 VOS_STATUS wdaStatus;
13658
13659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 if( pTxCtrlParam == NULL )
13662 {
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013664 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 return VOS_STATUS_E_FAILURE;
13666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013667 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13668 {
13669 wdaStatus = WDA_SuspendDataTx(pWDA);
13670 }
13671 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13672 {
13673 wdaStatus = WDA_ResumeDataTx(pWDA);
13674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 return wdaStatus;
13676}
13677
13678 /* FUNCTION WDA_featureCapsExchange
13679 * WDA API to invoke capability exchange between host and FW.
13680 */
13681void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13682{
13683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013684 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013685 WDI_featureCapsExchangeReq( NULL, pVosContext);
13686}
13687
Yathish9f22e662012-12-10 14:21:35 -080013688/* FUNCTION WDA_disableCapablityFeature
13689 * WDA API to diable Active mode offload in host.
13690 */
13691void WDA_disableCapablityFeature(tANI_U8 feature_index)
13692{
13693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13694 "%s:enter", __func__ );
13695 WDI_disableCapablityFeature(feature_index);
13696}
13697
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 /* FUNCTION WDA_getHostWlanFeatCaps
13699 * Wrapper for WDI API, that will return if the feature (enum value).passed
13700 * to this API is supported or not in Host
13701 * return value
13702 * 0 - implies feature is NOT Supported
13703 * any non zero value - implies feature is SUPPORTED
13704 */
13705tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13706{
13707 return WDI_getHostWlanFeatCaps(featEnumValue);
13708}
13709
13710 /* FUNCTION WDA_getFwWlanFeatCaps
13711 * Wrapper for WDI API, that will return if the feature (enum value).passed
13712 * to this API is supported or not in FW
13713 * return value
13714 * 0 - implies feature is NOT Supported
13715 * any non zero value - implies feature is SUPPORTED
13716 */
13717tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13718{
13719 return WDI_getFwWlanFeatCaps(featEnumValue);
13720}
13721
13722/*
13723 * FUNCTION: WDA_shutdown
13724 * Shutdown WDA/WDI without handshaking with Riva.
13725 * Synchronous function.
13726 */
13727VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13728{
13729 WDI_Status wdiStatus;
13730 //tANI_U8 eventIdx = 0;
13731 VOS_STATUS status = VOS_STATUS_SUCCESS;
13732 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013733 if (NULL == pWDA)
13734 {
13735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013736 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013737 VOS_ASSERT(0);
13738 return VOS_STATUS_E_FAILURE;
13739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 /* FTM mode stay START_STATE */
13741 if( (WDA_READY_STATE != pWDA->wdaState) &&
13742 (WDA_INIT_STATE != pWDA->wdaState) &&
13743 (WDA_START_STATE != pWDA->wdaState) )
13744 {
13745 VOS_ASSERT(0);
13746 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013747
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013748 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13749 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 {
13751 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013752 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013754
Jeff Johnson295189b2012-06-20 16:38:30 -070013755 /* call WDI shutdown */
13756 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013757 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13758 {
13759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13760 "error in WDA Stop" );
13761 status = VOS_STATUS_E_FAILURE;
13762 }
13763 /* WDI stop is synchrnous, shutdown is complete when it returns */
13764 pWDA->wdaState = WDA_STOP_STATE;
13765
Jeff Johnson295189b2012-06-20 16:38:30 -070013766 /* shutdown should perform the stop & close actions. */
13767 /* Destroy the event */
13768 status = vos_event_destroy(&pWDA->txFrameEvent);
13769 if(!VOS_IS_STATUS_SUCCESS(status))
13770 {
13771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13772 "VOS Event destroy failed - status = %d\n", status);
13773 status = VOS_STATUS_E_FAILURE;
13774 }
13775 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13776 if(!VOS_IS_STATUS_SUCCESS(status))
13777 {
13778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13779 "VOS Event destroy failed - status = %d\n", status);
13780 status = VOS_STATUS_E_FAILURE;
13781 }
13782 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13783 if(!VOS_IS_STATUS_SUCCESS(status))
13784 {
13785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13786 "VOS Event destroy failed - status = %d\n", status);
13787 status = VOS_STATUS_E_FAILURE;
13788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 /* free WDA context */
13790 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13791 if ( !VOS_IS_STATUS_SUCCESS(status) )
13792 {
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13794 "error in WDA close " );
13795 status = VOS_STATUS_E_FAILURE;
13796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 return status;
13798}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013799
Jeff Johnsone7245742012-09-05 17:12:55 -070013800/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013801 * FUNCTION: WDA_setNeedShutdown
13802 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013803 */
13804
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013805void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013806{
13807 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013808 if(pWDA == NULL)
13809 {
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13811 "Could not get the WDA Context pointer" );
13812 return;
13813 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013814 pWDA->needShutdown = TRUE;
13815}
13816/*
13817 * FUNCTION: WDA_needShutdown
13818 * WDA needs a shutdown
13819 */
13820
13821v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13822{
13823 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013824 if(pWDA == NULL)
13825 {
13826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13827 "Could not get the WDA Context pointer" );
13828 return 0;
13829 }
13830 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070013831}
13832
Mohit Khanna4a70d262012-09-11 16:30:12 -070013833#ifdef WLAN_FEATURE_11AC
13834/*
13835 * FUNCTION: WDA_SetBeaconFilterReqCallback
13836 *
13837 */
13838void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
13839{
13840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013842 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013843 if(NULL == pWdaParams)
13844 {
13845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013846 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013847 VOS_ASSERT(0) ;
13848 return ;
13849 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013850
Mohit Khanna4a70d262012-09-11 16:30:12 -070013851 vos_mem_free(pWdaParams->wdaMsgParam) ;
13852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13853 vos_mem_free(pWdaParams) ;
13854 /*
13855 * No respone required for SetBeaconFilter req so just free the request
13856 * param here
13857 */
13858
13859 return ;
13860}
13861
13862VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
13863 tUpdateVHTOpMode *pData)
13864{
13865 WDI_Status status = WDI_STATUS_SUCCESS ;
13866 tWDA_ReqParams *pWdaParams ;
13867 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
13868 sizeof(WDI_UpdateVHTOpMode)) ;
13869 if(NULL == wdiTemp)
13870 {
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013872 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013873 VOS_ASSERT(0);
13874 return VOS_STATUS_E_NOMEM;
13875 }
13876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13877 if(NULL == pWdaParams)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013880 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013881 VOS_ASSERT(0);
13882 vos_mem_free(wdiTemp);
13883 return VOS_STATUS_E_NOMEM;
13884 }
13885
13886 wdiTemp->opMode = pData->opMode;
13887 wdiTemp->staId = pData->staId;
13888
13889 pWdaParams->pWdaContext = pWDA;
13890 /* Store Req pointer, as this will be used for response */
13891 pWdaParams->wdaMsgParam = (void *)pData;
13892 /* store Params pass it to WDI */
13893 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
13894
13895 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
13896
13897 if(IS_WDI_STATUS_FAILURE(status))
13898 {
13899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13900 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
13901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13902 vos_mem_free(pWdaParams->wdaMsgParam);
13903 vos_mem_free(pWdaParams);
13904 }
13905 return CONVERT_WDI2VOS_STATUS(status) ;
13906}
13907#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013908
13909/*==========================================================================
13910 FUNCTION WDA_TransportChannelDebug
13911
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070013912 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013913 Display Transport Channel debugging information
13914 User may request to display DXE channel snapshot
13915 Or if host driver detects any abnormal stcuk may display
13916
13917 PARAMETERS
schang6295e542013-03-12 15:31:23 -070013918 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080013919 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013920 enableStallDetect : Enable stall detect feature
13921 This feature will take effect to data performance
13922 Not integrate till fully verification
13923
13924 RETURN VALUE
13925 NONE
13926
13927===========================================================================*/
13928void WDA_TransportChannelDebug
13929(
schang6295e542013-03-12 15:31:23 -070013930 tpAniSirGlobal pMac,
13931 v_BOOL_t displaySnapshot,
13932 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013933)
13934{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070013935 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013936 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013937}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070013938
13939/*==========================================================================
13940 FUNCTION WDA_SetEnableSSR
13941
13942 DESCRIPTION
13943 API to enable/disable SSR on WDI timeout
13944
13945 PARAMETERS
13946 enableSSR : enable/disable SSR
13947
13948 RETURN VALUE
13949 NONE
13950
13951===========================================================================*/
13952void WDA_SetEnableSSR(v_BOOL_t enableSSR)
13953{
13954 WDI_SetEnableSSR(enableSSR);
13955}