blob: 3f98c85cd61f89664b3c5bd8f82837af9641f077 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -08002 * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08003 *
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
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800263 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800271 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800278 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Leo Chang9d76f622013-08-23 16:34:52 -0700505 else
506 {
507 vos_event_init(&wdaContext->ftmStopDoneEvent);
508 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 return status;
510}
511
Jeff Johnson295189b2012-06-20 16:38:30 -0700512/*
513 * FUNCTION: WDA_prepareConfigTLV
514 * Function to prepare CFG for DAL(WDA)
515 */
516VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
517 WDI_StartReqParamsType *wdiStartParams )
518{
519 /* get pMac to acess CFG data base */
520 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
521 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
522 tHalCfg *tlvStruct = NULL ;
523 tANI_U8 *tlvStructStart = NULL ;
524 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
525 v_PVOID_t *configParam;
526 tANI_U32 configParamSize;
527 tANI_U32 *configDataValue;
528 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700529 tANI_U8 i;
530
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 if ((NULL == pMac)||(NULL == wdaContext))
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 VOS_ASSERT(0);
536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
539 WNI_CFG_STA_ID_LEN +
540 WNI_CFG_EDCA_WME_ACBK_LEN +
541 WNI_CFG_EDCA_WME_ACBE_LEN +
542 WNI_CFG_EDCA_WME_ACVI_LEN +
543 WNI_CFG_EDCA_WME_ACVO_LEN +
544 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* malloc memory for all configs in one shot */
546 configParam = vos_mem_malloc(configParamSize);
547
548 if(NULL == configParam )
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700551 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 VOS_ASSERT(0) ;
553 return VOS_STATUS_E_NOMEM;
554 }
555 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 tlvStruct = (tHalCfg *)configParam;
558 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 /* TODO: Remove Later */
560 /* QWLAN_HAL_CFG_STA_ID */
561 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
562 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
563 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
564 eSIR_SUCCESS)
565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
567 "Failed to get value for WNI_CFG_STA_ID");
568 goto handle_failure;
569 }
570 tlvStruct->length = strLength ;
571 /* calculate the pad bytes to have the CFG in aligned format */
572 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
573 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
575 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
577 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
581 != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
590 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
594 eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
603 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
615
616 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
617 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
618 tlvStruct->length = sizeof(tANI_U32);
619 configDataValue = (tANI_U32 *)(tlvStruct + 1);
620 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
621 configDataValue ) != eSIR_SUCCESS)
622 {
623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
624 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
625 goto handle_failure;
626 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
628 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 /* QWLAN_HAL_CFG_CAL_PERIOD */
630 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
631 tlvStruct->length = sizeof(tANI_U32);
632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
633 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
634 != eSIR_SUCCESS)
635 {
636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
637 "Failed to get value for WNI_CFG_CAL_PERIOD");
638 goto handle_failure;
639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
641 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* QWLAN_HAL_CFG_CAL_CONTROL */
643 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
647 != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_CAL_CONTROL");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_PROXIMITY */
656 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_PROXIMITY");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
669 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
682 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
686 eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
695 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
699 configDataValue ) != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
708 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
721 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
725 eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
734 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
747 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
760 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
764 configDataValue ) != eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length));
772
773 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
774 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
778 configDataValue ) != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
787 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
791 configDataValue ) != eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
799
800 /* QWLAN_HAL_CFG_FIXED_RATE */
801 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
802 tlvStruct->length = sizeof(tANI_U32);
803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
804 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
805 != eSIR_SUCCESS)
806 {
807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
808 "Failed to get value for WNI_CFG_FIXED_RATE");
809 goto handle_failure;
810 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
812 + sizeof(tHalCfg) + tlvStruct->length));
813
814 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
815 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
829 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
833 configDataValue ) != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
842 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
850 goto handle_failure;
851 }
852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
855 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
868 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
881 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
893
894#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
908#endif
909 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
923 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
935
936 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
976 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
989 /* QWLAN_HAL_CFG_STATS_PERIOD */
990 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_STATS_PERIOD");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1003 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1007 eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1016 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1020 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1024 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1025 tlvStruct->length = sizeof(tANI_U32);
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1028 != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1032 goto handle_failure;
1033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1035 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1037 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1038 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1040 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1041 &strLength) != eSIR_SUCCESS)
1042 {
1043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1044 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1045 goto handle_failure;
1046 }
1047 tlvStruct->length = strLength;
1048 /* calculate the pad bytes to have the CFG in aligned format */
1049 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1050 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1054 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1055 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1058 &strLength) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1062 goto handle_failure;
1063 }
1064 tlvStruct->length = strLength;
1065 /* calculate the pad bytes to have the CFG in aligned format */
1066 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1067 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1071 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1072 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1075 &strLength) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1079 goto handle_failure;
1080 }
1081 tlvStruct->length = strLength;
1082 /* calculate the pad bytes to have the CFG in aligned format */
1083 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1084 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1086 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001087 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1088 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1089 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1092 &strLength) != eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1096 goto handle_failure;
1097 }
1098 tlvStruct->length = strLength;
1099 /* calculate the pad bytes to have the CFG in aligned format */
1100 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1101 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1105 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1118 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1131 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1222 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1235 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1248 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1249 * into FW, so the parameters are added here.
1250 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1266 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
Wilson Tsaof8b37942013-09-06 10:49:00 -07001376 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1377 {
1378 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1379 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1387 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1395 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409 }
1410
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418
1419 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1420 {
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428 }
1429
1430 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1431 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
1437
Jeff Johnson32d95a32012-09-10 13:15:23 -07001438 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1443 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1444 wcnssCompiledApiVersion.minor,
1445 wcnssCompiledApiVersion.version,
1446 wcnssCompiledApiVersion.revision);
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
Jeff Johnsond13512a2012-07-17 11:42:19 -07001450 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1465 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1469 configDataValue ) != eSIR_SUCCESS)
1470 {
1471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1472 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1473 goto handle_failure;
1474 }
1475
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1480 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1484 != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001494 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1495 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001508#ifdef WLAN_SOFTAP_VSTA_FEATURE
1509 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522#endif
1523
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001524 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1525 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528
1529 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1530 != eSIR_SUCCESS)
1531 {
1532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1533 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1534 goto handle_failure;
1535 }
1536
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301540/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1541 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1545 configDataValue ) != eSIR_SUCCESS)
1546 {
1547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1548 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1549 goto handle_failure;
1550 }
1551
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301554#ifdef FEATURE_WLAN_TDLS
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301609
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001610 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1611 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1615 configDataValue ) != eSIR_SUCCESS)
1616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1619 goto handle_failure;
1620 }
1621
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001624
1625 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1626 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1630 != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1634 goto handle_failure;
1635 }
1636 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length));
1638
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301639 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1640 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301654 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1655 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1663 goto handle_failure;
1664 }
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301668 /* QWLAN_HAL_CFG_ATH_DISABLE */
1669 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1673 configDataValue ) != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ATH_DISABLE");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length) ;
1681
c_hpothu6d7dc922013-12-02 12:36:41 +05301682 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1683 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1691 goto handle_failure;
1692 }
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
1695
1696 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1697 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1701 configDataValue ) != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1705 goto handle_failure;
1706 }
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709
1710 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1711 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1715 configDataValue ) != eSIR_SUCCESS)
1716 {
1717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1718 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1719 goto handle_failure;
1720 }
1721 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1722 + sizeof(tHalCfg) + tlvStruct->length) ;
1723
1724 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1725 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1726 tlvStruct->length = sizeof(tANI_U32);
1727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1728 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1729 configDataValue ) != eSIR_SUCCESS)
1730 {
1731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1732 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1733 goto handle_failure;
1734 }
1735 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1736 + sizeof(tHalCfg) + tlvStruct->length) ;
1737
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301738 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1739 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1740 tlvStruct->length = sizeof(tANI_U32);
1741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1742 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1743 configDataValue ) != eSIR_SUCCESS)
1744 {
1745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1746 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1747 goto handle_failure;
1748 }
1749 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1750 + sizeof(tHalCfg) + tlvStruct->length) ;
1751
1752 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1753 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1754 tlvStruct->length = sizeof(tANI_U32);
1755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1756 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1757 configDataValue ) != eSIR_SUCCESS)
1758 {
1759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1760 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1761 goto handle_failure;
1762 }
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
1766 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1767 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001781#ifdef WLAN_DEBUG
1782 {
1783 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001784 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1785 "****** Dumping CFG TLV ***** ");
1786 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1787 {
1788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1789 "%02x %02x %02x %02x %02x %02x %02x %02x",
1790 tlvStructStart[i],
1791 tlvStructStart[i+1],
1792 tlvStructStart[i+2],
1793 tlvStructStart[i+3],
1794 tlvStructStart[i+4],
1795 tlvStructStart[i+5],
1796 tlvStructStart[i+6],
1797 tlvStructStart[i+7]);
1798 }
1799 /* Dump the bytes in the last line*/
1800 for (; i < wdiStartParams->usConfigBufferLen; i++)
1801 {
1802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1803 "%02x ",tlvStructStart[i]);
1804 }
1805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1806 "**************************** ");
1807 }
1808#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001810handle_failure:
1811 vos_mem_free(configParam);
1812 return VOS_STATUS_E_FAILURE;
1813}
Jeff Johnson295189b2012-06-20 16:38:30 -07001814/*
1815 * FUNCTION: WDA_wdiCompleteCB
1816 * call the voss call back function
1817 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001818void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001819{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1821 tWDA_CbContext *wdaContext;
1822
1823 if(NULL == pWdaParams)
1824 {
1825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001826 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001827 VOS_ASSERT(0) ;
1828 return ;
1829 }
1830
1831 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1832
Jeff Johnson295189b2012-06-20 16:38:30 -07001833 if (NULL == wdaContext)
1834 {
1835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001836 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001837 return ;
1838 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001839
Jeff Johnson295189b2012-06-20 16:38:30 -07001840 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001841 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001842 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001844 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001845 vos_mem_free(pWdaParams);
1846
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if(WDI_STATUS_SUCCESS != status)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1850 "WDI stop callback returned failure" );
1851 VOS_ASSERT(0) ;
1852 }
1853 else
1854 {
1855 wdaContext->wdaState = WDA_STOP_STATE;
1856 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001857
Leo Chang9d76f622013-08-23 16:34:52 -07001858 /* FTM Driver stop procedure should be synced.
1859 * Stop and Close will happen on same context */
1860 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1861 {
1862 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1863 {
1864 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1865 "%s: FTM Stop Event Set Fail", __func__);
1866 VOS_ASSERT(0);
1867 }
1868 }
1869
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001871 vos_WDAComplete_cback(wdaContext->pVosContext);
1872
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 return ;
1874}
Jeff Johnson295189b2012-06-20 16:38:30 -07001875/*
1876 * FUNCTION: WDA_stop
1877 * call WDI_stop
1878 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001879VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1880{
1881 WDI_Status wdiStatus;
1882 VOS_STATUS status = VOS_STATUS_SUCCESS;
1883 WDI_StopReqParamsType *wdiStopReq;
1884 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001885 tWDA_ReqParams *pWdaParams ;
1886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 if (NULL == pWDA)
1888 {
1889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001890 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 VOS_ASSERT(0);
1892 return VOS_STATUS_E_FAILURE;
1893 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001894 if (pWDA->wdiFailed == true)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001897 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001898 return VOS_STATUS_E_ALREADY;
1899 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001900
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 /* FTM mode stay START_STATE */
1902 if( (WDA_READY_STATE != pWDA->wdaState) &&
1903 (WDA_INIT_STATE != pWDA->wdaState) &&
1904 (WDA_START_STATE != pWDA->wdaState) )
1905 {
1906 VOS_ASSERT(0);
1907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001908 wdiStopReq = (WDI_StopReqParamsType *)
1909 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1910 if(NULL == wdiStopReq)
1911 {
1912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001914 VOS_ASSERT(0);
1915 return VOS_STATUS_E_NOMEM;
1916 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001917
Jeff Johnson295189b2012-06-20 16:38:30 -07001918 wdiStopReq->wdiStopReason = reason;
1919 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001920
1921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1922 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001923 {
1924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001926 VOS_ASSERT(0);
1927 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001928 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001930
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001931 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1932 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001933 {
1934 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001935 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001937
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001938 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1939 pWdaParams->wdaMsgParam = NULL;
1940 pWdaParams->pWdaContext = pWDA;
1941
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 /* call WDI stop */
1943 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001944 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1945
Jeff Johnson295189b2012-06-20 16:38:30 -07001946 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1951 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 status = VOS_STATUS_E_FAILURE;
1953 }
Leo Chang9d76f622013-08-23 16:34:52 -07001954
1955 /* FTM Driver stop procedure should be synced.
1956 * Stop and Close will happen on same context */
1957 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1958 {
1959 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1960 WDI_RESPONSE_TIMEOUT);
1961 if (status != VOS_STATUS_SUCCESS)
1962 {
1963 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1964 "%s: FTM Stop Timepoout", __func__);
1965 VOS_ASSERT(0);
1966 vos_event_reset(&pWDA->ftmStopDoneEvent);
1967 }
1968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001969 return status;
1970}
Jeff Johnson295189b2012-06-20 16:38:30 -07001971/*
1972 * FUNCTION: WDA_close
1973 * call WDI_close and free the WDA context
1974 */
1975VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1976{
Jeff Johnson43971f52012-07-17 12:26:56 -07001977 VOS_STATUS status = VOS_STATUS_SUCCESS;
1978 WDI_Status wstatus;
1979 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001980 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 if (NULL == wdaContext)
1982 {
1983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001984 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001985 return VOS_STATUS_E_FAILURE;
1986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1988 (WDA_STOP_STATE != wdaContext->wdaState))
1989 {
1990 VOS_ASSERT(0);
1991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001993 wstatus = WDI_Close();
1994 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 {
1996 status = VOS_STATUS_E_FAILURE;
1997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002000 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2001 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 {
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002004 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 status = VOS_STATUS_E_FAILURE;
2006 }
2007
Jeff Johnson43971f52012-07-17 12:26:56 -07002008 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002009 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 {
2011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002012 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 status = VOS_STATUS_E_FAILURE;
2014 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002015 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002016 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002019 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 status = VOS_STATUS_E_FAILURE;
2021 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002022 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002023 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002026 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 status = VOS_STATUS_E_FAILURE;
2028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002030 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002031 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2034 "error in WDA close " );
2035 status = VOS_STATUS_E_FAILURE;
2036 }
2037 return status;
2038}
Jeff Johnson295189b2012-06-20 16:38:30 -07002039/*
2040 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2041 * returns 1 if the compiled version is greater than or equal to the input version
2042 */
2043
2044uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2045{
2046 VOS_STATUS status = VOS_STATUS_SUCCESS;
2047 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2048 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2051 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2052 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2053 (compiledVersion.revision >= revision)))
2054 return 1;
2055 else
2056 return 0;
2057}
Jeff Johnson295189b2012-06-20 16:38:30 -07002058/*
2059 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2060 * returns 1 if the compiled version is greater than or equal to the input version
2061 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002062uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2063{
2064 VOS_STATUS status = VOS_STATUS_SUCCESS;
2065 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2066 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2069 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2070 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2071 (reportedVersion.revision >= revision)))
2072 return 1;
2073 else
2074 return 0;
2075}
Jeff Johnson295189b2012-06-20 16:38:30 -07002076/*
2077 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2078 * Returns the version of the WCNSS WLAN API with which the HOST
2079 * device driver was compiled
2080 */
2081VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2082 tSirVersionType *pVersion)
2083{
2084 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002086 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 if ((NULL == pvosGCtx) || (NULL == pVersion))
2088 {
2089 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002090 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 VOS_ASSERT(0);
2092 return VOS_STATUS_E_FAILURE;
2093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2095 if (NULL == pWDA )
2096 {
2097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002098 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 VOS_ASSERT(0);
2100 return VOS_STATUS_E_FAILURE;
2101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 *pVersion = pWDA->wcnssWlanCompiledVersion;
2103 return VOS_STATUS_SUCCESS;
2104}
Jeff Johnson295189b2012-06-20 16:38:30 -07002105/*
2106 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2107 * Returns the version of the WCNSS WLAN API with which the WCNSS
2108 * device driver was compiled
2109 */
2110VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2111 tSirVersionType *pVersion)
2112{
2113 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002115 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 if ((NULL == pvosGCtx) || (NULL == pVersion))
2117 {
2118 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002119 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002120 VOS_ASSERT(0);
2121 return VOS_STATUS_E_FAILURE;
2122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002123 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2124 if (NULL == pWDA )
2125 {
2126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002127 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002128 VOS_ASSERT(0);
2129 return VOS_STATUS_E_FAILURE;
2130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 *pVersion = pWDA->wcnssWlanReportedVersion;
2132 return VOS_STATUS_SUCCESS;
2133}
Jeff Johnson295189b2012-06-20 16:38:30 -07002134/*
2135 * FUNCTION: WDA_GetWcnssSoftwareVersion
2136 * Returns the WCNSS Software version string
2137 */
2138VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2139 tANI_U8 *pVersion,
2140 tANI_U32 versionBufferSize)
2141{
2142 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002144 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 if ((NULL == pvosGCtx) || (NULL == pVersion))
2146 {
2147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002148 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 VOS_ASSERT(0);
2150 return VOS_STATUS_E_FAILURE;
2151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002152 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2153 if (NULL == pWDA )
2154 {
2155 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002156 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_ASSERT(0);
2158 return VOS_STATUS_E_FAILURE;
2159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2161 return VOS_STATUS_SUCCESS;
2162}
Jeff Johnson295189b2012-06-20 16:38:30 -07002163/*
2164 * FUNCTION: WDA_GetWcnssHardwareVersion
2165 * Returns the WCNSS Hardware version string
2166 */
2167VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2168 tANI_U8 *pVersion,
2169 tANI_U32 versionBufferSize)
2170{
2171 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002173 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 if ((NULL == pvosGCtx) || (NULL == pVersion))
2175 {
2176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002177 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002178 VOS_ASSERT(0);
2179 return VOS_STATUS_E_FAILURE;
2180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2182 if (NULL == pWDA )
2183 {
2184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002185 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 VOS_ASSERT(0);
2187 return VOS_STATUS_E_FAILURE;
2188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2190 return VOS_STATUS_SUCCESS;
2191}
Jeff Johnson295189b2012-06-20 16:38:30 -07002192/*
2193 * FUNCTION: WDA_WniCfgDnld
2194 * Trigger CFG Download
2195 */
2196VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2197{
2198 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 v_VOID_t *pFileImage = NULL;
2201 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 v_VOID_t *pCfgBinary = NULL;
2203 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002205
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 if (NULL == pMac )
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 VOS_ASSERT(0);
2211 return VOS_STATUS_E_FAILURE;
2212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 /* get the number of bytes in the CFG Binary... */
2214 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2215 &cbFileImageSize );
2216 if ( VOS_STATUS_E_NOMEM != vosStatus )
2217 {
2218 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2219 "Error obtaining binary size" );
2220 goto fail;
2221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 // malloc a buffer to read in the Configuration binary file.
2223 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 if ( NULL == pFileImage )
2225 {
2226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2227 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2228 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 vosStatus = VOS_STATUS_E_NOMEM;
2230 goto fail;
2231 }
2232
2233 /* Get the entire CFG file image... */
2234 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2235 &cbFileImageSize );
2236 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2237 {
2238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2239 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2240 cbFileImageSize );
2241 goto fail;
2242 }
2243
2244 /*
2245 * Validate the binary image. This function will return a pointer
2246 * and length where the CFG binary is located within the binary image file.
2247 */
2248 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2249 &pCfgBinary, &cbCfgBinarySize );
2250 if ( VOS_FALSE == bStatus )
2251 {
2252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2253 "Error: Cannot find STA CFG in binary image file" );
2254 vosStatus = VOS_STATUS_E_FAILURE;
2255 goto fail;
2256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 /*
2258 * TODO: call the config download function
2259 * for now calling the existing cfg download API
2260 */
2261 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002262 vosStatus = VOS_STATUS_SUCCESS;
2263
2264 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002265
2266fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002267 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 return vosStatus;
2269}
Jeff Johnson295189b2012-06-20 16:38:30 -07002270/* -----------------------------------------------------------------
2271 * WDI interface
2272 * -----------------------------------------------------------------
2273 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002274/*
2275 * FUNCTION: WDA_suspendDataTxCallback
2276 * call back function called from TL after suspend Transmission
2277 */
2278VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2279 v_U8_t* ucSTAId,
2280 VOS_STATUS vosStatus)
2281{
2282 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002284 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 if (NULL == pWDA )
2286 {
2287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 VOS_ASSERT(0);
2290 return VOS_STATUS_E_FAILURE;
2291 }
2292 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2293 {
2294 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2295 }
2296 else
2297 {
2298 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 /* Trigger the event to bring the WDA TL suspend function to come
2301 * out of wait*/
2302 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2303 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002306 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 /* If TL suspended had timedout before this callback was called, resume back
2309 * TL.*/
2310 if (pWDA->txSuspendTimedOut)
2311 {
2312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002313 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 WDA_ResumeDataTx(pWDA);
2315 pWDA->txSuspendTimedOut = FALSE;
2316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 return VOS_STATUS_SUCCESS;
2318}
Jeff Johnson295189b2012-06-20 16:38:30 -07002319/*
2320 * FUNCTION: WDA_suspendDataTx
2321 * Update TL to suspend the data Transmission
2322 */
2323VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2324{
2325 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2326 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327
2328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002329 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 if (pWDA->txSuspendTimedOut)
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002334 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002335 return status;
2336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 /* Reset the event to be not signalled */
2338 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2339 if(!VOS_IS_STATUS_SUCCESS(status))
2340 {
2341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002342 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 return VOS_STATUS_E_FAILURE;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002346 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 WDA_SuspendDataTxCallback);
2348 if(status != VOS_STATUS_SUCCESS)
2349 {
2350 return status;
2351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 /* Wait for the event to be set by the TL, to get the response of
2353 * suspending the TX queues, this event should be set by the Callback
2354 * function called by TL*/
2355 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2356 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2357 if(!VOS_IS_STATUS_SUCCESS(status))
2358 {
2359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2360 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002361 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 /* Set this flag to true when TL suspend times out, so that when TL
2363 * suspend eventually happens and calls the callback, TL can be resumed
2364 * right away by looking at this flag when true.*/
2365 pWDA->txSuspendTimedOut = TRUE;
2366 }
2367 else
2368 {
2369 pWDA->txSuspendTimedOut = FALSE;
2370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2372 {
2373 status = VOS_STATUS_SUCCESS;
2374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 return status;
2376}
Jeff Johnson295189b2012-06-20 16:38:30 -07002377/*
2378 * FUNCTION: WDA_resumeDataTx
2379 * Update TL to resume the data Transmission
2380 */
2381VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2382{
2383 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002384
2385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002386 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002387
2388 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 return status;
2390}
Jeff Johnson295189b2012-06-20 16:38:30 -07002391/*
2392 * FUNCTION: WDA_InitScanReqCallback
2393 * Trigger Init SCAN callback
2394 */
2395void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2396{
2397 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2398 tWDA_CbContext *pWDA;
2399 tInitScanParams *pWDA_ScanParam ;
2400 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 if(NULL == pWdaParams)
2404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002406 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 VOS_ASSERT(0) ;
2408 return ;
2409 }
2410 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2411 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 if(NULL == pWDA_ScanParam)
2413 {
2414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002415 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002416 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2418 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 return ;
2420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 if(WDI_STATUS_SUCCESS != wdiStatus)
2422 {
2423 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if(VOS_STATUS_SUCCESS != status)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 }
2429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 /* free WDI command buffer */
2431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002433
Jeff Johnson295189b2012-06-20 16:38:30 -07002434
2435 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002436 /* without converting the Status to Failure or Success Just
2437 pass the same status to lim */
2438 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 /* send SCAN RSP message back to PE */
2440 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 return ;
2442}
2443
2444/*
2445 * FUNCTION: WDA_ProcessInitScanReq
2446 * Trigger Init SCAN in DAL
2447 */
2448VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2449 tInitScanParams *initScanParams)
2450{
2451 WDI_Status status = WDI_STATUS_SUCCESS ;
2452 WDI_InitScanReqParamsType *wdiInitScanParam =
2453 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2454 sizeof(WDI_InitScanReqParamsType)) ;
2455 tWDA_ReqParams *pWdaParams;
2456 tANI_U8 i = 0;
2457
2458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002459 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 if(NULL == wdiInitScanParam)
2461 {
2462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002463 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_ASSERT(0);
2465 return VOS_STATUS_E_NOMEM;
2466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2468 if(NULL == pWdaParams)
2469 {
2470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 VOS_ASSERT(0);
2473 vos_mem_free(wdiInitScanParam);
2474 return VOS_STATUS_E_NOMEM;
2475 }
2476
2477 /* Copy init Scan params to WDI structure */
2478 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2479 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2480 sizeof(tSirMacAddr)) ;
2481 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2482 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2483 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2485 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2487 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2489 {
2490 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2491 initScanParams->scanEntry.bssIdx[i] ;
2492 }
2493
2494 /* if Frame length, copy macMgmtHdr or WDI structure */
2495 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2496 {
2497 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2498 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2499 }
2500 wdiInitScanParam->wdiReqStatusCB = NULL ;
2501
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 /* Store Init Req pointer, as this will be used for response */
2503 pWdaParams->pWdaContext = pWDA;
2504 pWdaParams->wdaMsgParam = initScanParams;
2505 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 /* first try to suspend TX */
2507 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 if(WDI_STATUS_SUCCESS != status)
2509 {
2510 goto handleWdiFailure;
2511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 /* call DAL API to pass init scan request to DAL */
2513 status = WDI_InitScanReq(wdiInitScanParam,
2514 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 if(IS_WDI_STATUS_FAILURE(status))
2516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2518 "error in WDA Init Scan, Resume Tx " );
2519 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0) ;
2521
2522 goto handleWdiFailure;
2523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002525handleWdiFailure:
2526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2527 "Failure in WDI Api, free all the memory " );
2528 /* free WDI command buffer */
2529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2530 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002531 /* send Failure to PE */
2532 initScanParams->status = eSIR_FAILURE ;
2533 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 return CONVERT_WDI2VOS_STATUS(status) ;
2535}
2536
Jeff Johnson295189b2012-06-20 16:38:30 -07002537/*
2538 * FUNCTION: WDA_StartScanReqCallback
2539 * send Start SCAN RSP back to PE
2540 */
2541void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2542 void* pUserData)
2543{
2544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2545 tWDA_CbContext *pWDA;
2546 tStartScanParams *pWDA_ScanParam;
2547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 if(NULL == pWdaParams)
2550 {
2551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 VOS_ASSERT(0) ;
2554 return ;
2555 }
2556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2557 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 if(NULL == pWDA_ScanParam)
2559 {
2560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002561 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002563 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 return ;
2565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2567 {
2568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002569 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002571 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 return ;
2573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2575 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002576
Jeff Johnson295189b2012-06-20 16:38:30 -07002577
2578 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002579 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 /* send SCAN RSP message back to PE */
2581 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 return ;
2583}
2584
Jeff Johnson295189b2012-06-20 16:38:30 -07002585/*
2586 * FUNCTION: WDA_ProcessStartScanReq
2587 * Trigger start SCAN in WDI
2588 */
2589VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2590 tStartScanParams *startScanParams)
2591{
2592 WDI_Status status = WDI_STATUS_SUCCESS;
2593 WDI_StartScanReqParamsType *wdiStartScanParams =
2594 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2595 sizeof(WDI_StartScanReqParamsType)) ;
2596 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002598 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 if(NULL == wdiStartScanParams)
2600 {
2601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 VOS_ASSERT(0);
2604 return VOS_STATUS_E_NOMEM;
2605 }
2606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2607 if(NULL == pWdaParams)
2608 {
2609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_ASSERT(0);
2612 vos_mem_free(wdiStartScanParams);
2613 return VOS_STATUS_E_NOMEM;
2614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 /* Copy init Scan params to WDI structure */
2616 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2617 wdiStartScanParams->wdiReqStatusCB = NULL ;
2618
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 /* Store Init Req pointer, as this will be used for response */
2620 /* store Params pass it to WDI */
2621 pWdaParams->pWdaContext = pWDA;
2622 pWdaParams->wdaMsgParam = startScanParams;
2623 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 /* call DAL API to pass init scan request to DAL */
2625 status = WDI_StartScanReq(wdiStartScanParams,
2626 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 /* failure returned by WDI API */
2628 if(IS_WDI_STATUS_FAILURE(status))
2629 {
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2631 "Failure in Start Scan WDI API, free all the memory "
2632 "It should be due to previous abort scan." );
2633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2634 vos_mem_free(pWdaParams) ;
2635 startScanParams->status = eSIR_FAILURE ;
2636 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 return CONVERT_WDI2VOS_STATUS(status) ;
2639}
Jeff Johnson295189b2012-06-20 16:38:30 -07002640/*
2641 * FUNCTION: WDA_EndScanReqCallback
2642 * END SCAN callback
2643 */
2644void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2645{
2646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2647 tWDA_CbContext *pWDA;
2648 tEndScanParams *endScanParam;
2649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002650 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 VOS_ASSERT(0) ;
2656 return ;
2657 }
2658 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2659 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 if(NULL == endScanParam)
2661 {
2662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2666 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 return ;
2668 }
2669
2670 /* Free WDI command buffer */
2671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2672 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002674 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 /* send response back to PE */
2676 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2677 return ;
2678}
2679
Jeff Johnson295189b2012-06-20 16:38:30 -07002680/*
2681 * FUNCTION: WDA_ProcessEndScanReq
2682 * Trigger END SCAN in WDI
2683 */
2684VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2685 tEndScanParams *endScanParams)
2686{
2687 WDI_Status status = WDI_STATUS_SUCCESS;
2688 WDI_EndScanReqParamsType *wdiEndScanParams =
2689 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2690 sizeof(WDI_EndScanReqParamsType)) ;
2691 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002693 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 if(NULL == wdiEndScanParams)
2695 {
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 VOS_ASSERT(0);
2699 return VOS_STATUS_E_NOMEM;
2700 }
2701 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2702 if(NULL == pWdaParams)
2703 {
2704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_ASSERT(0);
2707 vos_mem_free(wdiEndScanParams);
2708 return VOS_STATUS_E_NOMEM;
2709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 /* Copy init Scan params to WDI structure */
2711 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2712 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 /* Store Init Req pointer, as this will be used for response */
2714 /* store Params pass it to WDI */
2715 pWdaParams->pWdaContext = pWDA;
2716 pWdaParams->wdaMsgParam = endScanParams;
2717 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 /* call DAL API to pass init scan request to DAL */
2719 status = WDI_EndScanReq(wdiEndScanParams,
2720 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 if(IS_WDI_STATUS_FAILURE(status))
2722 {
2723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2724 "Failure in End Scan WDI API, free all the memory "
2725 "It should be due to previous abort scan." );
2726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2727 vos_mem_free(pWdaParams) ;
2728 endScanParams->status = eSIR_FAILURE ;
2729 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 return CONVERT_WDI2VOS_STATUS(status) ;
2732}
Jeff Johnson295189b2012-06-20 16:38:30 -07002733/*
2734 * FUNCTION: WDA_FinishScanReqCallback
2735 * Trigger Finish SCAN callback
2736 */
2737void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2738{
2739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2740 tWDA_CbContext *pWDA;
2741 tFinishScanParams *finishScanParam;
2742 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002744 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 if(NULL == pWdaParams)
2746 {
2747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 VOS_ASSERT(0) ;
2750 return ;
2751 }
2752
2753 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2754 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 if(NULL == finishScanParam)
2756 {
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2761 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 return ;
2763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2765 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 /*
2767 * Now Resume TX, if we reached here means, TX is already suspended, we
2768 * have to resume it unconditionaly
2769 */
2770 status = WDA_ResumeDataTx(pWDA) ;
2771
2772 if(VOS_STATUS_SUCCESS != status)
2773 {
2774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002777 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2779 return ;
2780}
Jeff Johnson295189b2012-06-20 16:38:30 -07002781/*
2782 * FUNCTION: WDA_ProcessFinshScanReq
2783 * Trigger Finish SCAN in WDI
2784 */
2785VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2786 tFinishScanParams *finishScanParams)
2787{
2788 WDI_Status status = WDI_STATUS_SUCCESS;
2789 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2790 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2791 sizeof(WDI_FinishScanReqParamsType)) ;
2792 tWDA_ReqParams *pWdaParams ;
2793 tANI_U8 i = 0;
2794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002795 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 if(NULL == wdiFinishScanParams)
2797 {
2798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 VOS_ASSERT(0);
2801 return VOS_STATUS_E_NOMEM;
2802 }
2803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2804 if(NULL == pWdaParams)
2805 {
2806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 VOS_ASSERT(0);
2809 vos_mem_free(wdiFinishScanParams);
2810 return VOS_STATUS_E_NOMEM;
2811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 /* Copy init Scan params to WDI structure */
2813 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2814 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2815 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2817 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2818 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2819 finishScanParams->frameLength ;
2820 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2821 finishScanParams->currentOperChannel ;
2822 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2823 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2824 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2826 {
2827 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2828 finishScanParams->scanEntry.bssIdx[i] ;
2829 }
2830
2831
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 /* if Frame length, copy macMgmtHdr ro WDI structure */
2833 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2834 {
2835 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2836 &finishScanParams->macMgmtHdr,
2837 sizeof(WDI_MacMgmtHdr)) ;
2838 }
2839 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 /* Store Init Req pointer, as this will be used for response */
2841 /* store Params pass it to WDI */
2842 pWdaParams->pWdaContext = pWDA;
2843 pWdaParams->wdaMsgParam = finishScanParams;
2844 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 /* call DAL API to pass init scan request to DAL */
2846 status = WDI_FinishScanReq(wdiFinishScanParams,
2847 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849
2850 /*
2851 * WDI API returns failure..
2852 */
2853 if(IS_WDI_STATUS_FAILURE( status))
2854 {
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2856 "Failure in Finish Scan WDI API, free all the memory " );
2857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2858 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 finishScanParams->status = eSIR_FAILURE ;
2860 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 return CONVERT_WDI2VOS_STATUS(status) ;
2863}
Jeff Johnson295189b2012-06-20 16:38:30 -07002864/*---------------------------------------------------------------------
2865 * ASSOC API's
2866 *---------------------------------------------------------------------
2867 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002868/*
2869 * FUNCTION: WDA_JoinReqCallback
2870 * Trigger Init SCAN callback
2871 */
2872void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2873{
2874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2875 tWDA_CbContext *pWDA;
2876 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 if(NULL == pWdaParams)
2880 {
2881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 VOS_ASSERT(0) ;
2884 return ;
2885 }
2886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2887 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2889 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 /* reset macBSSID */
2891 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 /* reset macSTASelf */
2893 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002894 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 return ;
2897}
Jeff Johnson295189b2012-06-20 16:38:30 -07002898/*
2899 * FUNCTION: WDA_ProcessJoinReq
2900 * Trigger Join REQ in WDI
2901 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002902VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2903 tSwitchChannelParams* joinReqParam)
2904{
2905 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 WDI_JoinReqParamsType *wdiJoinReqParam =
2907 (WDI_JoinReqParamsType *)vos_mem_malloc(
2908 sizeof(WDI_JoinReqParamsType)) ;
2909 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 if(NULL == wdiJoinReqParam)
2913 {
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002917 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 return VOS_STATUS_E_NOMEM;
2919 }
2920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2921 if(NULL == pWdaParams)
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0);
2926 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002927 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 return VOS_STATUS_E_NOMEM;
2929 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002930
2931 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2932 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2933 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2934 {
2935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2936 "%s: received join request when BSSID or self-STA is NULL "
2937 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002939 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2940 VOS_ASSERT(0);
2941 vos_mem_free(wdiJoinReqParam);
2942 vos_mem_free(pWdaParams);
2943 joinReqParam->status = eSIR_FAILURE ;
2944 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2945 return VOS_STATUS_E_INVAL;
2946 }
2947
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 /* copy the BSSID for pWDA */
2949 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2950 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2952 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2954 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002955#ifdef WLAN_FEATURE_VOWIFI
2956 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2957 joinReqParam->maxTxPower ;
2958#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2960 joinReqParam->localPowerConstraint ;
2961#endif
2962 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2963 joinReqParam->secondaryChannelOffset ;
2964 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2965
2966 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 /* Store Init Req pointer, as this will be used for response */
2968 /* store Params pass it to WDI */
2969 pWdaParams->pWdaContext = pWDA;
2970 pWdaParams->wdaMsgParam = joinReqParam;
2971 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 status = WDI_JoinReq(wdiJoinReqParam,
2973 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 if(IS_WDI_STATUS_FAILURE(status))
2975 {
2976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2977 "Failure in Join WDI API, free all the memory " );
2978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2979 vos_mem_free(pWdaParams) ;
2980 joinReqParam->status = eSIR_FAILURE ;
2981 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 return CONVERT_WDI2VOS_STATUS(status) ;
2984}
Jeff Johnson295189b2012-06-20 16:38:30 -07002985/*
2986 * FUNCTION: WDA_SwitchChannelReqCallback
2987 * send Switch channel RSP back to PE
2988 */
2989void WDA_SwitchChannelReqCallback(
2990 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2991{
2992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2993 tWDA_CbContext *pWDA;
2994 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 if(NULL == pWdaParams)
2998 {
2999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003000 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 VOS_ASSERT(0) ;
3002 return ;
3003 }
3004 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3005 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3006
3007#ifdef WLAN_FEATURE_VOWIFI
3008 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3009#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3011 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003013 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 return ;
3016}
Jeff Johnson295189b2012-06-20 16:38:30 -07003017/*
3018 * FUNCTION: WDA_ProcessChannelSwitchReq
3019 * Request to WDI to switch channel REQ params.
3020 */
3021VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3022 tSwitchChannelParams *pSwitchChanParams)
3023{
3024 WDI_Status status = WDI_STATUS_SUCCESS ;
3025 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3026 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3027 sizeof(WDI_SwitchChReqParamsType)) ;
3028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 if(NULL == wdiSwitchChanParam)
3032 {
3033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 VOS_ASSERT(0);
3036 return VOS_STATUS_E_NOMEM;
3037 }
3038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3039 if(NULL == pWdaParams)
3040 {
3041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 VOS_ASSERT(0);
3044 vos_mem_free(wdiSwitchChanParam);
3045 return VOS_STATUS_E_NOMEM;
3046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003047 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3048#ifndef WLAN_FEATURE_VOWIFI
3049 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3050 pSwitchChanParams->localPowerConstraint;
3051#endif
3052 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3053 pSwitchChanParams->secondaryChannelOffset;
3054 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 /* Store req pointer, as this will be used for response */
3056 /* store Params pass it to WDI */
3057 pWdaParams->pWdaContext = pWDA;
3058 pWdaParams->wdaMsgParam = pSwitchChanParams;
3059 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060#ifdef WLAN_FEATURE_VOWIFI
3061 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3062 = pSwitchChanParams->maxTxPower;
3063 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3064 pSwitchChanParams ->selfStaMacAddr,
3065 sizeof(tSirMacAddr));
3066#endif
3067 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3068 pSwitchChanParams->bssId,
3069 sizeof(tSirMacAddr));
3070
3071 status = WDI_SwitchChReq(wdiSwitchChanParam,
3072 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 if(IS_WDI_STATUS_FAILURE(status))
3074 {
3075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3076 "Failure in process channel switch Req WDI API, free all the memory " );
3077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3078 vos_mem_free(pWdaParams) ;
3079 pSwitchChanParams->status = eSIR_FAILURE ;
3080 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 return CONVERT_WDI2VOS_STATUS(status) ;
3083}
Jeff Johnson295189b2012-06-20 16:38:30 -07003084/*
3085 * FUNCTION: WDA_ConfigBssReqCallback
3086 * config BSS Req Callback, called by WDI
3087 */
3088void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3089 ,void* pUserData)
3090{
3091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3092 tWDA_CbContext *pWDA;
3093 tAddBssParams *configBssReqParam;
3094 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 if(NULL == pWdaParams)
3098 {
3099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 VOS_ASSERT(0) ;
3102 return ;
3103 }
3104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3105 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3106 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003108 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3110 {
3111 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3112 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3114 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3115 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3116
3117 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3118 {
3119 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3120 {
3121 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3122 staConfigBssParam->staType = STA_ENTRY_BSSID;
3123 }
3124 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3125 (staConfigBssParam->staType == STA_ENTRY_SELF))
3126 {
3127 /* This is the 1st add BSS Req for the BTAMP STA */
3128 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3129 staConfigBssParam->staType = STA_ENTRY_BSSID;
3130 }
3131 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3132 (staConfigBssParam->staType == STA_ENTRY_PEER))
3133 {
3134 /* This is the 2nd ADD BSS Request that is sent
3135 * on the BTAMP STA side. The Sta type is
3136 * set to STA_ENTRY_PEER here.*/
3137 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3138 }
3139 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3140 (staConfigBssParam->staType == STA_ENTRY_SELF))
3141 {
3142 /* statype is already set by PE.
3143 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3144 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3145 staConfigBssParam->staType = STA_ENTRY_BSSID;
3146 }
3147 else
3148 {
3149 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3150 staConfigBssParam->staType = STA_ENTRY_PEER;
3151 }
3152 }
3153 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3154 {
3155 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3156 staConfigBssParam->staType = STA_ENTRY_SELF;
3157 }
3158 else
3159 {
3160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3161 "Invalid operation mode specified");
3162 VOS_ASSERT(0);
3163 }
3164
3165 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3170 sizeof(tSirMacAddr));
3171 staConfigBssParam->txChannelWidthSet =
3172 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3174 staConfigBssParam->htCapable)
3175 {
3176 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3177 wdiConfigBssRsp->ucBSSIdx;
3178 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3179 WDA_VALID_STA_INDEX ;
3180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3182 wdiConfigBssRsp->ucBSSIdx,
3183 wdiConfigBssRsp->ucSTAIdx))
3184 {
3185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 VOS_ASSERT(0) ;
3188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195#ifdef WLAN_FEATURE_VOWIFI
3196 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3197#endif
3198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3200 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 return ;
3203}
Jeff Johnson295189b2012-06-20 16:38:30 -07003204/*
3205 * FUNCTION: WDA_UpdateEdcaParamsForAC
3206 * Update WDI EDCA params with PE edca params
3207 */
3208void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3209 WDI_EdcaParamRecord *wdiEdcaParam,
3210 tSirMacEdcaParamRecord *macEdcaParam)
3211{
3212 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3213 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3214 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3215 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3216 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3217 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3218}
Jeff Johnson295189b2012-06-20 16:38:30 -07003219/*
3220 * FUNCTION: WDA_ProcessConfigBssReq
3221 * Configure BSS before starting Assoc with AP
3222 */
3223VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3224 tAddBssParams* configBssReqParam)
3225{
3226 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303227 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003230 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303231 if (NULL == configBssReqParam)
3232 {
3233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3234 "%s: configBssReqParam is NULL", __func__);
3235 return VOS_STATUS_E_INVAL;
3236 }
3237
3238 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3239 sizeof(WDI_ConfigBSSReqParamsType)) ;
3240
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 if(NULL == wdiConfigBssReqParam)
3242 {
3243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 VOS_ASSERT(0);
3246 return VOS_STATUS_E_NOMEM;
3247 }
3248 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3249 if(NULL == pWdaParams)
3250 {
3251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 VOS_ASSERT(0);
3254 vos_mem_free(wdiConfigBssReqParam);
3255 return VOS_STATUS_E_NOMEM;
3256 }
Kiran4a17ebe2013-01-31 10:43:43 -08003257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3258 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3261 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 /* Store Init Req pointer, as this will be used for response */
3263 /* store Params pass it to WDI */
3264 pWdaParams->pWdaContext = pWDA;
3265 pWdaParams->wdaMsgParam = configBssReqParam;
3266 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3268 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(IS_WDI_STATUS_FAILURE(status))
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3272 "Failure in Config BSS WDI API, free all the memory " );
3273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3274 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 return CONVERT_WDI2VOS_STATUS(status) ;
3279}
Jeff Johnson295189b2012-06-20 16:38:30 -07003280#ifdef ENABLE_HAL_COMBINED_MESSAGES
3281/*
3282 * FUNCTION: WDA_PostAssocReqCallback
3283 * Post ASSOC req callback, send RSP back to PE
3284 */
3285void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3286 void* pUserData)
3287{
3288 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3289 tPostAssocParams *postAssocReqParam =
3290 (tPostAssocParams *)pWDA->wdaMsgParam ;
3291 /*STA context within the BSS Params*/
3292 tAddStaParams *staPostAssocParam =
3293 &postAssocReqParam->addBssParams.staContext ;
3294 /*STA Params for self STA*/
3295 tAddStaParams *selfStaPostAssocParam =
3296 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003300 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3302 {
3303 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3304 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3305 sizeof(tSirMacAddr)) ;
3306 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3307 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3308 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3310 }
3311 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3312 pWDA->wdaWdiApiMsgParam = NULL;
3313 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 return ;
3316}
Jeff Johnson295189b2012-06-20 16:38:30 -07003317/*
3318 * FUNCTION: WDA_ProcessPostAssocReq
3319 * Trigger POST ASSOC processing in WDI
3320 */
3321VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3322 tPostAssocParams *postAssocReqParam)
3323{
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 WDI_Status status = WDI_STATUS_SUCCESS ;
3325
3326 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3327 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3328 sizeof(WDI_PostAssocReqParamsType)) ;
3329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003330 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003331
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 if(NULL == wdiPostAssocReqParam)
3333 {
3334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 VOS_ASSERT(0);
3337 return VOS_STATUS_E_NOMEM;
3338 }
3339
3340 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3341 {
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 VOS_ASSERT(0);
3345 return VOS_STATUS_E_FAILURE;
3346 }
3347
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 /* update BSS params into WDI structure */
3349 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3350 &postAssocReqParam->addBssParams) ;
3351 /* update STA params into WDI structure */
3352 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3353 &postAssocReqParam->addStaParams) ;
3354
3355 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3356 postAssocReqParam->addBssParams.highPerformance;
3357 WDA_UpdateEdcaParamsForAC(pWDA,
3358 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3359 &postAssocReqParam->addBssParams.acbe);
3360 WDA_UpdateEdcaParamsForAC(pWDA,
3361 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3362 &postAssocReqParam->addBssParams.acbk);
3363 WDA_UpdateEdcaParamsForAC(pWDA,
3364 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3365 &postAssocReqParam->addBssParams.acvi);
3366 WDA_UpdateEdcaParamsForAC(pWDA,
3367 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3368 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 /* Store Init Req pointer, as this will be used for response */
3370 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 /* store Params pass it to WDI */
3372 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3374 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 if(IS_WDI_STATUS_FAILURE(status))
3376 {
3377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3378 "Failure in Post Assoc WDI API, free all the memory " );
3379 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3380 pWDA->wdaWdiApiMsgParam = NULL;
3381 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 return CONVERT_WDI2VOS_STATUS(status) ;
3386}
3387#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003388/*
3389 * FUNCTION: WDA_AddStaReqCallback
3390 * ADD STA req callback, send RSP back to PE
3391 */
3392void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3393 void* pUserData)
3394{
3395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3396 tWDA_CbContext *pWDA;
3397 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 if(NULL == pWdaParams)
3401 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 VOS_ASSERT(0) ;
3404 return ;
3405 }
3406 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3407 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003409 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3411 {
3412 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3413 /*TODO: UMAC structure doesn't have these fields*/
3414 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3415 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3416 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3417 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3418 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3419 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003420#ifdef FEATURE_WLAN_TDLS
3421 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3422 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3423#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003425#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 {
3427 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3428 wdiConfigStaRsp->ucBssIdx;
3429 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3430 WDA_VALID_STA_INDEX ;
3431 }
3432 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3433 {
3434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 VOS_ASSERT(0) ;
3437 return ;
3438 }
3439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3441 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 return ;
3444}
Jeff Johnson295189b2012-06-20 16:38:30 -07003445/*
3446 * FUNCTION: WDA_ConfigStaReq
3447 * Trigger Config STA processing in WDI
3448 */
3449VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3450 tAddStaParams *addStaReqParam)
3451{
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3454 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3455 sizeof(WDI_ConfigSTAReqParamsType)) ;
3456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 if(NULL == wdiConfigStaReqParam)
3460 {
3461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 VOS_ASSERT(0);
3464 return VOS_STATUS_E_NOMEM;
3465 }
3466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3467 if(NULL == pWdaParams)
3468 {
3469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 VOS_ASSERT(0);
3472 vos_mem_free(wdiConfigStaReqParam);
3473 return VOS_STATUS_E_NOMEM;
3474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 /* update STA params into WDI structure */
3477 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3478 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 /* Store Init Req pointer, as this will be used for response */
3480 /* store Params pass it to WDI */
3481 pWdaParams->pWdaContext = pWDA;
3482 pWdaParams->wdaMsgParam = addStaReqParam;
3483 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3485 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 if(IS_WDI_STATUS_FAILURE(status))
3487 {
3488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3489 "Failure in Config STA WDI API, free all the memory " );
3490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3491 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 return CONVERT_WDI2VOS_STATUS(status) ;
3496}
Jeff Johnson295189b2012-06-20 16:38:30 -07003497/*
3498 * FUNCTION: WDA_DelBSSReqCallback
3499 * Dens DEL BSS RSP back to PE
3500 */
3501void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3502 void* pUserData)
3503{
3504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3505 tWDA_CbContext *pWDA;
3506 tDeleteBssParams *delBssReqParam;
3507 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 if(NULL == pWdaParams)
3511 {
3512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003513 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 VOS_ASSERT(0) ;
3515 return ;
3516 }
3517 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3518 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003519 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3521 {
3522 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3523 sizeof(tSirMacAddr)) ;
3524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3526 {
3527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_ASSERT(0) ;
3530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3532 {
3533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003534 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 VOS_ASSERT(0) ;
3536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3538 {
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 VOS_ASSERT(0) ;
3542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 /* reset the the system role*/
3546 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3547
3548 /* Reset the BA related information */
3549 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3550 {
3551 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3552 {
3553 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3554 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3555 /* Reset framesTxed counters here */
3556 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3557 {
3558 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3559 }
3560 }
3561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 return ;
3564}
3565
Jeff Johnson295189b2012-06-20 16:38:30 -07003566/*
3567 * FUNCTION: WDA_ProcessDelBssReq
3568 * Init DEL BSS req with WDI
3569 */
3570VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3571 tDeleteBssParams *delBssParam)
3572{
3573 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3575 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3576 sizeof(WDI_DelBSSReqParamsType)) ;
3577 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003579 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 if(NULL == wdiDelBssReqParam)
3581 {
3582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 VOS_ASSERT(0);
3585 return VOS_STATUS_E_NOMEM;
3586 }
3587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3588 if(NULL == pWdaParams)
3589 {
3590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 VOS_ASSERT(0);
3593 vos_mem_free(wdiDelBssReqParam);
3594 return VOS_STATUS_E_NOMEM;
3595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3597 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3598
3599 /* Store Init Req pointer, as this will be used for response */
3600 /* store Params pass it to WDI */
3601 pWdaParams->pWdaContext = pWDA;
3602 pWdaParams->wdaMsgParam = delBssParam;
3603 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 status = WDI_DelBSSReq(wdiDelBssReqParam,
3605 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 if(IS_WDI_STATUS_FAILURE(status))
3607 {
3608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3609 "Failure in Del BSS WDI API, free all the memory " );
3610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3611 vos_mem_free(pWdaParams) ;
3612 delBssParam->status = eSIR_FAILURE ;
3613 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 return CONVERT_WDI2VOS_STATUS(status) ;
3616}
Jeff Johnson295189b2012-06-20 16:38:30 -07003617/*
3618 * FUNCTION: WDA_DelSTAReqCallback
3619 * Dens DEL STA RSP back to PE
3620 */
3621void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3622 void* pUserData)
3623{
3624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3625 tWDA_CbContext *pWDA;
3626 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003628 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 if(NULL == pWdaParams)
3630 {
3631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003632 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 VOS_ASSERT(0) ;
3634 return ;
3635 }
3636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3637 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003638 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3640 {
3641 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3642 {
3643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003644 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 VOS_ASSERT(0) ;
3646 }
3647 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3648 }
3649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3650 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 /*Reset the BA information corresponding to this STAIdx */
3652 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3653 WDA_INVALID_STA_INDEX;
3654 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3655
3656 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 return ;
3658}
Jeff Johnson295189b2012-06-20 16:38:30 -07003659/*
3660 * FUNCTION: WDA_ProcessDelStaReq
3661 * Init DEL STA req with WDI
3662 */
3663VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3664 tDeleteStaParams *delStaParam)
3665{
3666 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3668 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3669 sizeof(WDI_DelSTAReqParamsType)) ;
3670 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(NULL == wdiDelStaReqParam)
3674 {
3675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003677 VOS_ASSERT(0);
3678 return VOS_STATUS_E_NOMEM;
3679 }
3680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3681 if(NULL == pWdaParams)
3682 {
3683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 VOS_ASSERT(0);
3686 vos_mem_free(wdiDelStaReqParam);
3687 return VOS_STATUS_E_NOMEM;
3688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3690 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 /* Store Init Req pointer, as this will be used for response */
3692 /* store Params pass it to WDI */
3693 pWdaParams->pWdaContext = pWDA;
3694 pWdaParams->wdaMsgParam = delStaParam;
3695 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 status = WDI_DelSTAReq(wdiDelStaReqParam,
3697 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 if(IS_WDI_STATUS_FAILURE(status))
3699 {
3700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3701 "Failure in Del STA WDI API, free all the memory status = %d",
3702 status );
3703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3704 vos_mem_free(pWdaParams) ;
3705 delStaParam->status = eSIR_FAILURE ;
3706 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 return CONVERT_WDI2VOS_STATUS(status) ;
3709}
Jeff Johnson295189b2012-06-20 16:38:30 -07003710void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3711{
3712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3713 tWDA_CbContext *pWDA;
3714 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003716 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003717 if(NULL == pWdaParams)
3718 {
3719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003720 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 VOS_ASSERT(0) ;
3722 return ;
3723 }
3724 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3725 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3727 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3729 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3730 pwdiAddSTASelfRsp->macSelfSta,
3731 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 return ;
3734}
Jeff Johnson295189b2012-06-20 16:38:30 -07003735/*
3736 * FUNCTION: WDA_ProcessAddStaSelfReq
3737 *
3738 */
3739VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3740{
3741 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003742 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3744 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3745 sizeof(WDI_AddSTASelfReqParamsType)) ;
3746 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003748 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 if( NULL == wdiAddStaSelfReq )
3750 {
3751 VOS_ASSERT( 0 );
3752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003753 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 return( VOS_STATUS_E_NOMEM );
3755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 if( NULL == pWdaParams )
3758 {
3759 VOS_ASSERT( 0 );
3760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003761 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 vos_mem_free(wdiAddStaSelfReq) ;
3763 return( VOS_STATUS_E_NOMEM );
3764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003767 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* Store Init Req pointer, as this will be used for response */
3769 /* store Params pass it to WDI */
3770 pWdaParams->pWdaContext = pWDA;
3771 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3772 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003773 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003774
Jeff Johnson43971f52012-07-17 12:26:56 -07003775 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 {
3777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3778 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003779 wstatus );
3780 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3782 vos_mem_free(pWdaParams) ;
3783 pAddStaSelfReq->status = eSIR_FAILURE ;
3784 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3785 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003786 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003787}
Jeff Johnson295189b2012-06-20 16:38:30 -07003788/*
3789 * FUNCTION: WDA_DelSTASelfRespCallback
3790 *
3791 */
3792void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3793 wdiDelStaSelfRspParams , void* pUserData)
3794{
3795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3796 tWDA_CbContext *pWDA;
3797 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 if (NULL == pWdaParams)
3801 {
3802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003803 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 VOS_ASSERT(0);
3805 return;
3806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3808 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003810 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811
3812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3813 vos_mem_free(pWdaParams) ;
3814
3815 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 return ;
3817}
Jeff Johnson295189b2012-06-20 16:38:30 -07003818/*
3819 * FUNCTION: WDA_DelSTASelfReqCallback
3820 *
3821 */
3822void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3823 void* pUserData)
3824{
3825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3826 tWDA_CbContext *pWDA;
3827 tDelStaSelfParams *delStaSelfParams;
3828
3829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303830 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003831 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003832
3833 if (NULL == pWdaParams)
3834 {
3835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003836 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 VOS_ASSERT(0);
3838 return;
3839 }
3840
3841 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3842 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3843
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003844 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003845
3846 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3847 {
3848 VOS_ASSERT(0);
3849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3850 vos_mem_free(pWdaParams) ;
3851 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3852 }
3853
3854 return ;
3855}
3856
3857/*
3858 * FUNCTION: WDA_DelSTASelfReq
3859 * Trigger Config STA processing in WDI
3860 */
3861VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3862 tDelStaSelfParams* pDelStaSelfReqParam)
3863{
3864 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003865 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 tWDA_ReqParams *pWdaParams = NULL;
3867 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3868 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3869 sizeof(WDI_DelSTASelfReqParamsType)) ;
3870
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003872 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 if( NULL == wdiDelStaSelfReq )
3874 {
3875 VOS_ASSERT( 0 );
3876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003877 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 return( VOS_STATUS_E_NOMEM );
3879 }
3880
3881 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3882 if( NULL == pWdaParams )
3883 {
3884 VOS_ASSERT( 0 );
3885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003886 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 vos_mem_free(wdiDelStaSelfReq) ;
3888 return( VOS_STATUS_E_NOMEM );
3889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 pWdaParams->pWdaContext = pWDA;
3891 /* Store param pointer as passed in by caller */
3892 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3893 /* store Params pass it to WDI */
3894 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3896 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3897
3898 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3899 wdiDelStaSelfReq->pUserData = pWdaParams;
3900
Jeff Johnson43971f52012-07-17 12:26:56 -07003901 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3903
Jeff Johnson43971f52012-07-17 12:26:56 -07003904 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 {
3906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3907 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3908 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003909 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3911 vos_mem_free(pWdaParams) ;
3912 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3913 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3914 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003915 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003916}
3917
Jeff Johnson295189b2012-06-20 16:38:30 -07003918/*
3919 * FUNCTION: WDA_SendMsg
3920 * Send Message back to PE
3921 */
3922void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3923 void *pBodyptr, tANI_U32 bodyVal)
3924{
3925 tSirMsgQ msg = {0} ;
3926 tANI_U32 status = VOS_STATUS_SUCCESS ;
3927 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 msg.type = msgType;
3929 msg.bodyval = bodyVal;
3930 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 if (VOS_STATUS_SUCCESS != status)
3933 {
3934 if(NULL != pBodyptr)
3935 {
3936 vos_mem_free(pBodyptr);
3937 }
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 return ;
3943}
Jeff Johnson295189b2012-06-20 16:38:30 -07003944/*
3945 * FUNCTION: WDA_UpdateBSSParams
3946 * Translated WDA/PE BSS info into WDI BSS info..
3947 */
3948void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3949 WDI_ConfigBSSReqInfoType *wdiBssParams,
3950 tAddBssParams *wdaBssParams)
3951{
3952 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 /* copy bssReq Params to WDI structure */
3954 vos_mem_copy(wdiBssParams->macBSSID,
3955 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3956 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3957 sizeof(tSirMacAddr)) ;
3958 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3959 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3960 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 wdiBssParams->ucShortSlotTimeSupported =
3962 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3964 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3965 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3966 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3967 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3968
3969 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3970 wdiBssParams->ucTXOPProtectionFullSupport =
3971 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003972 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3973 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3976 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3977 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3978 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3979
Chet Lanctot186b5732013-03-18 10:26:30 -07003980 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3981
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 /* copy SSID into WDI structure */
3983 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3984 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3985 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3987 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989#ifdef WLAN_FEATURE_VOWIFI
3990 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3991#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994#ifdef WLAN_FEATURE_VOWIFI_11R
3995 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 if(wdiBssParams->bExtSetStaKeyParamValid)
3997 {
3998 /* copy set STA key params to WDI structure */
3999 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4000 wdaBssParams->extSetStaKeyParam.staIdx;
4001 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4002 wdaBssParams->extSetStaKeyParam.encType;
4003 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4004 wdaBssParams->extSetStaKeyParam.wepType;
4005 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4006 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4008 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004009 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4011 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4012 {
4013 WDA_GetWepKeysFromCfg( pWDA,
4014 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4015 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4016 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4017 }
4018 else
4019 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4021 keyIndex++)
4022 {
4023 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4024 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4025 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4026 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4027 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4028 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4030 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4031 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4032 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4033 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4034 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4035 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4036 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4039 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 }
4041 }
4042 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4043 }
4044 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4045 {
4046 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4047 sizeof(wdaBssParams->extSetStaKeyParam) );
4048 }
4049#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004050#ifdef WLAN_FEATURE_11AC
4051 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4052 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4053#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004054
4055 return ;
4056}
Jeff Johnson295189b2012-06-20 16:38:30 -07004057/*
4058 * FUNCTION: WDA_UpdateSTAParams
4059 * Translated WDA/PE BSS info into WDI BSS info..
4060 */
4061void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4062 WDI_ConfigStaReqInfoType *wdiStaParams,
4063 tAddStaParams *wdaStaParams)
4064{
4065 tANI_U8 i = 0;
4066 /* Update STA params */
4067 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4068 sizeof(tSirMacAddr)) ;
4069 wdiStaParams->usAssocId = wdaStaParams->assocId;
4070 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004071 wdiStaParams->staIdx = wdaStaParams->staIdx;
4072
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 wdiStaParams->ucShortPreambleSupported =
4074 wdaStaParams->shortPreambleSupported;
4075 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4076 sizeof(tSirMacAddr)) ;
4077 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4078
4079 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4080
4081 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4082 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4083 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4084 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4085 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4086 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4087 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4088
4089 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4090 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 wdiStaParams->wdiSupportedRates.opRateMode =
4092 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4094 {
4095 wdiStaParams->wdiSupportedRates.llbRates[i] =
4096 wdaStaParams->supportedRates.llbRates[i];
4097 }
4098 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4099 {
4100 wdiStaParams->wdiSupportedRates.llaRates[i] =
4101 wdaStaParams->supportedRates.llaRates[i];
4102 }
4103 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4104 {
4105 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4106 wdaStaParams->supportedRates.aniLegacyRates[i];
4107 }
4108 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4109 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004110#ifdef WLAN_FEATURE_11AC
4111 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4112 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4113 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4114 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4115#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4117 {
4118 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4119 wdaStaParams->supportedRates.supportedMCSSet[i];
4120 }
4121 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4122 wdaStaParams->supportedRates.rxHighestDataRate;
4123
4124 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4125
4126 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4127
4128 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4129 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4130 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4131
4132 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4133 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4134 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4135 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004137#ifdef WLAN_FEATURE_11AC
4138 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4139 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004140 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004141#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004142 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4143 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Jeff Johnson295189b2012-06-20 16:38:30 -07004146/*
4147 * -------------------------------------------------------------------------
4148 * CFG update to WDI
4149 * -------------------------------------------------------------------------
4150 */
4151
4152 /*
4153 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4154 * Convert the WNI CFG ID to HAL CFG ID
4155 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004156static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004157{
4158 switch(wniCfgId)
4159 {
4160 case WNI_CFG_STA_ID:
4161 return QWLAN_HAL_CFG_STA_ID;
4162 case WNI_CFG_CURRENT_TX_ANTENNA:
4163 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4164 case WNI_CFG_CURRENT_RX_ANTENNA:
4165 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4166 case WNI_CFG_LOW_GAIN_OVERRIDE:
4167 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4168 case WNI_CFG_POWER_STATE_PER_CHAIN:
4169 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4170 case WNI_CFG_CAL_PERIOD:
4171 return QWLAN_HAL_CFG_CAL_PERIOD;
4172 case WNI_CFG_CAL_CONTROL:
4173 return QWLAN_HAL_CFG_CAL_CONTROL;
4174 case WNI_CFG_PROXIMITY:
4175 return QWLAN_HAL_CFG_PROXIMITY;
4176 case WNI_CFG_NETWORK_DENSITY:
4177 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4178 case WNI_CFG_MAX_MEDIUM_TIME:
4179 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4180 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4181 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4182 case WNI_CFG_RTS_THRESHOLD:
4183 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4184 case WNI_CFG_SHORT_RETRY_LIMIT:
4185 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4186 case WNI_CFG_LONG_RETRY_LIMIT:
4187 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4188 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4189 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4190 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4191 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4192 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4193 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4194 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4195 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4196 case WNI_CFG_FIXED_RATE:
4197 return QWLAN_HAL_CFG_FIXED_RATE;
4198 case WNI_CFG_RETRYRATE_POLICY:
4199 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4200 case WNI_CFG_RETRYRATE_SECONDARY:
4201 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4202 case WNI_CFG_RETRYRATE_TERTIARY:
4203 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4204 case WNI_CFG_FORCE_POLICY_PROTECTION:
4205 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4206 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4207 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4208 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4209 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4210 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4211 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4212 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4213 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4214 case WNI_CFG_MAX_BA_SESSIONS:
4215 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4216 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4217 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4218 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4219 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4220 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4221 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4222 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4223 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4224 case WNI_CFG_STATS_PERIOD:
4225 return QWLAN_HAL_CFG_STATS_PERIOD;
4226 case WNI_CFG_CFP_MAX_DURATION:
4227 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4228#if 0 /*This is not part of CFG*/
4229 case WNI_CFG_FRAME_TRANS_ENABLED:
4230 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4231#endif
4232 case WNI_CFG_DTIM_PERIOD:
4233 return QWLAN_HAL_CFG_DTIM_PERIOD;
4234 case WNI_CFG_EDCA_WME_ACBK:
4235 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4236 case WNI_CFG_EDCA_WME_ACBE:
4237 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4238 case WNI_CFG_EDCA_WME_ACVI:
4239 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4240 case WNI_CFG_EDCA_WME_ACVO:
4241 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4242#if 0
4243 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4244 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4245 case WNI_CFG_TELE_BCN_TRANS_LI:
4246 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4247 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4248 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4249 case WNI_CFG_TELE_BCN_MAX_LI:
4250 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4251 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4252 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4253#endif
4254 case WNI_CFG_ENABLE_CLOSE_LOOP:
4255 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004256 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4257 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 default:
4259 {
4260 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004261 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 wniCfgId);
4263 return VOS_STATUS_E_INVAL;
4264 }
4265 }
4266}
Jeff Johnson295189b2012-06-20 16:38:30 -07004267/*
4268 * FUNCTION: WDA_UpdateCfgCallback
4269 *
4270 */
4271void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4272{
4273 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4274 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4275 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 /*
4279 * currently there is no response message is expected between PE and
4280 * WDA, Failure return from WDI is a ASSERT condition
4281 */
4282 if(WDI_STATUS_SUCCESS != wdiStatus)
4283 {
4284 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004285 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4287 }
4288
4289 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4290 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4291 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 return ;
4293}
Jeff Johnson295189b2012-06-20 16:38:30 -07004294/*
4295 * FUNCTION: WDA_UpdateCfg
4296 *
4297 */
4298VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4299{
4300
4301 WDI_Status status = WDI_STATUS_SUCCESS ;
4302 tANI_U32 val =0;
4303 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4304 tHalCfg *configData;
4305 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4306 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 if (NULL == pMac )
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004312 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 return VOS_STATUS_E_FAILURE;
4314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 if(WDA_START_STATE != pWDA->wdaState)
4316 {
4317 return VOS_STATUS_E_FAILURE;
4318 }
4319
4320 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_ASSERT(0);
4325 return VOS_STATUS_E_FAILURE;
4326 }
4327
4328 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4329 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 if(NULL == wdiCfgReqParam)
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 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4338 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 if(NULL == wdiCfgReqParam->pConfigBuffer)
4340 {
4341 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 vos_mem_free(wdiCfgReqParam);
4344 VOS_ASSERT(0);
4345 return VOS_STATUS_E_NOMEM;
4346 }
4347
4348 /*convert the WNI CFG Id to HAL CFG Id*/
4349 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4350 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4351
4352 /*TODO: revisit this for handling string parameters */
4353 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4354 &val) != eSIR_SUCCESS)
4355 {
4356 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004357 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4359 vos_mem_free(wdiCfgReqParam);
4360 return eSIR_FAILURE;
4361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4363 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4364 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4365 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4366 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4367
4368 /* store Params pass it to WDI */
4369 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4371 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4372 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 if(IS_WDI_STATUS_FAILURE(status))
4374 {
4375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4376 "Failure in Update CFG WDI API, free all the memory " );
4377 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4378 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4379 pWDA->wdaWdiCfgApiMsgParam = NULL;
4380 /* Failure is not expected */
4381 VOS_ASSERT(0) ;
4382 }
4383#else
4384 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4385 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4386 pWDA->wdaWdiCfgApiMsgParam = NULL;
4387#endif
4388 return CONVERT_WDI2VOS_STATUS(status) ;
4389}
4390
Jeff Johnson295189b2012-06-20 16:38:30 -07004391VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4392 v_U8_t *pDefaultKeyId,
4393 v_U8_t *pNumKeys,
4394 WDI_KeysType *pWdiKeys )
4395{
4396 v_U32_t i, j, defKeyId = 0;
4397 v_U32_t val = SIR_MAC_KEY_LENGTH;
4398 VOS_STATUS status = WDI_STATUS_SUCCESS;
4399 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 if (NULL == pMac )
4401 {
4402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004403 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 return VOS_STATUS_E_FAILURE;
4405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4407 &defKeyId ))
4408 {
4409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4410 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4411 }
4412
4413 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 /* Need to extract ALL of the configured WEP Keys */
4415 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4416 {
4417 val = SIR_MAC_KEY_LENGTH;
4418 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4419 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4420 pWdiKeys[j].key,
4421 &val ))
4422 {
4423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004424 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 }
4426 else
4427 {
4428 pWdiKeys[j].keyId = (tANI_U8) i;
4429 /*
4430 * Actually, a DC (Don't Care) because
4431 * this is determined (and set) by PE/MLME
4432 */
4433 pWdiKeys[j].unicast = 0;
4434 /*
4435 * Another DC (Don't Care)
4436 */
4437 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4438 /* Another DC (Don't Care). Unused for WEP */
4439 pWdiKeys[j].paeRole = 0;
4440 /* Determined from wlan_cfgGetStr() above.*/
4441 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 j++;
4443 *pNumKeys = (tANI_U8) j;
4444 }
4445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 return status;
4447}
Jeff Johnson295189b2012-06-20 16:38:30 -07004448/*
4449 * FUNCTION: WDA_SetBssKeyReqCallback
4450 * send SET BSS key RSP back to PE
4451 */
4452void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4453{
4454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4455 tWDA_CbContext *pWDA;
4456 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004458 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 if(NULL == pWdaParams)
4460 {
4461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004462 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 VOS_ASSERT(0) ;
4464 return ;
4465 }
4466 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4467 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4469 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004470 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 return ;
4473}
Jeff Johnson295189b2012-06-20 16:38:30 -07004474/*
4475 * FUNCTION: WDA_ProcessSetBssKeyReq
4476 * Request to WDI for programming the BSS key( key for
4477 * broadcast/multicast frames Encryption)
4478 */
4479VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4480 tSetBssKeyParams *setBssKeyParams )
4481{
4482 WDI_Status status = WDI_STATUS_SUCCESS ;
4483 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4484 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4485 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4486 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004489 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 if(NULL == wdiSetBssKeyParam)
4491 {
4492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 VOS_ASSERT(0);
4495 return VOS_STATUS_E_NOMEM;
4496 }
4497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4498 if(NULL == pWdaParams)
4499 {
4500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 VOS_ASSERT(0);
4503 vos_mem_free(wdiSetBssKeyParam);
4504 return VOS_STATUS_E_NOMEM;
4505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 /* copy set BSS params to WDI structure */
4508 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4509 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4510 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 if(setBssKeyParams->encType != eSIR_ED_NONE)
4512 {
4513 if( setBssKeyParams->numKeys == 0 &&
4514 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4515 setBssKeyParams->encType == eSIR_ED_WEP104))
4516 {
4517 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4519 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4520 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4521 }
4522 else
4523 {
4524 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4525 {
4526 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4527 setBssKeyParams->key[keyIndex].keyId;
4528 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4529 setBssKeyParams->key[keyIndex].unicast;
4530 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4531 setBssKeyParams->key[keyIndex].keyDirection;
4532 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4533 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4534 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4535 setBssKeyParams->key[keyIndex].paeRole;
4536 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4537 setBssKeyParams->key[keyIndex].keyLength;
4538 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4539 setBssKeyParams->key[keyIndex].key,
4540 SIR_MAC_MAX_KEY_LENGTH);
4541 }
4542 }
4543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4545 setBssKeyParams->singleTidRc;
4546 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 /* Store set key pointer, as this will be used for response */
4548 /* store Params pass it to WDI */
4549 pWdaParams->pWdaContext = pWDA;
4550 pWdaParams->wdaMsgParam = setBssKeyParams;
4551 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4553 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4554
4555 if(IS_WDI_STATUS_FAILURE(status))
4556 {
4557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4558 "Failure in Set BSS Key Req WDI API, free all the memory " );
4559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4560 vos_mem_free(pWdaParams) ;
4561 setBssKeyParams->status = eSIR_FAILURE ;
4562 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4563 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 return CONVERT_WDI2VOS_STATUS(status) ;
4565}
Jeff Johnson295189b2012-06-20 16:38:30 -07004566/*
4567 * FUNCTION: WDA_RemoveBssKeyReqCallback
4568 * send SET BSS key RSP back to PE
4569 */
4570void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4571{
4572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4573 tWDA_CbContext *pWDA;
4574 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 if(NULL == pWdaParams)
4578 {
4579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004580 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 VOS_ASSERT(0) ;
4582 return ;
4583 }
4584 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4585 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4587 vos_mem_free(pWdaParams) ;
4588
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004589 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 return ;
4592}
Jeff Johnson295189b2012-06-20 16:38:30 -07004593/*
4594 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4595 * Request to WDI to remove the BSS key( key for broadcast/multicast
4596 * frames Encryption)
4597 */
4598VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4599 tRemoveBssKeyParams *removeBssKeyParams )
4600{
4601 WDI_Status status = WDI_STATUS_SUCCESS ;
4602 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4603 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4604 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4605 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 if(NULL == wdiRemoveBssKeyParam)
4609 {
4610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 VOS_ASSERT(0);
4613 return VOS_STATUS_E_NOMEM;
4614 }
4615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4616 if(NULL == pWdaParams)
4617 {
4618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 VOS_ASSERT(0);
4621 vos_mem_free(wdiRemoveBssKeyParam);
4622 return VOS_STATUS_E_NOMEM;
4623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004624 /* copy Remove BSS key params to WDI structure*/
4625 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4626 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4627 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4628 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4629 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 /* Store remove key pointer, as this will be used for response */
4631 /* store Params pass it to WDI */
4632 pWdaParams->pWdaContext = pWDA;
4633 pWdaParams->wdaMsgParam = removeBssKeyParams;
4634 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4636 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 if(IS_WDI_STATUS_FAILURE(status))
4638 {
4639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4640 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4642 vos_mem_free(pWdaParams) ;
4643 removeBssKeyParams->status = eSIR_FAILURE ;
4644 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 return CONVERT_WDI2VOS_STATUS(status) ;
4647}
Jeff Johnson295189b2012-06-20 16:38:30 -07004648/*
4649 * FUNCTION: WDA_SetBssKeyReqCallback
4650 * send SET BSS key RSP back to PE
4651 */
4652void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4653{
4654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4655 tWDA_CbContext *pWDA;
4656 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 if(NULL == pWdaParams)
4660 {
4661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004662 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 VOS_ASSERT(0) ;
4664 return ;
4665 }
4666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4667 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4669 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004670 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 return ;
4673}
Jeff Johnson295189b2012-06-20 16:38:30 -07004674/*
4675 * FUNCTION: WDA_ProcessSetStaKeyReq
4676 * Request to WDI for programming the STA key( key for Unicast frames
4677 * Encryption)
4678 */
4679VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4680 tSetStaKeyParams *setStaKeyParams )
4681{
4682 WDI_Status status = WDI_STATUS_SUCCESS ;
4683 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4684 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4685 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004689 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 if(NULL == wdiSetStaKeyParam)
4691 {
4692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004694 VOS_ASSERT(0);
4695 return VOS_STATUS_E_NOMEM;
4696 }
4697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4698 if(NULL == pWdaParams)
4699 {
4700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 VOS_ASSERT(0);
4703 vos_mem_free(wdiSetStaKeyParam);
4704 return VOS_STATUS_E_NOMEM;
4705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 /* copy set STA key params to WDI structure */
4709 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4710 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4711 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4712 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 if(setStaKeyParams->encType != eSIR_ED_NONE)
4714 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004715 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4717 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4718 {
4719 WDA_GetWepKeysFromCfg( pWDA,
4720 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4721 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4722 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4723 }
4724 else
4725 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4727 keyIndex++)
4728 {
4729 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4730 setStaKeyParams->key[keyIndex].keyId;
4731 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4732 setStaKeyParams->key[keyIndex].unicast;
4733 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4734 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4736 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4737 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4738 setStaKeyParams->key[keyIndex].paeRole;
4739 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4740 setStaKeyParams->key[keyIndex].keyLength;
4741 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4742 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4743 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4744 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4745 {
4746 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4747 }
4748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4750 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 }
4752 }
4753 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4754 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 /* Store set key pointer, as this will be used for response */
4756 /* store Params pass it to WDI */
4757 pWdaParams->pWdaContext = pWDA;
4758 pWdaParams->wdaMsgParam = setStaKeyParams;
4759 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4761 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 if(IS_WDI_STATUS_FAILURE(status))
4763 {
4764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4765 "Failure in set STA Key Req WDI API, free all the memory " );
4766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4767 vos_mem_free(pWdaParams) ;
4768 setStaKeyParams->status = eSIR_FAILURE ;
4769 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 return CONVERT_WDI2VOS_STATUS(status) ;
4772}
Jeff Johnson295189b2012-06-20 16:38:30 -07004773/*
4774 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4775 * send SET Bcast STA key RSP back to PE
4776 */
4777void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4778{
4779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4780 tWDA_CbContext *pWDA;
4781 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 if(NULL == pWdaParams)
4785 {
4786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 VOS_ASSERT(0) ;
4789 return ;
4790 }
4791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4792 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4794 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004795 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 return ;
4798}
4799
Jeff Johnson295189b2012-06-20 16:38:30 -07004800/*
4801 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4802 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4803 * Encryption)
4804 */
4805VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4806 tSetStaKeyParams *setStaKeyParams )
4807{
4808 WDI_Status status = WDI_STATUS_SUCCESS ;
4809 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4810 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4811 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4812 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004815 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 if(NULL == wdiSetStaKeyParam)
4817 {
4818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 VOS_ASSERT(0);
4821 return VOS_STATUS_E_NOMEM;
4822 }
4823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4824 if(NULL == pWdaParams)
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 VOS_ASSERT(0);
4829 vos_mem_free(wdiSetStaKeyParam);
4830 return VOS_STATUS_E_NOMEM;
4831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 /* copy set STA key params to WDI structure */
4835 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4836 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4837 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4838 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 if(setStaKeyParams->encType != eSIR_ED_NONE)
4840 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4842 keyIndex++)
4843 {
4844 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4845 setStaKeyParams->key[keyIndex].keyId;
4846 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4847 setStaKeyParams->key[keyIndex].unicast;
4848 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4849 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4851 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4852 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4853 setStaKeyParams->key[keyIndex].paeRole;
4854 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4855 setStaKeyParams->key[keyIndex].keyLength;
4856 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4857 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4860 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 }
4862 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 /* Store set key pointer, as this will be used for response */
4864 /* store Params pass it to WDI */
4865 pWdaParams->pWdaContext = pWDA;
4866 pWdaParams->wdaMsgParam = setStaKeyParams;
4867 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4869 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 if(IS_WDI_STATUS_FAILURE(status))
4871 {
4872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4873 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4875 vos_mem_free(pWdaParams) ;
4876 setStaKeyParams->status = eSIR_FAILURE ;
4877 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 return CONVERT_WDI2VOS_STATUS(status) ;
4880}
Jeff Johnson295189b2012-06-20 16:38:30 -07004881/*
4882 * FUNCTION: WDA_RemoveStaKeyReqCallback
4883 * send SET BSS key RSP back to PE
4884 */
4885void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4886{
4887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4888 tWDA_CbContext *pWDA;
4889 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 if(NULL == pWdaParams)
4893 {
4894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 VOS_ASSERT(0) ;
4897 return ;
4898 }
4899 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4900 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4902 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004903 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 return ;
4906}
4907
Jeff Johnson295189b2012-06-20 16:38:30 -07004908/*
4909 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4910 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4911 */
4912VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4913 tRemoveStaKeyParams *removeStaKeyParams )
4914{
4915 WDI_Status status = WDI_STATUS_SUCCESS ;
4916 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4917 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4918 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4919 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 if(NULL == wdiRemoveStaKeyParam)
4923 {
4924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 VOS_ASSERT(0);
4927 return VOS_STATUS_E_NOMEM;
4928 }
4929 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4930 if(NULL == pWdaParams)
4931 {
4932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 VOS_ASSERT(0);
4935 vos_mem_free(wdiRemoveStaKeyParam);
4936 return VOS_STATUS_E_NOMEM;
4937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 /* copy remove STA key params to WDI structure*/
4939 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4940 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4941 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4942 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4943 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 /* Store remove key pointer, as this will be used for response */
4945 /* store Params pass it to WDI */
4946 pWdaParams->pWdaContext = pWDA;
4947 pWdaParams->wdaMsgParam = removeStaKeyParams;
4948 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4950 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 if(IS_WDI_STATUS_FAILURE(status))
4952 {
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4954 "Failure in remove STA Key Req WDI API, free all the memory " );
4955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4956 vos_mem_free(pWdaParams) ;
4957 removeStaKeyParams->status = eSIR_FAILURE ;
4958 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 return CONVERT_WDI2VOS_STATUS(status) ;
4961}
Jeff Johnson295189b2012-06-20 16:38:30 -07004962/*
4963 * FUNCTION: WDA_IsHandleSetLinkStateReq
4964 * Update the WDA state and return the status to handle this message or not
4965 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004966WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4967 tWDA_CbContext *pWDA,
4968 tLinkStateParams *linkStateParams)
4969{
4970 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 switch(linkStateParams->state)
4972 {
4973 case eSIR_LINK_PREASSOC_STATE:
4974 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4975 /*
4976 * set the WDA state to PRE ASSOC
4977 * copy the BSSID into pWDA to use it in join request and return,
4978 * No need to handle these messages.
4979 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004980 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4981 {
4982 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004984 }
4985 else
4986 {
4987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004988 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004989 VOS_ASSERT(0);
4990 }
4991
4992 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4993 {
4994 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004996 }
4997 else
4998 {
4999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005000 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005001 VOS_ASSERT(0);
5002 }
5003
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5005 *channel and after ) so reset the WDA state to ready when the second
5006 * time UMAC issue the link state with PREASSOC
5007 */
5008 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5009 {
5010 /* RESET WDA state back to WDA_READY_STATE */
5011 pWDA->wdaState = WDA_READY_STATE;
5012 }
5013 else
5014 {
5015 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5016 }
5017 //populate linkState info in WDACbCtxt
5018 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 default:
5021 if(pWDA->wdaState != WDA_READY_STATE)
5022 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005023 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5024 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5025 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5026 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5027 *the ASSERT in WDA_Stop during module unload.*/
5028 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5029 {
5030 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005031 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005032 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005033 else
5034 {
5035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005036 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005037 status = WDA_IGNORE_SET_LINK_STATE;
5038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 }
5040 break;
5041 }
5042
5043 return status;
5044}
Jeff Johnson295189b2012-06-20 16:38:30 -07005045/*
5046 * FUNCTION: WDA_SetLinkStateCallback
5047 * call back function for set link state from WDI
5048 */
5049void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5050{
5051 tWDA_CbContext *pWDA;
5052 tLinkStateParams *linkStateParams;
5053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005055 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 if(NULL == pWdaParams)
5057 {
5058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005059 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 VOS_ASSERT(0) ;
5061 return ;
5062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005064 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005065 /*
5066 * In STA mode start the BA activity check timer after association
5067 * and in AP mode start BA activity check timer after BSS start */
5068 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5069 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005070 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5071 ((status == WDI_STATUS_SUCCESS) &&
5072 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 {
5074 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 /*
5078 * No respone required for WDA_SET_LINK_STATE so free the request
5079 * param here
5080 */
5081 if( pWdaParams != NULL )
5082 {
5083 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5084 {
5085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5086 }
5087 vos_mem_free(pWdaParams);
5088 }
5089 return ;
5090}
Jeff Johnson295189b2012-06-20 16:38:30 -07005091/*
5092 * FUNCTION: WDA_ProcessSetLinkState
5093 * Request to WDI to set the link status.
5094 */
5095VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5096 tLinkStateParams *linkStateParams)
5097{
5098 WDI_Status status = WDI_STATUS_SUCCESS ;
5099 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5100 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5101 sizeof(WDI_SetLinkReqParamsType)) ;
5102 tWDA_ReqParams *pWdaParams ;
5103 tpAniSirGlobal pMac;
5104 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5105
5106 if(NULL == pMac)
5107 {
5108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005109 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005111 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 return VOS_STATUS_E_FAILURE;
5113 }
5114
5115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005116 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 if(NULL == wdiSetLinkStateParam)
5118 {
5119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 VOS_ASSERT(0);
5122 return VOS_STATUS_E_NOMEM;
5123 }
5124 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5125 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 VOS_ASSERT(0);
5130 vos_mem_free(wdiSetLinkStateParam);
5131 return VOS_STATUS_E_NOMEM;
5132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 if(WDA_IGNORE_SET_LINK_STATE ==
5134 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5135 {
5136 status = WDI_STATUS_E_FAILURE;
5137 }
5138 else
5139 {
5140 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5141 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5143 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5145 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 pWdaParams->pWdaContext = pWDA;
5147 /* Store remove key pointer, as this will be used for response */
5148 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 /* store Params pass it to WDI */
5150 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5151 /* Stop Timer only other than GO role and concurrent session */
5152 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005153 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5155 {
5156 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5159 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 if(IS_WDI_STATUS_FAILURE(status))
5161 {
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5163 "Failure in set link state Req WDI API, free all the memory " );
5164 }
5165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 if(IS_WDI_STATUS_FAILURE(status))
5167 {
5168 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005169 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 vos_mem_free(pWdaParams);
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 return CONVERT_WDI2VOS_STATUS(status) ;
5173}
Jeff Johnson295189b2012-06-20 16:38:30 -07005174/*
5175 * FUNCTION: WDA_GetStatsReqParamsCallback
5176 * send the response to PE with Stats received from WDI
5177 */
5178void WDA_GetStatsReqParamsCallback(
5179 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5180 void* pUserData)
5181{
5182 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5183 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5184
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 pGetPEStatsRspParams =
5188 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5189 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5190
5191 if(NULL == pGetPEStatsRspParams)
5192 {
5193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 VOS_ASSERT(0);
5196 return;
5197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5199 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5200 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5201 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005202
5203 //Fill the Session Id Properly in PE
5204 pGetPEStatsRspParams->sessionId = 0;
5205 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005206 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5208 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 vos_mem_copy( pGetPEStatsRspParams + 1,
5210 wdiGetStatsRsp + 1,
5211 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 /* send response to UMAC*/
5213 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5214
5215 return;
5216}
5217
Jeff Johnson295189b2012-06-20 16:38:30 -07005218/*
5219 * FUNCTION: WDA_ProcessGetStatsReq
5220 * Request to WDI to get the statistics
5221 */
5222VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5223 tAniGetPEStatsReq *pGetStatsParams)
5224{
5225 WDI_Status status = WDI_STATUS_SUCCESS ;
5226 WDI_GetStatsReqParamsType wdiGetStatsParam;
5227 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005229 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005230 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5231 pGetStatsParams->staId;
5232 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5233 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005234 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 status = WDI_GetStatsReq(&wdiGetStatsParam,
5236 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 if(IS_WDI_STATUS_FAILURE(status))
5238 {
5239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5240 "Failure in Get Stats Req WDI API, free all the memory " );
5241 pGetPEStatsRspParams =
5242 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5243 if(NULL == pGetPEStatsRspParams)
5244 {
5245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005248 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 return VOS_STATUS_E_NOMEM;
5250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5252 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5253 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5254 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5255 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5256 (void *)pGetPEStatsRspParams, 0) ;
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 /* Free the request message */
5259 vos_mem_free(pGetStatsParams);
5260 return CONVERT_WDI2VOS_STATUS(status);
5261}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005262
5263#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5264/*
5265 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5266 * send the response to PE with roam Rssi received from WDI
5267 */
5268void WDA_GetRoamRssiReqParamsCallback(
5269 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5270 void* pUserData)
5271{
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5273 tWDA_CbContext *pWDA = NULL;
5274 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5275 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5277 "<------ %s " ,__func__);
5278 if(NULL == pWdaParams)
5279 {
5280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5281 "%s: pWdaParams received NULL", __func__);
5282 VOS_ASSERT(0) ;
5283 return ;
5284 }
5285 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5286 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5287
5288 if(NULL == pGetRoamRssiReqParams)
5289 {
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5291 "%s: pGetRoamRssiReqParams received NULL", __func__);
5292 VOS_ASSERT(0);
5293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5294 vos_mem_free(pWdaParams);
5295 return ;
5296 }
5297 pGetRoamRssiRspParams =
5298 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5299
5300 if(NULL == pGetRoamRssiRspParams)
5301 {
5302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5303 "%s: VOS MEM Alloc Failure", __func__);
5304 VOS_ASSERT(0);
5305 return;
5306 }
5307 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5308 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005309 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005310 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5311 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5312
5313 /* Assign get roam rssi req (backup) in to the response */
5314 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5315
5316 /* free WDI command buffer */
5317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5318 vos_mem_free(pWdaParams) ;
5319
5320 /* send response to UMAC*/
5321 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5322
5323 return;
5324}
5325
5326
5327
5328/*
5329 * FUNCTION: WDA_ProcessGetRoamRssiReq
5330 * Request to WDI to get the statistics
5331 */
5332VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5333 tAniGetRssiReq *pGetRoamRssiParams)
5334{
5335 WDI_Status status = WDI_STATUS_SUCCESS ;
5336 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5337 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5338 tWDA_ReqParams *pWdaParams = NULL;
5339
5340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5341 "------> %s " ,__func__);
5342 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5343 pGetRoamRssiParams->staId;
5344 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5345
5346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5347 if(NULL == pWdaParams)
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5350 "%s: VOS MEM Alloc Failure", __func__);
5351 VOS_ASSERT(0);
5352 return VOS_STATUS_E_NOMEM;
5353 }
5354
5355 /* Store Init Req pointer, as this will be used for response */
5356 pWdaParams->pWdaContext = pWDA;
5357
5358 /* Take Get roam Rssi req backup as it stores the callback to be called after
5359 receiving the response */
5360 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5361 pWdaParams->wdaWdiApiMsgParam = NULL;
5362
5363 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5364 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5365 if(IS_WDI_STATUS_FAILURE(status))
5366 {
5367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5368 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5369 pGetRoamRssiRspParams =
5370 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5371 if(NULL == pGetRoamRssiRspParams)
5372 {
5373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5374 "%s: VOS MEM Alloc Failure", __func__);
5375 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305376 vos_mem_free(pGetRoamRssiParams);
5377 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005378 return VOS_STATUS_E_NOMEM;
5379 }
5380 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5381 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5382 pGetRoamRssiRspParams->rssi = 0;
5383 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5384 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5385 (void *)pGetRoamRssiRspParams, 0) ;
5386 }
5387 return CONVERT_WDI2VOS_STATUS(status);
5388}
5389#endif
5390
5391
Jeff Johnson295189b2012-06-20 16:38:30 -07005392/*
5393 * FUNCTION: WDA_UpdateEDCAParamCallback
5394 * call back function for Update EDCA params from WDI
5395 */
5396void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5397{
5398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5399 tEdcaParams *pEdcaParams;
5400
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 if(NULL == pWdaParams)
5404 {
5405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005406 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 VOS_ASSERT(0) ;
5408 return ;
5409 }
5410 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5412 vos_mem_free(pWdaParams);
5413 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 return ;
5415}
Jeff Johnson295189b2012-06-20 16:38:30 -07005416/*
5417 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5418 * Request to WDI to Update the EDCA params.
5419 */
5420VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5421 tEdcaParams *pEdcaParams)
5422{
5423 WDI_Status status = WDI_STATUS_SUCCESS ;
5424 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5425 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5426 sizeof(WDI_UpdateEDCAParamsType)) ;
5427 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005429 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 if(NULL == wdiEdcaParam)
5431 {
5432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005433 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005434 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005435 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005436 return VOS_STATUS_E_NOMEM;
5437 }
5438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5439 if(NULL == pWdaParams)
5440 {
5441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 VOS_ASSERT(0);
5444 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005445 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 return VOS_STATUS_E_NOMEM;
5447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005448 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005449 /*
5450 Since firmware is not using highperformance flag, we have removed
5451 this flag from wdiEDCAInfo structure to match sizeof the structure
5452 between host and firmware.In future if we are planning to use
5453 highperformance flag then Please define this flag in wdiEDCAInfo
5454 structure, update it here and send it to firmware. i.e.
5455 Following is the original line which we removed as part of the fix
5456 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5457 pEdcaParams->highPerformance;
5458 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5460 &pEdcaParams->acbe);
5461 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5462 &pEdcaParams->acbk);
5463 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5464 &pEdcaParams->acvi);
5465 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5466 &pEdcaParams->acvo);
5467 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 pWdaParams->pWdaContext = pWDA;
5469 /* Store remove key pointer, as this will be used for response */
5470 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 /* store Params pass it to WDI */
5472 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5474 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 if(IS_WDI_STATUS_FAILURE(status))
5476 {
5477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5478 "Failure in Update EDCA Params WDI API, free all the memory " );
5479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5480 vos_mem_free(pWdaParams);
5481 vos_mem_free(pEdcaParams);
5482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 return CONVERT_WDI2VOS_STATUS(status) ;
5484}
Jeff Johnson295189b2012-06-20 16:38:30 -07005485/*
5486 * FUNCTION: WDA_AddBAReqCallback
5487 * send ADD BA RSP back to PE
5488 */
5489void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5490 void* pUserData)
5491{
5492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5493 tWDA_CbContext *pWDA;
5494 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 if(NULL == pWdaParams)
5498 {
5499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005500 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 VOS_ASSERT(0) ;
5502 return ;
5503 }
5504 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5505 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5507 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005508 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 return ;
5511}
5512
Jeff Johnson295189b2012-06-20 16:38:30 -07005513/*
5514 * FUNCTION: WDA_ProcessAddBAReq
5515 * Request to WDI to Update the ADDBA REQ params.
5516 */
5517VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5518 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5519{
Jeff Johnson43971f52012-07-17 12:26:56 -07005520 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5522 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5523 sizeof(WDI_AddBAReqParamsType)) ;
5524 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 if(NULL == wdiAddBAReqParam)
5528 {
5529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005530 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 VOS_ASSERT(0);
5532 return VOS_STATUS_E_NOMEM;
5533 }
5534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5535 if(NULL == pWdaParams)
5536 {
5537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_ASSERT(0);
5540 vos_mem_free(wdiAddBAReqParam);
5541 return VOS_STATUS_E_NOMEM;
5542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 do
5544 {
5545 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 wdiAddBaInfo->ucSTAIdx = staIdx ;
5547 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5548 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 } while(0) ;
5550 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 pWdaParams->pWdaContext = pWDA;
5552 /* store Params pass it to WDI */
5553 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5554 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005555 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5556 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005557
Jeff Johnson43971f52012-07-17 12:26:56 -07005558 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 {
5560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005561 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5562 status = CONVERT_WDI2VOS_STATUS(wstatus);
5563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 vos_mem_free(pWdaParams);
5565 pAddBAReqParams->status = eSIR_FAILURE;
5566 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5567 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005568 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005569}
Jeff Johnson295189b2012-06-20 16:38:30 -07005570/*
5571 * FUNCTION: WDA_AddBASessionReqCallback
5572 * send ADD BA SESSION RSP back to PE/(or TL)
5573 */
5574void WDA_AddBASessionReqCallback(
5575 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5576{
5577 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5579 tWDA_CbContext *pWDA;
5580 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005582 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 if(NULL == pWdaParams)
5584 {
5585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005586 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 VOS_ASSERT(0) ;
5588 return ;
5589 }
5590 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5591 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 if( NULL == pAddBAReqParams )
5593 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5598 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 return ;
5600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5602 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 /*
5604 * if WDA in update TL state, update TL with BA session parama and send
5605 * another request to HAL(/WDI) (ADD_BA_REQ)
5606 */
5607
5608 if((VOS_STATUS_SUCCESS ==
5609 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5610 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5611 {
5612 /* Update TL with BA info received from HAL/WDI */
5613 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5614 wdiAddBaSession->usBaSessionID,
5615 wdiAddBaSession->ucSTAIdx,
5616 wdiAddBaSession->ucBaTID,
5617 wdiAddBaSession->ucBaBufferSize,
5618 wdiAddBaSession->ucWinSize,
5619 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5621 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5622 }
5623 else
5624 {
5625 pAddBAReqParams->status =
5626 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5627
5628 /* Setting Flag to indicate that Set BA is success */
5629 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5630 {
5631 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5632 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5633 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 /*Reset the WDA state to READY */
5638 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 return ;
5640}
5641
Jeff Johnson295189b2012-06-20 16:38:30 -07005642/*
5643 * FUNCTION: WDA_ProcessAddBASessionReq
5644 * Request to WDI to Update the ADDBA REQ params.
5645 */
5646VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5647 tAddBAParams *pAddBAReqParams)
5648{
5649 WDI_Status status = WDI_STATUS_SUCCESS ;
5650 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5651 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5652 sizeof(WDI_AddBASessionReqParamsType)) ;
5653 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005654 WLANTL_STAStateType tlSTAState = 0;
5655
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005657 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 if(NULL == wdiAddBASessionReqParam)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 VOS_ASSERT(0);
5663 return VOS_STATUS_E_NOMEM;
5664 }
5665 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5666 if(NULL == pWdaParams)
5667 {
5668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 VOS_ASSERT(0);
5671 vos_mem_free(wdiAddBASessionReqParam);
5672 return VOS_STATUS_E_NOMEM;
5673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 /*
5675 * Populate ADD BA parameters and pass these paarmeters to WDI.
5676 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5677 * the state to track if these is BA recipient case or BA initiator
5678 * case.
5679 */
5680 do
5681 {
5682 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5683 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5684 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5685 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5686 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5687 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5688 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5691 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5692 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5693 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5694 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 /* check the BA direction and update state accordingly */
5696 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5697 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5698 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5699
5700 }while(0) ;
5701 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 pWdaParams->pWdaContext = pWDA;
5703 /* Store ADD BA pointer, as this will be used for response */
5704 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5705 /* store Params pass it to WDI */
5706 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005707
5708 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5709 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5710 */
5711 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5712 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5713 {
5714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005715 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005716 status = WDI_STATUS_E_NOT_ALLOWED;
5717 pAddBAReqParams->status =
5718 CONVERT_WDI2SIR_STATUS(status) ;
5719 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5720 /*Reset the WDA state to READY */
5721 pWDA->wdaState = WDA_READY_STATE;
5722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5723 vos_mem_free(pWdaParams);
5724
5725 return CONVERT_WDI2VOS_STATUS(status) ;
5726 }
5727
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5729 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005733 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005735 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005736 pAddBAReqParams->status =
5737 CONVERT_WDI2SIR_STATUS(status) ;
5738 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005739 /*Reset the WDA state to READY */
5740 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 vos_mem_free(pWdaParams);
5743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005745}
Jeff Johnson295189b2012-06-20 16:38:30 -07005746/*
5747 * FUNCTION: WDA_DelBANotifyTL
5748 * send DEL BA IND to TL
5749 */
5750void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5751 tDelBAParams *pDelBAReqParams)
5752{
5753 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5754 //tSirMsgQ msg;
5755 vos_msg_t vosMsg;
5756 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 if(NULL == pDelBAInd)
5758 {
5759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 VOS_ASSERT(0) ;
5762 return;
5763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5765 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5766 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5767 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005768
Jeff Johnson295189b2012-06-20 16:38:30 -07005769
5770 vosMsg.type = WDA_DELETEBA_IND;
5771 vosMsg.bodyptr = pDelBAInd;
5772 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5773 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5774 {
5775 vosStatus = VOS_STATUS_E_BADMSG;
5776 }
5777}
Jeff Johnson295189b2012-06-20 16:38:30 -07005778/*
5779 * FUNCTION: WDA_DelBAReqCallback
5780 * send DEL BA RSP back to PE
5781 */
5782void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5783{
5784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5785 tWDA_CbContext *pWDA;
5786 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005788 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 if(NULL == pWdaParams)
5790 {
5791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005792 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 VOS_ASSERT(0) ;
5794 return ;
5795 }
5796 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5797 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 /* Notify TL about DEL BA in case of recipinet */
5799 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5800 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5801 {
5802 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 /*
5805 * No respone required for WDA_DELBA_IND so just free the request
5806 * param here
5807 */
5808 vos_mem_free(pDelBAReqParams);
5809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5810 vos_mem_free(pWdaParams);
5811 return ;
5812}
5813
Jeff Johnson295189b2012-06-20 16:38:30 -07005814/*
5815 * FUNCTION: WDA_ProcessDelBAReq
5816 * Request to WDI to Update the DELBA REQ params.
5817 */
5818VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5819 tDelBAParams *pDelBAReqParams)
5820{
5821 WDI_Status status = WDI_STATUS_SUCCESS ;
5822 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5823 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5824 sizeof(WDI_DelBAReqParamsType)) ;
5825 tWDA_ReqParams *pWdaParams ;
5826 tANI_U16 staIdx = 0;
5827 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005829 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 if(NULL == wdiDelBAReqParam)
5831 {
5832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 VOS_ASSERT(0);
5835 return VOS_STATUS_E_NOMEM;
5836 }
5837 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5838 if(NULL == pWdaParams)
5839 {
5840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_ASSERT(0);
5843 vos_mem_free(wdiDelBAReqParam);
5844 return VOS_STATUS_E_NOMEM;
5845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5847 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5848 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5849 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 pWdaParams->pWdaContext = pWDA;
5851 /* Store DEL BA pointer, as this will be used for response */
5852 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 /* store Params pass it to WDI */
5854 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5856 * maintained in WDA, so that WDA can retry for another BA session
5857 */
5858 staIdx = pDelBAReqParams->staIdx;
5859 tid = pDelBAReqParams->baTID;
5860 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 status = WDI_DelBAReq(wdiDelBAReqParam,
5862 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 if(IS_WDI_STATUS_FAILURE(status))
5864 {
5865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5866 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5868 vos_mem_free(pWdaParams->wdaMsgParam);
5869 vos_mem_free(pWdaParams);
5870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872}
Jeff Johnson295189b2012-06-20 16:38:30 -07005873/*
5874 * FUNCTION: WDA_AddTSReqCallback
5875 * send ADD TS RSP back to PE
5876 */
5877void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5878{
5879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5880 tWDA_CbContext *pWDA;
5881 tAddTsParams *pAddTsReqParams;
5882
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005884 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 if(NULL == pWdaParams)
5886 {
5887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 VOS_ASSERT(0) ;
5890 return ;
5891 }
5892 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5893 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5895 vos_mem_free(pWdaParams);
5896
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005897 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 return ;
5900}
5901
Jeff Johnson295189b2012-06-20 16:38:30 -07005902/*
5903 * FUNCTION: WDA_ProcessAddTSReq
5904 * Request to WDI to Update the ADD TS REQ params.
5905 */
5906VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5907 tAddTsParams *pAddTsReqParams)
5908{
5909 WDI_Status status = WDI_STATUS_SUCCESS ;
5910 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5911 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5912 sizeof(WDI_AddTSReqParamsType)) ;
5913 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(NULL == wdiAddTSReqParam)
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 VOS_ASSERT(0);
5921 return VOS_STATUS_E_NOMEM;
5922 }
5923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5924 if(NULL == pWdaParams)
5925 {
5926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 VOS_ASSERT(0);
5929 vos_mem_free(wdiAddTSReqParam);
5930 return VOS_STATUS_E_NOMEM;
5931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5933 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 //TS IE
5935 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5936 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5937 pAddTsReqParams->tspec.length;
5938
5939 //TS IE : TS INFO : TRAFFIC
5940 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5941 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5942 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5943 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5944 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5945 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5946 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5947 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5948 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5949 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5950 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5951 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5952 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5953 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5954 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5955 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5956
5957 //TS IE : TS INFO : SCHEDULE
5958 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5959 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5960 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5961 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 //TS IE
5963 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5964 pAddTsReqParams->tspec.nomMsduSz;
5965 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5966 pAddTsReqParams->tspec.maxMsduSz;
5967 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5968 pAddTsReqParams->tspec.minSvcInterval;
5969 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5970 pAddTsReqParams->tspec.maxSvcInterval;
5971 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5972 pAddTsReqParams->tspec.inactInterval;
5973 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5974 pAddTsReqParams->tspec.suspendInterval;
5975 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5976 pAddTsReqParams->tspec.svcStartTime;
5977 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5978 pAddTsReqParams->tspec.minDataRate;
5979 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5980 pAddTsReqParams->tspec.meanDataRate;
5981 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5982 pAddTsReqParams->tspec.peakDataRate;
5983 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5984 pAddTsReqParams->tspec.maxBurstSz;
5985 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5986 pAddTsReqParams->tspec.delayBound;
5987 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5988 pAddTsReqParams->tspec.minPhyRate;
5989 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5990 pAddTsReqParams->tspec.surplusBw;
5991 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5992 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 /* TODO: tAddTsParams doesn't have the following fields */
5994#if 0
5995 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5996 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5997 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5998 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5999#endif
6000 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6001
6002 pWdaParams->pWdaContext = pWDA;
6003 /* Store ADD TS pointer, as this will be used for response */
6004 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 /* store Params pass it to WDI */
6006 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 status = WDI_AddTSReq(wdiAddTSReqParam,
6008 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 if(IS_WDI_STATUS_FAILURE(status))
6010 {
6011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6012 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6014 vos_mem_free(pWdaParams);
6015 pAddTsReqParams->status = eSIR_FAILURE ;
6016 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006019}
6020
Jeff Johnson295189b2012-06-20 16:38:30 -07006021/*
6022 * FUNCTION: WDA_DelTSReqCallback
6023 * send DEL TS RSP back to PE
6024 */
6025void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6026{
6027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6031 vos_mem_free(pWdaParams->wdaMsgParam) ;
6032 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 /*
6034 * No respone required for WDA_DEL_TS_REQ so just free the request
6035 * param here
6036 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 return ;
6038}
6039
Jeff Johnson295189b2012-06-20 16:38:30 -07006040/*
6041 * FUNCTION: WDA_ProcessDelTSReq
6042 * Request to WDI to Update the DELTS REQ params.
6043 */
6044VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6045 tDelTsParams *pDelTSReqParams)
6046{
6047 WDI_Status status = WDI_STATUS_SUCCESS ;
6048 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6049 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6050 sizeof(WDI_DelTSReqParamsType)) ;
6051 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006053 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 if(NULL == wdiDelTSReqParam)
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 VOS_ASSERT(0);
6059 return VOS_STATUS_E_NOMEM;
6060 }
6061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6062 if(NULL == pWdaParams)
6063 {
6064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 VOS_ASSERT(0);
6067 vos_mem_free(wdiDelTSReqParam);
6068 return VOS_STATUS_E_NOMEM;
6069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6071 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6072 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6073 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6074 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 pWdaParams->pWdaContext = pWDA;
6076 /* Store DEL TS pointer, as this will be used for response */
6077 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 /* store Params pass it to WDI */
6079 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 status = WDI_DelTSReq(wdiDelTSReqParam,
6081 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 if(IS_WDI_STATUS_FAILURE(status))
6083 {
6084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6085 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6087 vos_mem_free(pWdaParams->wdaMsgParam);
6088 vos_mem_free(pWdaParams);
6089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006091}
Jeff Johnson295189b2012-06-20 16:38:30 -07006092/*
6093 * FUNCTION: WDA_UpdateBeaconParamsCallback
6094 * Free the memory. No need to send any response to PE in this case
6095 */
6096void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6097{
6098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 if(NULL == pWdaParams)
6102 {
6103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 VOS_ASSERT(0) ;
6106 return ;
6107 }
6108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6109 vos_mem_free(pWdaParams->wdaMsgParam) ;
6110 vos_mem_free(pWdaParams);
6111 /*
6112 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6113 * param here
6114 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 return ;
6116}
Jeff Johnson295189b2012-06-20 16:38:30 -07006117/*
6118 * FUNCTION: WDA_ProcessUpdateBeaconParams
6119 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6120 */
6121VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6122 tUpdateBeaconParams *pUpdateBeaconParams)
6123{
6124 WDI_Status status = WDI_STATUS_SUCCESS ;
6125 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6126 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6127 sizeof(WDI_UpdateBeaconParamsType)) ;
6128 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 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 == wdiUpdateBeaconParams)
6132 {
6133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 VOS_ASSERT(0);
6136 return VOS_STATUS_E_NOMEM;
6137 }
6138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6139 if(NULL == pWdaParams)
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 VOS_ASSERT(0);
6144 vos_mem_free(wdiUpdateBeaconParams);
6145 return VOS_STATUS_E_NOMEM;
6146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6148 pUpdateBeaconParams->bssIdx;
6149 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6150 pUpdateBeaconParams->fShortPreamble;
6151 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6152 pUpdateBeaconParams->fShortSlotTime;
6153 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6154 pUpdateBeaconParams->beaconInterval;
6155 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6156 pUpdateBeaconParams->llaCoexist;
6157 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6158 pUpdateBeaconParams->llbCoexist;
6159 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6160 pUpdateBeaconParams->llgCoexist;
6161 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6162 pUpdateBeaconParams->ht20MhzCoexist;
6163 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6164 pUpdateBeaconParams->llnNonGFCoexist;
6165 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6166 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6167 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6168 pUpdateBeaconParams->fRIFSMode;
6169 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6170 pUpdateBeaconParams->paramChangeBitmap;
6171 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6172
6173 pWdaParams->pWdaContext = pWDA;
6174 /* Store UpdateBeacon Req pointer, as this will be used for response */
6175 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 /* store Params pass it to WDI */
6177 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6179 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6180 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 if(IS_WDI_STATUS_FAILURE(status))
6182 {
6183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6184 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6186 vos_mem_free(pWdaParams->wdaMsgParam);
6187 vos_mem_free(pWdaParams);
6188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006190}
Jeff Johnson295189b2012-06-20 16:38:30 -07006191#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006192/*
6193 * FUNCTION: WDA_TSMStatsReqCallback
6194 * send TSM Stats RSP back to PE
6195 */
6196void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6197{
6198 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6199 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006200 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6201 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006202
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(NULL == pWdaParams)
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 VOS_ASSERT(0) ;
6210 return ;
6211 }
6212 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006213 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6214
6215 if(NULL == pGetTsmStatsReqParams)
6216 {
6217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6218 "%s: pGetTsmStatsReqParams received NULL", __func__);
6219 VOS_ASSERT(0);
6220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6221 vos_mem_free(pWdaParams);
6222 return;
6223 }
6224
6225 pTsmRspParams =
6226 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 if( NULL == pTsmRspParams )
6228 {
6229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006230 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 VOS_ASSERT( 0 );
6232 return ;
6233 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006234 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6235 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6236 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6237
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6239 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6240 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6241 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6242 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6243 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6244 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6245 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6246 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6247 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006248
6249 /* Assign get tsm stats req req (backup) in to the response */
6250 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6251
6252 /* free WDI command buffer */
6253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6254 vos_mem_free(pWdaParams);
6255
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 return ;
6258}
6259
6260
Jeff Johnson295189b2012-06-20 16:38:30 -07006261/*
6262 * FUNCTION: WDA_ProcessTsmStatsReq
6263 * Request to WDI to get the TSM Stats params.
6264 */
6265VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006266 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006267{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006268 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006270 tWDA_ReqParams *pWdaParams = NULL;
6271 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6272
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006274 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6276 sizeof(WDI_TSMStatsReqParamsType));
6277 if(NULL == wdiTSMReqParam)
6278 {
6279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 VOS_ASSERT(0);
6282 return VOS_STATUS_E_NOMEM;
6283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6285 if(NULL == pWdaParams)
6286 {
6287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 VOS_ASSERT(0);
6290 vos_mem_free(wdiTSMReqParam);
6291 return VOS_STATUS_E_NOMEM;
6292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6294 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6295 pTsmStats->bssId,
6296 sizeof(wpt_macAddr));
6297 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6298
6299 pWdaParams->pWdaContext = pWDA;
6300 /* Store TSM Stats pointer, as this will be used for response */
6301 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006302 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 status = WDI_TSMStatsReq(wdiTSMReqParam,
6304 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 if(IS_WDI_STATUS_FAILURE(status))
6306 {
6307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6308 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006309 vos_mem_free(pWdaParams);
6310
6311 pGetTsmStatsRspParams =
6312 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6313 if(NULL == pGetTsmStatsRspParams)
6314 {
6315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6316 "%s: VOS MEM Alloc Failure", __func__);
6317 VOS_ASSERT(0);
6318 vos_mem_free(pTsmStats);
6319 return VOS_STATUS_E_NOMEM;
6320 }
6321 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6322 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6323 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6324
6325 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 return CONVERT_WDI2VOS_STATUS(status) ;
6328}
6329#endif
6330/*
6331 * FUNCTION: WDA_SendBeaconParamsCallback
6332 * No need to send any response to PE in this case
6333 */
6334void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6335{
6336
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006338 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 return ;
6340}
Jeff Johnson295189b2012-06-20 16:38:30 -07006341/*
6342 * FUNCTION: WDA_ProcessSendBeacon
6343 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6344 * start beacon trasmission
6345 */
6346VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6347 tSendbeaconParams *pSendbeaconParams)
6348{
6349 WDI_Status status = WDI_STATUS_SUCCESS ;
6350 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6354 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6355 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6356 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6358 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306359 /* p2pIeOffset should be atleast greater than timIeOffset */
6360 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6361 (pSendbeaconParams->p2pIeOffset <
6362 pSendbeaconParams->timIeOffset))
6363 {
6364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6365 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6366 VOS_ASSERT( 0 );
6367 return WDI_STATUS_E_FAILURE;
6368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6370 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 /* Copy the beacon template to local buffer */
6372 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6373 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6374 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6375
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6377 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 if(IS_WDI_STATUS_FAILURE(status))
6379 {
6380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6381 "Failure in SEND BEACON REQ Params WDI API" );
6382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 vos_mem_free(pSendbeaconParams);
6384 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006385}
Jeff Johnson295189b2012-06-20 16:38:30 -07006386/*
6387 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6388 * No need to send any response to PE in this case
6389 */
6390void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6391{
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006393 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 return ;
6395}
6396
Jeff Johnson295189b2012-06-20 16:38:30 -07006397/*
6398 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6399 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6400 * send probe response
6401 */
6402VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6403 tSendProbeRespParams *pSendProbeRspParams)
6404{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006405 WDI_Status status = WDI_STATUS_SUCCESS;
6406 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6407 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006409 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006410
6411 if (!wdiSendProbeRspParam)
6412 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6413
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006415 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006417 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 /* Copy the Probe Response template to local buffer */
6420 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006421 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 pSendProbeRspParams->pProbeRespTemplate,
6423 pSendProbeRspParams->probeRespTemplateLen);
6424 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006425 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006426 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6427 WDI_PROBE_REQ_BITMAP_IE_LEN);
6428
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006429 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006430
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006431 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 if(IS_WDI_STATUS_FAILURE(status))
6434 {
6435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6436 "Failure in SEND Probe RSP Params WDI API" );
6437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006439 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441}
Jeff Johnson295189b2012-06-20 16:38:30 -07006442#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6443/*
6444 * FUNCTION: WDA_SetMaxTxPowerCallBack
6445 * send the response to PE with power value received from WDI
6446 */
6447void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6448 void* pUserData)
6449{
6450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6451 tWDA_CbContext *pWDA = NULL;
6452 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6453
6454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006455 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 if(NULL == pWdaParams)
6457 {
6458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006459 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 VOS_ASSERT(0) ;
6461 return ;
6462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6464 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 if( NULL == pMaxTxPowerParams )
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006468 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006469 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6471 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 return ;
6473 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006474
Jeff Johnson295189b2012-06-20 16:38:30 -07006475
6476 /*need to free memory for the pointers used in the
6477 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6479 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006481
Jeff Johnson295189b2012-06-20 16:38:30 -07006482
6483 /* send response to UMAC*/
6484 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6485
6486 return;
6487}
Jeff Johnson295189b2012-06-20 16:38:30 -07006488/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006489 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 * Request to WDI to send set Max Tx Power Request
6491 */
6492 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6493 tMaxTxPowerParams *MaxTxPowerParams)
6494{
6495 WDI_Status status = WDI_STATUS_SUCCESS;
6496 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6497 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006498
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006501
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6503 sizeof(WDI_SetMaxTxPowerParamsType));
6504 if(NULL == wdiSetMaxTxPowerParams)
6505 {
6506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 VOS_ASSERT(0);
6509 return VOS_STATUS_E_NOMEM;
6510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6512 if(NULL == pWdaParams)
6513 {
6514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 vos_mem_free(wdiSetMaxTxPowerParams);
6517 VOS_ASSERT(0);
6518 return VOS_STATUS_E_NOMEM;
6519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 /* Copy.Max.Tx.Power Params to WDI structure */
6521 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6522 MaxTxPowerParams->bssId,
6523 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6525 MaxTxPowerParams->selfStaMacAddr,
6526 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6528 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 pWdaParams->pWdaContext = pWDA;
6531 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 /* store Params pass it to WDI */
6533 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6535 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 if(IS_WDI_STATUS_FAILURE(status))
6537 {
6538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6539 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6541 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006542 /* send response to UMAC*/
6543 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 }
6545 return CONVERT_WDI2VOS_STATUS(status);
6546
6547}
Jeff Johnson295189b2012-06-20 16:38:30 -07006548#endif
schang86c22c42013-03-13 18:41:24 -07006549
6550/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006551 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6552 * send the response to PE with power value received from WDI
6553 */
6554void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6555 *pwdiSetMaxTxPowerPerBandRsp,
6556 void* pUserData)
6557{
6558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6559 tWDA_CbContext *pWDA = NULL;
6560 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6561
6562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6563 "<------ %s ", __func__);
6564 if (NULL == pWdaParams)
6565 {
6566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6567 "%s: pWdaParams received NULL", __func__);
6568 VOS_ASSERT(0);
6569 return ;
6570 }
6571 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6572 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6573 if ( NULL == pMxTxPwrPerBandParams )
6574 {
6575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6576 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6577 VOS_ASSERT(0);
6578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6579 vos_mem_free(pWdaParams);
6580 return;
6581 }
6582
6583 /*need to free memory for the pointers used in the
6584 WDA Process.Set Max Tx Power Req function*/
6585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6586 vos_mem_free(pWdaParams);
6587 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6588
6589 /* send response to UMAC*/
6590 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6591 pMxTxPwrPerBandParams, 0);
6592
6593 return;
6594}
6595
6596/*
6597 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6598 * Request to WDI to send set Max Tx Power Per band Request
6599 */
6600 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6601 tMaxTxPowerPerBandParams
6602 *MaxTxPowerPerBandParams)
6603{
6604 WDI_Status status = WDI_STATUS_SUCCESS;
6605 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6606 tWDA_ReqParams *pWdaParams = NULL;
6607
6608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6609 "------> %s ", __func__);
6610
6611 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6612 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6613
6614 if (NULL == wdiSetMxTxPwrPerBandParams)
6615 {
6616 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6617 "%s: VOS MEM Alloc Failure", __func__);
6618 VOS_ASSERT(0);
6619 return VOS_STATUS_E_NOMEM;
6620 }
6621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6622 if (NULL == pWdaParams)
6623 {
6624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6625 "%s: VOS MEM Alloc Failure", __func__);
6626 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6627 VOS_ASSERT(0);
6628 return VOS_STATUS_E_NOMEM;
6629 }
6630 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6631 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6632 MaxTxPowerPerBandParams->bandInfo;
6633 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6634 MaxTxPowerPerBandParams->power;
6635 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6636 pWdaParams->pWdaContext = pWDA;
6637 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6638 /* store Params pass it to WDI */
6639 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6640 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6641 WDA_SetMaxTxPowerPerBandCallBack,
6642 pWdaParams);
6643 if (IS_WDI_STATUS_FAILURE(status))
6644 {
6645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6646 "Failure in SET MAX TX Power REQ Params WDI API,"
6647 " free all the memory");
6648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6649 vos_mem_free(pWdaParams);
6650 /* send response to UMAC*/
6651 WDA_SendMsg(pWDA,
6652 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6653 MaxTxPowerPerBandParams, 0);
6654 }
6655 return CONVERT_WDI2VOS_STATUS(status);
6656}
6657
6658/*
schang86c22c42013-03-13 18:41:24 -07006659 * FUNCTION: WDA_SetTxPowerCallBack
6660 * send the response to PE with power value received from WDI
6661 */
6662void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6663 void* pUserData)
6664{
6665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6666 tWDA_CbContext *pWDA = NULL;
6667 tSirSetTxPowerReq *pTxPowerParams = NULL;
6668
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6670 "<------ %s ", __func__);
6671 if(NULL == pWdaParams)
6672 {
6673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6674 "%s: pWdaParams received NULL", __func__);
6675 VOS_ASSERT(0) ;
6676 return ;
6677 }
6678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6679 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6680 if(NULL == pTxPowerParams)
6681 {
6682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6683 "%s: pTxPowerParams received NULL " ,__func__);
6684 VOS_ASSERT(0);
6685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6686 vos_mem_free(pWdaParams);
6687 return ;
6688 }
6689
6690 /*need to free memory for the pointers used in the
6691 WDA Process.Set Max Tx Power Req function*/
6692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6693 vos_mem_free(pWdaParams);
6694
6695 /* send response to UMAC*/
6696 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6697 return;
6698}
6699
6700/*
6701 * FUNCTION: WDA_ProcessSetTxPowerReq
6702 * Request to WDI to send set Tx Power Request
6703 */
6704 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6705 tSirSetTxPowerReq *txPowerParams)
6706{
6707 WDI_Status status = WDI_STATUS_SUCCESS;
6708 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6709 tWDA_ReqParams *pWdaParams = NULL;
6710
6711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6712 "------> %s ", __func__);
6713
6714 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6715 sizeof(WDI_SetTxPowerParamsType));
6716 if(NULL == wdiSetTxPowerParams)
6717 {
6718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6719 "%s: VOS MEM Alloc Failure", __func__);
6720 VOS_ASSERT(0);
6721 return VOS_STATUS_E_NOMEM;
6722 }
6723 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6724 if(NULL == pWdaParams)
6725 {
6726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6727 "%s: VOS MEM Alloc Failure", __func__);
6728 vos_mem_free(wdiSetTxPowerParams);
6729 VOS_ASSERT(0);
6730 return VOS_STATUS_E_NOMEM;
6731 }
6732 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6733 txPowerParams->bssIdx;
6734 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6735 txPowerParams->mwPower;
6736 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6737 pWdaParams->pWdaContext = pWDA;
6738 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6739 /* store Params pass it to WDI */
6740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6741 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6742 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6743 if(IS_WDI_STATUS_FAILURE(status))
6744 {
6745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6746 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6748 vos_mem_free(pWdaParams);
6749 /* send response to UMAC*/
6750 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6751 }
6752 return CONVERT_WDI2VOS_STATUS(status);
6753}
6754
Jeff Johnson295189b2012-06-20 16:38:30 -07006755/*
6756 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6757 * Free the memory. No need to send any response to PE in this case
6758 */
6759void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6760{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6762
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006764 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006765
6766 if(NULL == pWdaParams)
6767 {
6768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006769 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006770 VOS_ASSERT(0) ;
6771 return ;
6772 }
6773
6774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6775 vos_mem_free(pWdaParams->wdaMsgParam) ;
6776 vos_mem_free(pWdaParams);
6777
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 /*
6779 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6780 * so just free the request param here
6781 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 return ;
6783}
6784
Jeff Johnson295189b2012-06-20 16:38:30 -07006785/*
6786 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6787 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6788 */
6789VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6790 tP2pPsParams *pP2pPsConfigParams)
6791{
6792 WDI_Status status = WDI_STATUS_SUCCESS ;
6793 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6794 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6795 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006796 tWDA_ReqParams *pWdaParams = NULL;
6797
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006799 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 if(NULL == wdiSetP2PGONOAReqParam)
6801 {
6802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_ASSERT(0);
6805 return VOS_STATUS_E_NOMEM;
6806 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006807
6808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6809 if(NULL == pWdaParams)
6810 {
6811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006812 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006813 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006814 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006815 VOS_ASSERT(0);
6816 return VOS_STATUS_E_NOMEM;
6817 }
6818
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6820 pP2pPsConfigParams->opp_ps;
6821 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6822 pP2pPsConfigParams->ctWindow;
6823 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6824 pP2pPsConfigParams->count;
6825 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6826 pP2pPsConfigParams->duration;
6827 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6828 pP2pPsConfigParams->interval;
6829 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6830 pP2pPsConfigParams->single_noa_duration;
6831 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6832 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006833
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6835 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006836 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6837
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006839 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6840 pWdaParams->pWdaContext = pWDA;
6841
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006843 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6844
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 if(IS_WDI_STATUS_FAILURE(status))
6846 {
6847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6848 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6850 vos_mem_free(pWdaParams->wdaMsgParam);
6851 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 return CONVERT_WDI2VOS_STATUS(status);
6854
Jeff Johnson295189b2012-06-20 16:38:30 -07006855}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306856
6857#ifdef FEATURE_WLAN_TDLS
6858/*
6859 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6860 * Free the memory. No need to send any response to PE in this case
6861 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306862void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6863 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306864{
6865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6866 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306867 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306868
6869
6870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6871 "<------ %s " ,__func__);
6872 if(NULL == pWdaParams)
6873 {
6874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6875 "%s: pWdaParams received NULL", __func__);
6876 VOS_ASSERT(0) ;
6877 return ;
6878 }
6879 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6880
6881 if(NULL == pWdaParams)
6882 {
6883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6884 "%s: pWdaParams received NULL", __func__);
6885 VOS_ASSERT(0) ;
6886 return ;
6887 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306888 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6889 if( NULL == pTdlsLinkEstablishParams )
6890 {
6891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6892 "%s: pTdlsLinkEstablishParams "
6893 "received NULL " ,__func__);
6894 VOS_ASSERT(0);
6895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6896 vos_mem_free(pWdaParams);
6897 return ;
6898 }
6899 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6900 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306902 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306903 /* send response to UMAC*/
6904 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6905
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306906 return ;
6907}
6908
6909VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6910 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6911{
6912 WDI_Status status = WDI_STATUS_SUCCESS ;
6913 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6914 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6915 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6916 tWDA_ReqParams *pWdaParams = NULL;
6917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6918 "------> %s " ,__func__);
6919 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6920 {
6921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6922 "%s: VOS MEM Alloc Failure", __func__);
6923 VOS_ASSERT(0);
6924 return VOS_STATUS_E_NOMEM;
6925 }
6926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6927 if(NULL == pWdaParams)
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6930 "%s: VOS MEM Alloc Failure", __func__);
6931 vos_mem_free(pTdlsLinkEstablishParams);
6932 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6933 VOS_ASSERT(0);
6934 return VOS_STATUS_E_NOMEM;
6935 }
6936 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306937 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306938 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306939 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306940 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306941 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306942 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306943 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306944 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306945 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306946
6947 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6948 /* Store msg pointer from PE, as this will be used for response */
6949 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6950 /* store Params pass it to WDI */
6951 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6952 pWdaParams->pWdaContext = pWDA;
6953
6954 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6955 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6956 WDA_SetTDLSLinkEstablishReqParamsCallback,
6957 pWdaParams);
6958 if(IS_WDI_STATUS_FAILURE(status))
6959 {
6960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6961 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6963 vos_mem_free(pWdaParams->wdaMsgParam);
6964 vos_mem_free(pWdaParams);
6965 }
6966 return CONVERT_WDI2VOS_STATUS(status);
6967}
6968#endif
6969
6970
Jeff Johnson295189b2012-06-20 16:38:30 -07006971#ifdef WLAN_FEATURE_VOWIFI_11R
6972/*
6973 * FUNCTION: WDA_AggrAddTSReqCallback
6974 * send ADD AGGREGATED TS RSP back to PE
6975 */
6976void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6977{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6979 tWDA_CbContext *pWDA;
6980 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006983 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006984 if(NULL == pWdaParams)
6985 {
6986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006987 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006988 VOS_ASSERT(0) ;
6989 return ;
6990 }
6991
6992 pWDA = pWdaParams->pWdaContext;
6993 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994
6995 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6996 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006997 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007000
7001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 return ;
7004}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007005/*
7006 * FUNCTION: WDA_ProcessAddTSReq
7007 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7008 */
7009VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7010 tAggrAddTsParams *pAggrAddTsReqParams)
7011{
7012 WDI_Status status = WDI_STATUS_SUCCESS ;
7013 int i;
7014 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007015 tWDA_ReqParams *pWdaParams = NULL;
7016
7017
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7021 sizeof(WDI_AggrAddTSReqParamsType)) ;
7022 if(NULL == wdiAggrAddTSReqParam)
7023 {
7024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 VOS_ASSERT(0);
7027 return VOS_STATUS_E_NOMEM;
7028 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007029
7030
7031 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7032 if(NULL == pWdaParams)
7033 {
7034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007035 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007036 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007037 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007038 VOS_ASSERT(0);
7039 return VOS_STATUS_E_NOMEM;
7040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7042 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7043 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7045 {
7046 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7047 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7048 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7050 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7051 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7052 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7053 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7054 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7055 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7056 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7057 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7058 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7059 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7060 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7061 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7062 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7063 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7064 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7066 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7068 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7069 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7070 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7071 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7072 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7073 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7074 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7075 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7076 pAggrAddTsReqParams->tspec[i].inactInterval;
7077 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7078 pAggrAddTsReqParams->tspec[i].suspendInterval;
7079 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7080 pAggrAddTsReqParams->tspec[i].svcStartTime;
7081 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7082 pAggrAddTsReqParams->tspec[i].minDataRate;
7083 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7084 pAggrAddTsReqParams->tspec[i].meanDataRate;
7085 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7086 pAggrAddTsReqParams->tspec[i].peakDataRate;
7087 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7088 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7089 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7090 pAggrAddTsReqParams->tspec[i].delayBound;
7091 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7092 pAggrAddTsReqParams->tspec[i].minPhyRate;
7093 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7094 pAggrAddTsReqParams->tspec[i].surplusBw;
7095 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7096 pAggrAddTsReqParams->tspec[i].mediumTime;
7097 }
7098
7099 /* TODO: tAggrAddTsParams doesn't have the following fields */
7100#if 0
7101 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7102 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7103 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7104 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7105#endif
7106 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7107
7108 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007109 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007111 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7112
7113 pWdaParams->pWdaContext = pWDA;
7114
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007116 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7117
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 if(IS_WDI_STATUS_FAILURE(status))
7119 {
7120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7121 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7123 vos_mem_free(pWdaParams);
7124
7125 /* send the failure response back to PE*/
7126 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7127 {
7128 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7129 }
7130
7131 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7132 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 return CONVERT_WDI2VOS_STATUS(status) ;
7135}
7136#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007137/*
7138 * FUNCTION: WDA_EnterImpsReqCallback
7139 * send Enter IMPS RSP back to PE
7140 */
7141void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7142{
7143 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007146 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 return ;
7148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
7150 * FUNCTION: WDA_ProcessEnterImpsReq
7151 * Request to WDI to Enter IMPS power state.
7152 */
7153VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7154{
7155 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007157 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 if(IS_WDI_STATUS_FAILURE(status))
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7162 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007163 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 return CONVERT_WDI2VOS_STATUS(status) ;
7166}
Jeff Johnson295189b2012-06-20 16:38:30 -07007167/*
7168 * FUNCTION: WDA_ExitImpsReqCallback
7169 * send Exit IMPS RSP back to PE
7170 */
7171void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7172{
7173 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007175 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007176 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 return ;
7178}
Jeff Johnson295189b2012-06-20 16:38:30 -07007179/*
7180 * FUNCTION: WDA_ProcessExitImpsReq
7181 * Request to WDI to Exit IMPS power state.
7182 */
7183VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7184{
7185 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 if(IS_WDI_STATUS_FAILURE(status))
7190 {
7191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007193 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 return CONVERT_WDI2VOS_STATUS(status) ;
7196}
Jeff Johnson295189b2012-06-20 16:38:30 -07007197/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007198 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 * send Enter BMPS RSP back to PE
7200 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007201void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007202{
7203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7204 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007205 tEnterBmpsParams *pEnterBmpsRspParams;
7206
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209 if(NULL == pWdaParams)
7210 {
7211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007212 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 VOS_ASSERT(0) ;
7214 return ;
7215 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007216
7217 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7218 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7219
7220 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007221 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007222
7223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007225 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7226
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 return ;
7228}
Jeff Johnson295189b2012-06-20 16:38:30 -07007229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007230 * FUNCTION: WDA_EnterBmpsReqCallback
7231 * Free memory and send Enter BMPS RSP back to PE.
7232 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7233 */
7234void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7235{
7236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7237 tWDA_CbContext *pWDA;
7238 tEnterBmpsParams *pEnterBmpsRspParams;
7239
7240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7241 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7242
7243 if(NULL == pWdaParams)
7244 {
7245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7246 "%s: pWdaParams received NULL", __func__);
7247 VOS_ASSERT(0);
7248 return;
7249 }
7250
7251 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7252 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7253 pEnterBmpsRspParams->status = wdiStatus;
7254
7255 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7256 {
7257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7258 vos_mem_free(pWdaParams);
7259 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7260 }
7261
7262 return;
7263}
7264/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 * FUNCTION: WDA_ProcessEnterBmpsReq
7266 * Request to WDI to Enter BMPS power state.
7267 */
7268VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7269 tEnterBmpsParams *pEnterBmpsReqParams)
7270{
7271 WDI_Status status = WDI_STATUS_SUCCESS;
7272 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7273 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7277 {
7278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007279 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 VOS_ASSERT(0);
7281 return VOS_STATUS_E_FAILURE;
7282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7284 if (NULL == wdiEnterBmpsReqParams)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007289 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7290 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 return VOS_STATUS_E_NOMEM;
7292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007293 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7294 if (NULL == pWdaParams)
7295 {
7296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007298 VOS_ASSERT(0);
7299 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007300 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7301 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 return VOS_STATUS_E_NOMEM;
7303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7305 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7306 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7307 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007308 // For CCX and 11R Roaming
7309 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7310 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7311 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007312 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7313 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007314
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 /* Store param pointer as passed in by caller */
7316 /* store Params pass it to WDI */
7317 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007318 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007321 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 if (IS_WDI_STATUS_FAILURE(status))
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7325 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007327 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007329 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 return CONVERT_WDI2VOS_STATUS(status);
7332}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007333
7334
7335static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7336 WDI_Status wdiStatus,
7337 tExitBmpsParams *pExitBmpsReqParams)
7338{
7339 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7340
7341 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7342}
7343
7344
Jeff Johnson295189b2012-06-20 16:38:30 -07007345/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007346 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 * send Exit BMPS RSP back to PE
7348 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007349void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007350{
7351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7352 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007353 tExitBmpsParams *pExitBmpsRspParams;
7354
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007356 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 if(NULL == pWdaParams)
7358 {
7359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007360 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 VOS_ASSERT(0) ;
7362 return ;
7363 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007364
7365 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7366 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7367
7368 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007369 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007370
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7372 vos_mem_free(pWdaParams) ;
7373
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007374 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 return ;
7376}
Jeff Johnson295189b2012-06-20 16:38:30 -07007377/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007378 * FUNCTION: WDA_ExitBmpsReqCallback
7379 * Free memory and send Exit BMPS RSP back to PE.
7380 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7381 */
7382void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7383{
7384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7385 tWDA_CbContext *pWDA;
7386 tExitBmpsParams *pExitBmpsRspParams;
7387
7388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7389 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7390
7391 if(NULL == pWdaParams)
7392 {
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7394 "%s: pWdaParams received NULL", __func__);
7395 VOS_ASSERT(0);
7396 return;
7397 }
7398
7399 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7400 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7401 pExitBmpsRspParams->status = wdiStatus;
7402
7403 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7404 {
7405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7406 vos_mem_free(pWdaParams);
7407 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7408 }
7409
7410 return;
7411}
7412/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 * FUNCTION: WDA_ProcessExitBmpsReq
7414 * Request to WDI to Exit BMPS power state.
7415 */
7416VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7417 tExitBmpsParams *pExitBmpsReqParams)
7418{
7419 WDI_Status status = WDI_STATUS_SUCCESS ;
7420 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7421 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7422 sizeof(WDI_ExitBmpsReqParamsType)) ;
7423 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 if(NULL == wdiExitBmpsReqParams)
7427 {
7428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007431 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 return VOS_STATUS_E_NOMEM;
7433 }
7434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7435 if(NULL == pWdaParams)
7436 {
7437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 VOS_ASSERT(0);
7440 vos_mem_free(wdiExitBmpsReqParams);
7441 return VOS_STATUS_E_NOMEM;
7442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007444
7445 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7446
Yue Ma7f44bbe2013-04-12 11:47:39 -07007447 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7448 wdiExitBmpsReqParams->pUserData = pWdaParams;
7449
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 /* Store param pointer as passed in by caller */
7451 /* store Params pass it to WDI */
7452 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7453 pWdaParams->pWdaContext = pWDA;
7454 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007455 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007456 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 if(IS_WDI_STATUS_FAILURE(status))
7458 {
7459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7460 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7462 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007463 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 return CONVERT_WDI2VOS_STATUS(status) ;
7466}
Jeff Johnson295189b2012-06-20 16:38:30 -07007467/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007468 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 * send Enter UAPSD RSP back to PE
7470 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007471void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007472{
7473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7474 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007475 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007477 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 if(NULL == pWdaParams)
7479 {
7480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 VOS_ASSERT(0) ;
7483 return ;
7484 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007485
7486 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7487 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7488
7489 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007490 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007491
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7493 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007494 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 return ;
7496}
Jeff Johnson295189b2012-06-20 16:38:30 -07007497/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007498 * FUNCTION: WDA_EnterUapsdReqCallback
7499 * Free memory and send Enter UAPSD RSP back to PE.
7500 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7501 */
7502void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7503{
7504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7505 tWDA_CbContext *pWDA;
7506 tUapsdParams *pEnterUapsdRsqParams;
7507
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7509 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7510
7511 if(NULL == pWdaParams)
7512 {
7513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7514 "%s: pWdaParams received NULL", __func__);
7515 VOS_ASSERT(0);
7516 return;
7517 }
7518
7519 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7520 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7521 pEnterUapsdRsqParams->status = wdiStatus;
7522
7523 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7524 {
7525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7526 vos_mem_free(pWdaParams);
7527 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7528 }
7529
7530 return;
7531}
7532/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 * FUNCTION: WDA_ProcessEnterUapsdReq
7534 * Request to WDI to Enter UAPSD power state.
7535 */
7536VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7537 tUapsdParams *pEnterUapsdReqParams)
7538{
7539 WDI_Status status = WDI_STATUS_SUCCESS ;
7540 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7541 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7542 sizeof(WDI_EnterUapsdReqParamsType)) ;
7543 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 if(NULL == wdiEnterUapsdReqParams)
7547 {
7548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_ASSERT(0);
7551 return VOS_STATUS_E_NOMEM;
7552 }
7553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7554 if(NULL == pWdaParams)
7555 {
7556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 VOS_ASSERT(0);
7559 vos_mem_free(wdiEnterUapsdReqParams);
7560 return VOS_STATUS_E_NOMEM;
7561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7563 pEnterUapsdReqParams->beDeliveryEnabled;
7564 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7565 pEnterUapsdReqParams->beTriggerEnabled;
7566 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7567 pEnterUapsdReqParams->bkDeliveryEnabled;
7568 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7569 pEnterUapsdReqParams->bkTriggerEnabled;
7570 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7571 pEnterUapsdReqParams->viDeliveryEnabled;
7572 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7573 pEnterUapsdReqParams->viTriggerEnabled;
7574 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7575 pEnterUapsdReqParams->voDeliveryEnabled;
7576 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7577 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007578 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007579
Yue Ma7f44bbe2013-04-12 11:47:39 -07007580 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7581 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007582
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 /* Store param pointer as passed in by caller */
7584 /* store Params pass it to WDI */
7585 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7586 pWdaParams->pWdaContext = pWDA;
7587 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007589 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 if(IS_WDI_STATUS_FAILURE(status))
7591 {
7592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7593 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7594 vos_mem_free(pWdaParams->wdaMsgParam) ;
7595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7596 vos_mem_free(pWdaParams) ;
7597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 return CONVERT_WDI2VOS_STATUS(status) ;
7599}
Jeff Johnson295189b2012-06-20 16:38:30 -07007600/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007601 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 * send Exit UAPSD RSP back to PE
7603 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007604void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007605{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007606
7607 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7608 tWDA_CbContext *pWDA;
7609 tExitUapsdParams *pExitUapsdRspParams;
7610
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007612 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007613 if(NULL == pWdaParams)
7614 {
7615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007616 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007617 VOS_ASSERT(0);
7618 return;
7619 }
7620
7621 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7622 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7623
7624 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007625 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007626
7627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7628 vos_mem_free(pWdaParams) ;
7629
7630 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 return ;
7632}
Jeff Johnson295189b2012-06-20 16:38:30 -07007633/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007634 * FUNCTION: WDA_ExitUapsdReqCallback
7635 * Free memory and send Exit UAPSD RSP back to PE.
7636 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7637 */
7638void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7639{
7640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7641 tWDA_CbContext *pWDA;
7642 tExitUapsdParams *pExitUapsdRspParams;
7643
7644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7645 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7646
7647 if(NULL == pWdaParams)
7648 {
7649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7650 "%s: pWdaParams received NULL", __func__);
7651 VOS_ASSERT(0);
7652 return;
7653 }
7654
7655 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7656 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7657 pExitUapsdRspParams->status = wdiStatus;
7658
7659 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7660 {
7661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7662 vos_mem_free(pWdaParams);
7663 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7664 }
7665
7666 return;
7667}
7668/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 * FUNCTION: WDA_ProcessExitUapsdReq
7670 * Request to WDI to Exit UAPSD power state.
7671 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007672VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7673 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007674{
7675 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007676 tWDA_ReqParams *pWdaParams ;
7677 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7678 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7679 sizeof(WDI_ExitUapsdReqParamsType)) ;
7680
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007682 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007683
7684 if(NULL == wdiExitUapsdReqParams)
7685 {
7686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007687 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007688 VOS_ASSERT(0);
7689 return VOS_STATUS_E_NOMEM;
7690 }
7691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7692 if(NULL == pWdaParams)
7693 {
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007695 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007696 VOS_ASSERT(0);
7697 vos_mem_free(wdiExitUapsdReqParams);
7698 return VOS_STATUS_E_NOMEM;
7699 }
7700
7701 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007702 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7703 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007704
7705 /* Store param pointer as passed in by caller */
7706 /* store Params pass it to WDI */
7707 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7708 pWdaParams->pWdaContext = pWDA;
7709 pWdaParams->wdaMsgParam = pExitUapsdParams;
7710
Yue Ma7f44bbe2013-04-12 11:47:39 -07007711 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 if(IS_WDI_STATUS_FAILURE(status))
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007716 vos_mem_free(pWdaParams->wdaMsgParam) ;
7717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7718 vos_mem_free(pWdaParams) ;
7719
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 return CONVERT_WDI2VOS_STATUS(status) ;
7722}
7723
Jeff Johnson295189b2012-06-20 16:38:30 -07007724/*
7725 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7726 *
7727 */
7728void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7729{
7730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 if(NULL == pWdaParams)
7734 {
7735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 VOS_ASSERT(0) ;
7738 return ;
7739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 if( pWdaParams != NULL )
7741 {
7742 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7743 {
7744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7745 }
7746 if( pWdaParams->wdaMsgParam != NULL )
7747 {
7748 vos_mem_free(pWdaParams->wdaMsgParam) ;
7749 }
7750 vos_mem_free(pWdaParams) ;
7751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 return ;
7753}
Jeff Johnson295189b2012-06-20 16:38:30 -07007754/*
7755 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7756 * Request to WDI to set the power save params at start.
7757 */
7758VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7759 tSirPowerSaveCfg *pPowerSaveCfg)
7760{
7761 WDI_Status status = WDI_STATUS_SUCCESS ;
7762 tHalCfg *tlvStruct = NULL ;
7763 tANI_U8 *tlvStructStart = NULL ;
7764 v_PVOID_t *configParam;
7765 tANI_U32 configParamSize;
7766 tANI_U32 *configDataValue;
7767 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7768 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007770 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007771 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7772 {
7773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007774 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007776 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 return VOS_STATUS_E_FAILURE;
7778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7780 if (NULL == wdiPowerSaveCfg)
7781 {
7782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007785 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 return VOS_STATUS_E_NOMEM;
7787 }
7788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7789 if(NULL == pWdaParams)
7790 {
7791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 VOS_ASSERT(0);
7794 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007795 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 return VOS_STATUS_E_NOMEM;
7797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7799 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 if(NULL == configParam)
7801 {
7802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007803 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007804 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 vos_mem_free(pWdaParams);
7806 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007807 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 return VOS_STATUS_E_NOMEM;
7809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 vos_mem_set(configParam, configParamSize, 0);
7811 wdiPowerSaveCfg->pConfigBuffer = configParam;
7812 tlvStruct = (tHalCfg *)configParam;
7813 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7815 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7816 tlvStruct->length = sizeof(tANI_U32);
7817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7818 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7820 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7822 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7823 tlvStruct->length = sizeof(tANI_U32);
7824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7825 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7829 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7830 tlvStruct->length = sizeof(tANI_U32);
7831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7832 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7836 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7837 tlvStruct->length = sizeof(tANI_U32);
7838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7839 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7843 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7844 tlvStruct->length = sizeof(tANI_U32);
7845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7846 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7848 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7850 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7851 tlvStruct->length = sizeof(tANI_U32);
7852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7853 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7855 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7857 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7858 tlvStruct->length = sizeof(tANI_U32);
7859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7860 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7864 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7865 tlvStruct->length = sizeof(tANI_U32);
7866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7867 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7871 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7872 tlvStruct->length = sizeof(tANI_U32);
7873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7874 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7875 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7876 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7878 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7879 tlvStruct->length = sizeof(tANI_U32);
7880 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7881 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7883 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7885 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7886 tlvStruct->length = sizeof(tANI_U32);
7887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7888 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7890 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 /* store Params pass it to WDI */
7894 pWdaParams->wdaMsgParam = configParam;
7895 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7896 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7898 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 if(IS_WDI_STATUS_FAILURE(status))
7900 {
7901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7902 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7903 vos_mem_free(pWdaParams->wdaMsgParam);
7904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7905 vos_mem_free(pWdaParams);
7906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 return CONVERT_WDI2VOS_STATUS(status);
7909}
Jeff Johnson295189b2012-06-20 16:38:30 -07007910/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007911 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 *
7913 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007914void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007915{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7917
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007919 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007920
7921 if(NULL == pWdaParams)
7922 {
7923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7924 "%s: pWdaParams received NULL", __func__);
7925 VOS_ASSERT(0);
7926 return ;
7927 }
7928
7929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 vos_mem_free(pWdaParams);
7931
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 return ;
7933}
Jeff Johnson295189b2012-06-20 16:38:30 -07007934/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007935 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7936 * Free memory.
7937 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7938 */
7939void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7940{
7941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7942
7943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7944 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7945
7946 if(NULL == pWdaParams)
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7949 "%s: pWdaParams received NULL", __func__);
7950 VOS_ASSERT(0);
7951 return;
7952 }
7953
7954 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7955 {
7956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7957 vos_mem_free(pWdaParams);
7958 }
7959
7960 return;
7961}
7962/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007963 * FUNCTION: WDA_SetUapsdAcParamsReq
7964 * Request to WDI to set the UAPSD params for an ac (sta mode).
7965 */
7966VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7967 tUapsdInfo *pUapsdInfo)
7968{
7969 WDI_Status status = WDI_STATUS_SUCCESS;
7970 tWDA_CbContext *pWDA = NULL ;
7971 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7972 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7973 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007976 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 if(NULL == wdiUapsdParams)
7978 {
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 VOS_ASSERT(0);
7982 return VOS_STATUS_E_NOMEM;
7983 }
7984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7985 if(NULL == pWdaParams)
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 VOS_ASSERT(0);
7990 vos_mem_free(wdiUapsdParams);
7991 return VOS_STATUS_E_NOMEM;
7992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7994 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7995 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7996 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7997 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7998 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007999 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8000 wdiUapsdParams->pUserData = pWdaParams;
8001
Jeff Johnson295189b2012-06-20 16:38:30 -07008002 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 pWdaParams->pWdaContext = pWDA;
8004 /* Store param pointer as passed in by caller */
8005 pWdaParams->wdaMsgParam = pUapsdInfo;
8006 /* store Params pass it to WDI */
8007 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008009 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 if(IS_WDI_STATUS_FAILURE(status))
8012 {
8013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8014 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8016 vos_mem_free(pWdaParams);
8017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8019 return VOS_STATUS_SUCCESS;
8020 else
8021 return VOS_STATUS_E_FAILURE;
8022
Jeff Johnson295189b2012-06-20 16:38:30 -07008023}
8024/*
8025 * FUNCTION: WDA_ClearUapsdAcParamsReq
8026 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8027 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8028 * and again enter the UPASD with the modified params. Hence the disable
8029 * function was kept empty.
8030 *
8031 */
8032VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8033{
8034 /* do nothing */
8035 return VOS_STATUS_SUCCESS;
8036}
Jeff Johnson295189b2012-06-20 16:38:30 -07008037/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008038 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 *
8040 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008041void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008042{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8044
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008046 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008047
8048 if(NULL == pWdaParams)
8049 {
8050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008051 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008052 VOS_ASSERT(0) ;
8053 return ;
8054 }
8055
8056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8057 vos_mem_free(pWdaParams->wdaMsgParam);
8058 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008059
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 //print a msg, nothing else to do
8061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008062 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 return ;
8064}
Jeff Johnson295189b2012-06-20 16:38:30 -07008065/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008066 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8067 * Free memory.
8068 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8069 */
8070void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8071{
8072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8073
8074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8075 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8076
8077 if(NULL == pWdaParams)
8078 {
8079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8080 "%s: pWdaParams received NULL", __func__);
8081 VOS_ASSERT(0);
8082 return;
8083 }
8084
8085 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8086 {
8087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8088 vos_mem_free(pWdaParams->wdaMsgParam);
8089 vos_mem_free(pWdaParams);
8090 }
8091
8092 return;
8093}
8094/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 * FUNCTION: WDA_UpdateUapsdParamsReq
8096 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8097 */
8098VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8099 tUpdateUapsdParams* pUpdateUapsdInfo)
8100{
8101 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008102 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8104 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8105 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008106 tWDA_ReqParams *pWdaParams = NULL;
8107
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 if(NULL == wdiUpdateUapsdParams)
8111 {
8112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_ASSERT(0);
8115 return VOS_STATUS_E_NOMEM;
8116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8118 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8119 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008120 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8121 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008122
8123 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8124 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 {
8126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008129 vos_mem_free(pUpdateUapsdInfo);
8130 vos_mem_free(wdiUpdateUapsdParams);
8131 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008134 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008135 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008136 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8137 pWdaParams->pWdaContext = pWDA;
8138
Jeff Johnson43971f52012-07-17 12:26:56 -07008139 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008140 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008141 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008142
Jeff Johnson43971f52012-07-17 12:26:56 -07008143 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 {
8145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8146 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008147 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8149 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008150 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008152 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008153}
Jeff Johnson295189b2012-06-20 16:38:30 -07008154/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008155 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 *
8157 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008158void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008159{
8160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008162 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 if(WDI_STATUS_SUCCESS != wdiStatus)
8164 {
8165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008166 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 if(NULL == pWdaParams)
8169 {
8170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 VOS_ASSERT(0) ;
8173 return ;
8174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8176 vos_mem_free(pWdaParams->wdaMsgParam);
8177 vos_mem_free(pWdaParams);
8178 return ;
8179}
Jeff Johnson295189b2012-06-20 16:38:30 -07008180/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008181 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8182 * Free memory.
8183 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8184 */
8185void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8186{
8187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8188
8189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8190 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8191
8192 if(NULL == pWdaParams)
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8195 "%s: pWdaParams received NULL", __func__);
8196 VOS_ASSERT(0);
8197 return;
8198 }
8199
8200 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8201 {
8202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8203 vos_mem_free(pWdaParams->wdaMsgParam);
8204 vos_mem_free(pWdaParams);
8205 }
8206
8207 return;
8208}
8209/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8211 *
8212 */
8213VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8214 tSirWlanSetRxpFilters *pWlanSuspendParam)
8215{
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008217 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008218 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8219 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8220 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8221 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 if(NULL == wdiRxpFilterParams)
8225 {
8226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008228 VOS_ASSERT(0);
8229 vos_mem_free(pWlanSuspendParam);
8230 return VOS_STATUS_E_NOMEM;
8231 }
8232 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8233 if(NULL == pWdaParams)
8234 {
8235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 VOS_ASSERT(0);
8238 vos_mem_free(wdiRxpFilterParams);
8239 vos_mem_free(pWlanSuspendParam);
8240 return VOS_STATUS_E_NOMEM;
8241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8243 pWlanSuspendParam->setMcstBcstFilter;
8244 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8245 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8246
Yue Ma7f44bbe2013-04-12 11:47:39 -07008247 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8248 wdiRxpFilterParams->pUserData = pWdaParams;
8249
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 pWdaParams->pWdaContext = pWDA;
8251 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8252 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008253 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008254 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008256 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8259 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008260 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8262 vos_mem_free(pWdaParams->wdaMsgParam);
8263 vos_mem_free(pWdaParams);
8264 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008265 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008266}
Jeff Johnson295189b2012-06-20 16:38:30 -07008267/*
8268 * FUNCTION: WDA_WdiIndicationCallback
8269 *
8270 */
8271void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8272 void* pUserData)
8273{
8274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008276}
Jeff Johnson295189b2012-06-20 16:38:30 -07008277/*
8278 * FUNCTION: WDA_ProcessWlanSuspendInd
8279 *
8280 */
8281VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8282 tSirWlanSuspendParam *pWlanSuspendParam)
8283{
8284 WDI_Status wdiStatus;
8285 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8289 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8290 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8291 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8294 if(WDI_STATUS_PENDING == wdiStatus)
8295 {
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008297 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 }
8299 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008302 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 vos_mem_free(pWlanSuspendParam);
8305 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8306}
8307
Chet Lanctot186b5732013-03-18 10:26:30 -07008308#ifdef WLAN_FEATURE_11W
8309/*
8310 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8311 *
8312 */
8313VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8314 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8315{
8316 WDI_Status wdiStatus;
8317 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8319 "------> %s ", __func__);
8320
8321 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8322 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8323 sizeof(tSirMacAddr));
8324
8325 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8326 wdiExclUnencryptParams.pUserData = pWDA;
8327
8328 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8329 if(WDI_STATUS_PENDING == wdiStatus)
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8332 "Pending received for %s:%d ", __func__, __LINE__ );
8333 }
8334 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8335 {
8336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8337 "Failure in %s:%d ", __func__, __LINE__ );
8338 }
8339 vos_mem_free(pExclUnencryptParam);
8340 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8341}
8342#endif
8343
Jeff Johnson295189b2012-06-20 16:38:30 -07008344/*
8345 * FUNCTION: WDA_ProcessWlanResumeCallback
8346 *
8347 */
8348void WDA_ProcessWlanResumeCallback(
8349 WDI_SuspendResumeRspParamsType *resumeRspParams,
8350 void* pUserData)
8351{
8352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 if(NULL == pWdaParams)
8356 {
8357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_ASSERT(0) ;
8360 return ;
8361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8363 {
8364 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008365 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8368 vos_mem_free(pWdaParams->wdaMsgParam);
8369 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 return ;
8371}
Jeff Johnson295189b2012-06-20 16:38:30 -07008372/*
8373 * FUNCTION: WDA_ProcessWlanResumeReq
8374 *
8375 */
8376VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8377 tSirWlanResumeParam *pWlanResumeParam)
8378{
8379 WDI_Status wdiStatus;
8380 WDI_ResumeParamsType *wdiResumeParams =
8381 (WDI_ResumeParamsType *)vos_mem_malloc(
8382 sizeof(WDI_ResumeParamsType) ) ;
8383 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008385 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 if(NULL == wdiResumeParams)
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 VOS_ASSERT(0);
8391 return VOS_STATUS_E_NOMEM;
8392 }
8393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8394 if(NULL == pWdaParams)
8395 {
8396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 VOS_ASSERT(0);
8399 vos_mem_free(wdiResumeParams);
8400 return VOS_STATUS_E_NOMEM;
8401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8403 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 wdiResumeParams->wdiReqStatusCB = NULL;
8406 pWdaParams->wdaMsgParam = pWlanResumeParam;
8407 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8408 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8410 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8411 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8413 {
8414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8415 "Failure in Host Resume REQ WDI API, free all the memory " );
8416 VOS_ASSERT(0);
8417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8418 vos_mem_free(pWdaParams->wdaMsgParam);
8419 vos_mem_free(pWdaParams);
8420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8422}
8423
Jeff Johnson295189b2012-06-20 16:38:30 -07008424/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008425 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 *
8427 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008428void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008429{
8430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 if(NULL == pWdaParams)
8434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008436 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 VOS_ASSERT(0) ;
8438 return ;
8439 }
8440
8441 vos_mem_free(pWdaParams->wdaMsgParam) ;
8442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8443 vos_mem_free(pWdaParams) ;
8444 /*
8445 * No respone required for SetBeaconFilter req so just free the request
8446 * param here
8447 */
8448
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 return ;
8450}
Jeff Johnson295189b2012-06-20 16:38:30 -07008451/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008452 * FUNCTION: WDA_SetBeaconFilterReqCallback
8453 * Free memory.
8454 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8455 */
8456void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8457{
8458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8459
8460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8461 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8462
8463 if(NULL == pWdaParams)
8464 {
8465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8466 "%s: pWdaParams received NULL", __func__);
8467 VOS_ASSERT(0);
8468 return;
8469 }
8470
8471 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8472 {
8473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8474 vos_mem_free(pWdaParams->wdaMsgParam);
8475 vos_mem_free(pWdaParams);
8476 }
8477
8478 return;
8479}
8480/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 * FUNCTION: WDA_SetBeaconFilterReq
8482 * Request to WDI to send the beacon filtering related information.
8483 */
8484VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8485 tBeaconFilterMsg* pBeaconFilterInfo)
8486{
8487 WDI_Status status = WDI_STATUS_SUCCESS;
8488 tANI_U8 *dstPtr, *srcPtr;
8489 tANI_U8 filterLength;
8490 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8491 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8492 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 if(NULL == wdiBeaconFilterInfo)
8497 {
8498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 VOS_ASSERT(0);
8501 return VOS_STATUS_E_NOMEM;
8502 }
8503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8504 if(NULL == pWdaParams)
8505 {
8506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 VOS_ASSERT(0);
8509 vos_mem_free(wdiBeaconFilterInfo);
8510 return VOS_STATUS_E_NOMEM;
8511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8513 pBeaconFilterInfo->beaconInterval;
8514 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8515 pBeaconFilterInfo->capabilityInfo;
8516 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8517 pBeaconFilterInfo->capabilityMask;
8518 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008519
8520 //Fill the BssIdx
8521 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8522
Jeff Johnson295189b2012-06-20 16:38:30 -07008523 //Fill structure with info contained in the beaconFilterTable
8524 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8525 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8526 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8527 if(WDI_BEACON_FILTER_LEN < filterLength)
8528 {
8529 filterLength = WDI_BEACON_FILTER_LEN;
8530 }
8531 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008532 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8533 wdiBeaconFilterInfo->pUserData = pWdaParams;
8534
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 /* Store param pointer as passed in by caller */
8536 /* store Params pass it to WDI */
8537 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8538 pWdaParams->pWdaContext = pWDA;
8539 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8540
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008542 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 if(IS_WDI_STATUS_FAILURE(status))
8544 {
8545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8546 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8547 vos_mem_free(pWdaParams->wdaMsgParam) ;
8548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8549 vos_mem_free(pWdaParams) ;
8550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 return CONVERT_WDI2VOS_STATUS(status) ;
8552}
Jeff Johnson295189b2012-06-20 16:38:30 -07008553/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008554 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 *
8556 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008557void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008558{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8560
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008562 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008563
8564 if(NULL == pWdaParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008568 VOS_ASSERT(0) ;
8569 return ;
8570 }
8571
8572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8573 vos_mem_free(pWdaParams->wdaMsgParam);
8574 vos_mem_free(pWdaParams);
8575
Jeff Johnson295189b2012-06-20 16:38:30 -07008576 //print a msg, nothing else to do
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008578 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 return ;
8580}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008581/*
8582 * FUNCTION: WDA_RemBeaconFilterReqCallback
8583 * Free memory.
8584 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8585 */
8586void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8587{
8588 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8589
8590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8591 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8592
8593 if(NULL == pWdaParams)
8594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8596 "%s: pWdaParams received NULL", __func__);
8597 VOS_ASSERT(0);
8598 return;
8599 }
8600
8601 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8602 {
8603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8604 vos_mem_free(pWdaParams->wdaMsgParam);
8605 vos_mem_free(pWdaParams);
8606 }
8607
8608 return;
8609}
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 // TODO: PE does not have this feature for now implemented,
8611 // but the support for removing beacon filter exists between
8612 // HAL and FW. This function can be called whenever PE defines
8613 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008614/*
8615 * FUNCTION: WDA_RemBeaconFilterReq
8616 * Request to WDI to send the removal of beacon filtering related information.
8617 */
8618VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8619 tRemBeaconFilterMsg* pBeaconFilterInfo)
8620{
8621 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008622 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8624 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8625 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008626 tWDA_ReqParams *pWdaParams ;
8627
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008629 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 if(NULL == wdiBeaconFilterInfo)
8631 {
8632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 VOS_ASSERT(0);
8635 return VOS_STATUS_E_NOMEM;
8636 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8638 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 {
8640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008643 vos_mem_free(wdiBeaconFilterInfo);
8644 vos_mem_free(pBeaconFilterInfo);
8645 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008647
8648 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8649 pBeaconFilterInfo->ucIeCount;
8650 //Fill structure with info contained in the ucRemIeId
8651 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8652 pBeaconFilterInfo->ucRemIeId,
8653 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8654 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8655 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008656
8657 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008658 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008660 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8661
8662 pWdaParams->pWdaContext = pWDA;
8663
Jeff Johnson43971f52012-07-17 12:26:56 -07008664 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008665 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008666 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 {
8668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8669 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008670 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8672 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008673 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008675 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008676}
Jeff Johnson295189b2012-06-20 16:38:30 -07008677/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008678 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 *
8680 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008681void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008682{
8683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008685 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 if(NULL == pWdaParams)
8687 {
8688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008689 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 VOS_ASSERT(0) ;
8691 return ;
8692 }
8693
8694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8695 vos_mem_free(pWdaParams) ;
8696
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 return ;
8698}
Jeff Johnson295189b2012-06-20 16:38:30 -07008699/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008700 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8701 * Free memory.
8702 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8703 */
8704void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8705{
8706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8707
8708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8709 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8710
8711 if(NULL == pWdaParams)
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8714 "%s: pWdaParams received NULL", __func__);
8715 VOS_ASSERT(0);
8716 return;
8717 }
8718
8719 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8720 {
8721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8722 vos_mem_free(pWdaParams);
8723 }
8724
8725 return;
8726}
8727/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 * FUNCTION: WDA_SetRSSIThresholdsReq
8729 * Request to WDI to set the RSSI thresholds (sta mode).
8730 */
8731VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8732{
8733 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008734 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 tWDA_CbContext *pWDA = NULL ;
8736 v_PVOID_t pVosContext = NULL;
8737 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8738 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8739 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8740 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008742 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 if(NULL == wdiRSSIThresholdsInfo)
8744 {
8745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 VOS_ASSERT(0);
8748 return VOS_STATUS_E_NOMEM;
8749 }
8750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8751 if(NULL == pWdaParams)
8752 {
8753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 VOS_ASSERT(0);
8756 vos_mem_free(wdiRSSIThresholdsInfo);
8757 return VOS_STATUS_E_NOMEM;
8758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8761 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8762 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8764 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8765 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008766 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8767 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8768 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008769 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8770 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8772 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8773
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 /* Store param pointer as passed in by caller */
8775 /* store Params pass it to WDI */
8776 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8777 pWdaParams->pWdaContext = pWDA;
8778 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008779 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008780 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008781 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 {
8783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8784 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008785 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8787 vos_mem_free(pWdaParams) ;
8788 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008789 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790
8791}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008792/*
Yue Madb90ac12013-04-04 13:39:13 -07008793 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 *
8795 */
Yue Madb90ac12013-04-04 13:39:13 -07008796void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008797{
8798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8799
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 if(NULL == pWdaParams)
8803 {
8804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 VOS_ASSERT(0) ;
8807 return ;
8808 }
8809
8810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8811 vos_mem_free(pWdaParams->wdaMsgParam);
8812 vos_mem_free(pWdaParams) ;
8813
8814 //print a msg, nothing else to do
8815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008816 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 return ;
8818}
Jeff Johnson295189b2012-06-20 16:38:30 -07008819/*
Yue Madb90ac12013-04-04 13:39:13 -07008820 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008821 * Free memory.
8822 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008823 */
8824void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8825{
8826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8827
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8830
8831 if(NULL == pWdaParams)
8832 {
8833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8834 "%s: Invalid pWdaParams pointer", __func__);
8835 VOS_ASSERT(0);
8836 return;
8837 }
8838
8839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8840 {
8841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8842 vos_mem_free(pWdaParams->wdaMsgParam);
8843 vos_mem_free(pWdaParams);
8844 }
8845
8846 return;
8847}
8848/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 * FUNCTION: WDA_ProcessHostOffloadReq
8850 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8851 * to broadcast traffic (sta mode).
8852 */
8853VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8854 tSirHostOffloadReq *pHostOffloadParams)
8855{
8856 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008857 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8859 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8860 sizeof(WDI_HostOffloadReqParamsType)) ;
8861 tWDA_ReqParams *pWdaParams ;
8862
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008864 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008865
8866 if(NULL == wdiHostOffloadInfo)
8867 {
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 VOS_ASSERT(0);
8871 return VOS_STATUS_E_NOMEM;
8872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8874 if(NULL == pWdaParams)
8875 {
8876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 VOS_ASSERT(0);
8879 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008880 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 return VOS_STATUS_E_NOMEM;
8882 }
8883
8884 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8885 pHostOffloadParams->offloadType;
8886 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8887 pHostOffloadParams->enableOrDisable;
8888
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008889 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8890 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8891
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8893 {
8894 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8895 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8896 pHostOffloadParams->params.hostIpv4Addr,
8897 4);
8898 break;
8899 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8900 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8901 pHostOffloadParams->params.hostIpv6Addr,
8902 16);
8903 break;
8904 case SIR_IPV6_NS_OFFLOAD:
8905 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8906 pHostOffloadParams->params.hostIpv6Addr,
8907 16);
8908
8909#ifdef WLAN_NS_OFFLOAD
8910 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8911 {
8912 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8913 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8914 16);
8915 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8916 }
8917 else
8918 {
8919 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8920 }
8921
8922 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8923 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8924 16);
8925 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8926 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8927 6);
8928
8929 //Only two are supported so let's go through them without a loop
8930 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8931 {
8932 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8933 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8934 16);
8935 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8936 }
8937 else
8938 {
8939 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8940 }
8941
8942 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8943 {
8944 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8945 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8946 16);
8947 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8948 }
8949 else
8950 {
8951 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8952 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308953 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8954 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 break;
8956#endif //WLAN_NS_OFFLOAD
8957 default:
8958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8960 "No Handling for Offload Type %x in WDA "
8961 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8962 //WDA_VOS_ASSERT(0) ;
8963 }
8964 }
Yue Madb90ac12013-04-04 13:39:13 -07008965 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8966 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008967
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008969 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008970 /* store Params pass it to WDI */
8971 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8972 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008973
Jeff Johnson295189b2012-06-20 16:38:30 -07008974
Jeff Johnson43971f52012-07-17 12:26:56 -07008975 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008976 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008977
Jeff Johnson43971f52012-07-17 12:26:56 -07008978 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8981 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008982 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams->wdaMsgParam);
8985 vos_mem_free(pWdaParams) ;
8986 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008987 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988
8989}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008990/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008991 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 *
8993 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008994void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008995{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8997
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008999 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009000
9001 if(NULL == pWdaParams)
9002 {
9003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009004 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009005 VOS_ASSERT(0) ;
9006 return ;
9007 }
9008
9009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9010 vos_mem_free(pWdaParams->wdaMsgParam);
9011 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009012
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 //print a msg, nothing else to do
9014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009015 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 return ;
9017}
Jeff Johnson295189b2012-06-20 16:38:30 -07009018/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009019 * FUNCTION: WDA_KeepAliveReqCallback
9020 * Free memory.
9021 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9022 */
9023void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9024{
9025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9026
9027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9028 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9029
9030 if(NULL == pWdaParams)
9031 {
9032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9033 "%s: pWdaParams received NULL", __func__);
9034 VOS_ASSERT(0);
9035 return;
9036 }
9037
9038 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9039 {
9040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9041 vos_mem_free(pWdaParams->wdaMsgParam);
9042 vos_mem_free(pWdaParams);
9043 }
9044
9045 return;
9046}
9047/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 * FUNCTION: WDA_ProcessKeepAliveReq
9049 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9050 * wakeup due to broadcast traffic (sta mode).
9051 */
9052VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9053 tSirKeepAliveReq *pKeepAliveParams)
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_KeepAliveReqParamsType *wdiKeepAliveInfo =
9058 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9059 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009060 tWDA_ReqParams *pWdaParams;
9061
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009063 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 if(NULL == wdiKeepAliveInfo)
9065 {
9066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009069 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 return VOS_STATUS_E_NOMEM;
9071 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009072
9073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9074 if(NULL == pWdaParams)
9075 {
9076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009077 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009078 VOS_ASSERT(0);
9079 vos_mem_free(wdiKeepAliveInfo);
9080 vos_mem_free(pKeepAliveParams);
9081 return VOS_STATUS_E_NOMEM;
9082 }
9083
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9085 pKeepAliveParams->packetType;
9086 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9087 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009088
9089 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9090 pKeepAliveParams->bssId,
9091 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009092
9093 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9094 {
9095 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9096 pKeepAliveParams->hostIpv4Addr,
9097 SIR_IPV4_ADDR_LEN);
9098 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9099 pKeepAliveParams->destIpv4Addr,
9100 SIR_IPV4_ADDR_LEN);
9101 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9102 pKeepAliveParams->destMacAddr,
9103 SIR_MAC_ADDR_LEN);
9104 }
9105 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9106 {
9107 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9108 SIR_IPV4_ADDR_LEN,
9109 0);
9110 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9111 SIR_IPV4_ADDR_LEN,
9112 0);
9113 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9114 SIR_MAC_ADDR_LEN,
9115 0);
9116 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009117 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9118 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009119
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009121 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009122 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009123 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9124 pWdaParams->pWdaContext = pWDA;
9125
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9127 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9128 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9129 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9130 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9132 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9133 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9134 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9135 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9137 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9138 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9139 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9140 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9141 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9142 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9143 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9145 "TimePeriod %d PacketType %d",
9146 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9147 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009148 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009149 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009150
Jeff Johnson43971f52012-07-17 12:26:56 -07009151 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9154 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009155 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9157 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009158 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009160 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009161
9162}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009163/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009164 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 *
9166 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009167void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009168 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9169 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009170{
9171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 if(NULL == pWdaParams)
9175 {
9176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 VOS_ASSERT(0) ;
9179 return ;
9180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9182 vos_mem_free(pWdaParams->wdaMsgParam);
9183 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 return ;
9185}
Jeff Johnson295189b2012-06-20 16:38:30 -07009186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009187 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9188 * Free memory.
9189 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9190 */
9191void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9192{
9193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9194
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9196 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9197
9198 if(NULL == pWdaParams)
9199 {
9200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9201 "%s: pWdaParams received NULL", __func__);
9202 VOS_ASSERT(0);
9203 return;
9204 }
9205
9206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9207 {
9208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9209 vos_mem_free(pWdaParams->wdaMsgParam);
9210 vos_mem_free(pWdaParams);
9211 }
9212
9213 return;
9214}
9215
9216/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9218 * Request to WDI to add WOWL Bcast pattern
9219 */
9220VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9221 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9222{
9223 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009224 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9226 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9227 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9228 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009230 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 if(NULL == wdiWowlAddBcPtrnInfo)
9232 {
9233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 VOS_ASSERT(0);
9236 return VOS_STATUS_E_NOMEM;
9237 }
9238 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9239 if(NULL == pWdaParams)
9240 {
9241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 VOS_ASSERT(0);
9244 vos_mem_free(wdiWowlAddBcPtrnInfo);
9245 return VOS_STATUS_E_NOMEM;
9246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9248 pWowlAddBcPtrnParams->ucPatternId;
9249 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9250 pWowlAddBcPtrnParams->ucPatternByteOffset;
9251 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9252 pWowlAddBcPtrnParams->ucPatternMaskSize;
9253 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9254 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9256 {
9257 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9258 pWowlAddBcPtrnParams->ucPattern,
9259 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9260 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9261 pWowlAddBcPtrnParams->ucPatternMask,
9262 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9263 }
9264 else
9265 {
9266 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9267 pWowlAddBcPtrnParams->ucPattern,
9268 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9269 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9270 pWowlAddBcPtrnParams->ucPatternMask,
9271 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9272
9273 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9274 pWowlAddBcPtrnParams->ucPatternExt,
9275 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9276 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9277 pWowlAddBcPtrnParams->ucPatternMaskExt,
9278 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9279 }
9280
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009281 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9282 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9283
Yue Ma7f44bbe2013-04-12 11:47:39 -07009284 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9285 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 /* Store param pointer as passed in by caller */
9287 /* store Params pass it to WDI */
9288 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9289 pWdaParams->pWdaContext = pWDA;
9290 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009291 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009292 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 {
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9296 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009297 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 vos_mem_free(pWdaParams->wdaMsgParam) ;
9299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9300 vos_mem_free(pWdaParams) ;
9301 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009302 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009303
9304}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009305/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009306 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 *
9308 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009309void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009310 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9311 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009312{
9313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 if(NULL == pWdaParams)
9317 {
9318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 VOS_ASSERT(0) ;
9321 return ;
9322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9324 vos_mem_free(pWdaParams->wdaMsgParam);
9325 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 return ;
9327}
Jeff Johnson295189b2012-06-20 16:38:30 -07009328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009329 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9330 * Free memory.
9331 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9332 */
9333void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9334{
9335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9336
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9338 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9339
9340 if(NULL == pWdaParams)
9341 {
9342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9343 "%s: pWdaParams received NULL", __func__);
9344 VOS_ASSERT(0);
9345 return;
9346 }
9347
9348 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9349 {
9350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9351 vos_mem_free(pWdaParams->wdaMsgParam);
9352 vos_mem_free(pWdaParams);
9353 }
9354
9355 return;
9356}
9357/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9359 * Request to WDI to delete WOWL Bcast pattern
9360 */
9361VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9362 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9363{
9364 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009365 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9367 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9368 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 if(NULL == wdiWowlDelBcPtrnInfo)
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 VOS_ASSERT(0);
9377 return VOS_STATUS_E_NOMEM;
9378 }
9379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9380 if(NULL == pWdaParams)
9381 {
9382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 VOS_ASSERT(0);
9385 vos_mem_free(wdiWowlDelBcPtrnInfo);
9386 return VOS_STATUS_E_NOMEM;
9387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9389 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009390
9391 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9392 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9393
Yue Ma7f44bbe2013-04-12 11:47:39 -07009394 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9395 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 /* Store param pointer as passed in by caller */
9397 /* store Params pass it to WDI */
9398 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9399 pWdaParams->pWdaContext = pWDA;
9400 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009401 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009402 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009403 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 {
9405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9406 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009407 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 vos_mem_free(pWdaParams->wdaMsgParam) ;
9409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9410 vos_mem_free(pWdaParams) ;
9411 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009412 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009413
9414}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009415/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009416 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 *
9418 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009419void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009420{
9421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9422 tWDA_CbContext *pWDA;
9423 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009425 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 if(NULL == pWdaParams)
9427 {
9428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009429 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 VOS_ASSERT(0) ;
9431 return ;
9432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9434 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9435
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009436 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9437
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9439 vos_mem_free(pWdaParams) ;
9440
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009441 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009442 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 return ;
9445}
Jeff Johnson295189b2012-06-20 16:38:30 -07009446/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009447 * FUNCTION: WDA_WowlEnterReqCallback
9448 * Free memory and send WOWL Enter RSP back to PE.
9449 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9450 */
9451void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9452{
9453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9454 tWDA_CbContext *pWDA;
9455 tSirHalWowlEnterParams *pWowlEnterParams;
9456
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9458 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9459
9460 if(NULL == pWdaParams)
9461 {
9462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9463 "%s: pWdaParams received NULL", __func__);
9464 VOS_ASSERT(0);
9465 return;
9466 }
9467
9468 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9469 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9470 pWowlEnterParams->status = wdiStatus;
9471
9472 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9473 {
9474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9475 vos_mem_free(pWdaParams);
9476 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9477 }
9478
9479 return;
9480}
9481/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 * FUNCTION: WDA_ProcessWowlEnterReq
9483 * Request to WDI to enter WOWL
9484 */
9485VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9486 tSirHalWowlEnterParams *pWowlEnterParams)
9487{
9488 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009489 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9491 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9492 sizeof(WDI_WowlEnterReqParamsType)) ;
9493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 if(NULL == wdiWowlEnterInfo)
9497 {
9498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 VOS_ASSERT(0);
9501 return VOS_STATUS_E_NOMEM;
9502 }
9503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9504 if(NULL == pWdaParams)
9505 {
9506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 VOS_ASSERT(0);
9509 vos_mem_free(wdiWowlEnterInfo);
9510 return VOS_STATUS_E_NOMEM;
9511 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009512
9513 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9514
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9516 pWowlEnterParams->magicPtrn,
9517 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9519 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9521 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9523 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9525 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9527 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9529 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9531 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9533 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009534#ifdef WLAN_WAKEUP_EVENTS
9535 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9536 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9537
9538 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9539 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9540
9541 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9542 pWowlEnterParams->ucWowNetScanOffloadMatch;
9543
9544 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9545 pWowlEnterParams->ucWowGTKRekeyError;
9546
9547 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9548 pWowlEnterParams->ucWoWBSSConnLoss;
9549#endif // WLAN_WAKEUP_EVENTS
9550
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009551 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9552 pWowlEnterParams->bssIdx;
9553
Yue Ma7f44bbe2013-04-12 11:47:39 -07009554 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9555 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 /* Store param pointer as passed in by caller */
9557 /* store Params pass it to WDI */
9558 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9559 pWdaParams->pWdaContext = pWDA;
9560 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009561 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009562 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009563 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009564 {
9565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9566 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009567 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 vos_mem_free(pWdaParams->wdaMsgParam) ;
9569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9570 vos_mem_free(pWdaParams) ;
9571 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009572 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009573
9574}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009575/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 *
9578 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009580{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9582 tWDA_CbContext *pWDA;
9583 tSirHalWowlExitParams *pWowlExitParams;
9584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009585 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009586 if(NULL == pWdaParams)
9587 {
9588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009589 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009590 VOS_ASSERT(0) ;
9591 return ;
9592 }
9593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9594 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9595
9596 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009597 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009598
9599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9600 vos_mem_free(pWdaParams) ;
9601
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009604 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 return ;
9606}
Jeff Johnson295189b2012-06-20 16:38:30 -07009607/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009608 * FUNCTION: WDA_WowlExitReqCallback
9609 * Free memory and send WOWL Exit RSP back to PE.
9610 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9611 */
9612void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9613{
9614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9615 tWDA_CbContext *pWDA;
9616 tSirHalWowlExitParams *pWowlExitParams;
9617
9618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9619 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9620
9621 if(NULL == pWdaParams)
9622 {
9623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9624 "%s: pWdaParams received NULL", __func__);
9625 VOS_ASSERT(0);
9626 return;
9627 }
9628
9629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9630 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9631 pWowlExitParams->status = wdiStatus;
9632
9633 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9634 {
9635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9636 vos_mem_free(pWdaParams);
9637 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9638 }
9639
9640 return;
9641}
9642/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 * FUNCTION: WDA_ProcessWowlExitReq
9644 * Request to WDI to add WOWL Bcast pattern
9645 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009646VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9647 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009648{
9649 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009650 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009651 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9652 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9653 sizeof(WDI_WowlExitReqParamsType)) ;
9654 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009656 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009657 if(NULL == wdiWowlExitInfo)
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009660 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009661 VOS_ASSERT(0);
9662 return VOS_STATUS_E_NOMEM;
9663 }
9664 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9665 if(NULL == pWdaParams)
9666 {
9667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009668 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009669 VOS_ASSERT(0);
9670 vos_mem_free(wdiWowlExitInfo);
9671 return VOS_STATUS_E_NOMEM;
9672 }
9673
9674 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9675 pWowlExitParams->bssIdx;
9676
Yue Ma7f44bbe2013-04-12 11:47:39 -07009677 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9678 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009679
9680 /* Store param pointer as passed in by caller */
9681 /* store Params pass it to WDI */
9682 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9683 pWdaParams->pWdaContext = pWDA;
9684 pWdaParams->wdaMsgParam = pWowlExitParams;
9685
9686 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009687 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009688
Jeff Johnson43971f52012-07-17 12:26:56 -07009689 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 {
9691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9692 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009693 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9695 vos_mem_free(pWdaParams->wdaMsgParam);
9696 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009697 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009698 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009699}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009700/*
9701 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9702 * Request to WDI to determine whether a given station is capable of
9703 * using HW-based frame translation
9704 */
9705v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9706 tANI_U8 staIdx)
9707{
9708 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9709}
Jeff Johnson295189b2012-06-20 16:38:30 -07009710/*
9711 * FUNCTION: WDA_NvDownloadReqCallback
9712 * send NV Download RSP back to PE
9713 */
9714void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9715 void* pUserData)
9716{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009717
9718 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9719 tWDA_CbContext *pWDA;
9720
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009722 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009723
9724 if(NULL == pWdaParams)
9725 {
9726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009727 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009728 VOS_ASSERT(0) ;
9729 return ;
9730 }
9731
9732 pWDA = pWdaParams->pWdaContext;
9733
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9736 vos_mem_free(pWdaParams);
9737
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009739 return ;
9740}
Jeff Johnson295189b2012-06-20 16:38:30 -07009741/*
9742 * FUNCTION: WDA_ProcessNvDownloadReq
9743 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9744 */
9745VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9746{
9747 /* Initialize the local Variables*/
9748 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9749 v_VOID_t *pNvBuffer=NULL;
9750 v_SIZE_t bufferSize = 0;
9751 WDI_Status status = WDI_STATUS_E_FAILURE;
9752 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009753 tWDA_ReqParams *pWdaParams ;
9754
Jeff Johnson295189b2012-06-20 16:38:30 -07009755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009757 if(NULL == pWDA)
9758 {
9759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009760 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009761 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 return VOS_STATUS_E_FAILURE;
9763 }
9764
9765 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009766 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9767
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9769 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 if(NULL == wdiNvDownloadReqParam)
9771 {
9772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009774 VOS_ASSERT(0);
9775 return VOS_STATUS_E_NOMEM;
9776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009777 /* Copy Params to wdiNvDownloadReqParam*/
9778 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9779 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009780
9781 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9782 if(NULL == pWdaParams)
9783 {
9784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009785 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009786 VOS_ASSERT(0);
9787 vos_mem_free(wdiNvDownloadReqParam);
9788 return VOS_STATUS_E_NOMEM;
9789 }
9790
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009792 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9793 pWdaParams->wdaMsgParam = NULL;
9794 pWdaParams->pWdaContext = pWDA;
9795
9796
Jeff Johnson295189b2012-06-20 16:38:30 -07009797 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009798
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009800 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9801
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 if(IS_WDI_STATUS_FAILURE(status))
9803 {
9804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9805 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810}
9811/*
9812 * FUNCTION: WDA_FlushAcReqCallback
9813 * send Flush AC RSP back to TL
9814 */
9815void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9816{
9817 vos_msg_t wdaMsg = {0} ;
9818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9819 tFlushACReq *pFlushACReqParams;
9820 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009822 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 if(NULL == pWdaParams)
9824 {
9825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009826 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 VOS_ASSERT(0) ;
9828 return ;
9829 }
9830
9831 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9832 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9833 if(NULL == pFlushACRspParams)
9834 {
9835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009838 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 return ;
9840 }
9841 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9842 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9843 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9844 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9845 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009846 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 vos_mem_free(pWdaParams->wdaMsgParam) ;
9848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9849 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9851 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9852 // POST message to TL
9853 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9854
Jeff Johnson295189b2012-06-20 16:38:30 -07009855 return ;
9856}
Jeff Johnson295189b2012-06-20 16:38:30 -07009857/*
9858 * FUNCTION: WDA_ProcessFlushAcReq
9859 * Request to WDI to Update the DELBA REQ params.
9860 */
9861VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9862 tFlushACReq *pFlushAcReqParams)
9863{
9864 WDI_Status status = WDI_STATUS_SUCCESS ;
9865 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9866 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9867 sizeof(WDI_FlushAcReqParamsType)) ;
9868 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 if(NULL == wdiFlushAcReqParam)
9870 {
9871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 VOS_ASSERT(0);
9874 return VOS_STATUS_E_NOMEM;
9875 }
9876 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9877 if(NULL == pWdaParams)
9878 {
9879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 VOS_ASSERT(0);
9882 vos_mem_free(wdiFlushAcReqParam);
9883 return VOS_STATUS_E_NOMEM;
9884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9888 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9889 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9890 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 /* Store Flush AC pointer, as this will be used for response */
9892 /* store Params pass it to WDI */
9893 pWdaParams->pWdaContext = pWDA;
9894 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9895 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9897 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 if(IS_WDI_STATUS_FAILURE(status))
9899 {
9900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9901 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9902 vos_mem_free(pWdaParams->wdaMsgParam) ;
9903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9904 vos_mem_free(pWdaParams) ;
9905 //TODO: respond to TL with failure
9906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009908}
Jeff Johnson295189b2012-06-20 16:38:30 -07009909/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009910 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 *
9912 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009913void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009914{
9915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9916 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009917 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009918
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009920 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 if(NULL == pWdaParams)
9922 {
9923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009924 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 VOS_ASSERT(0) ;
9926 return ;
9927 }
9928 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9929 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9930 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9931 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9932 {
9933 pWDA->wdaAmpSessionOn = VOS_FALSE;
9934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 vos_mem_free(pWdaParams->wdaMsgParam) ;
9936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9937 vos_mem_free(pWdaParams) ;
9938 /*
9939 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9940 * param here
9941 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 return ;
9943}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009944/*
9945 * FUNCTION: WDA_BtAmpEventReqCallback
9946 * Free memory.
9947 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9948 */
9949void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9950{
9951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9952 tWDA_CbContext *pWDA;
9953 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954
Yue Ma7f44bbe2013-04-12 11:47:39 -07009955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9956 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9957
9958 if(NULL == pWdaParams)
9959 {
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9961 "%s: pWdaParams received NULL", __func__);
9962 VOS_ASSERT(0);
9963 return;
9964 }
9965
9966 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9967 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9968
9969 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9970 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9971 {
9972 pWDA->wdaAmpSessionOn = VOS_FALSE;
9973 }
9974
9975 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9976 {
9977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9978 vos_mem_free(pWdaParams->wdaMsgParam);
9979 vos_mem_free(pWdaParams);
9980 }
9981
9982 return;
9983}
Jeff Johnson295189b2012-06-20 16:38:30 -07009984/*
9985 * FUNCTION: WDA_ProcessBtAmpEventReq
9986 * Request to WDI to Update with BT AMP events.
9987 */
9988VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9989 tSmeBtAmpEvent *pBtAmpEventParams)
9990{
9991 WDI_Status status = WDI_STATUS_SUCCESS ;
9992 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9993 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9994 sizeof(WDI_BtAmpEventParamsType)) ;
9995 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009997 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 if(NULL == wdiBtAmpEventParam)
9999 {
10000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 VOS_ASSERT(0);
10003 return VOS_STATUS_E_NOMEM;
10004 }
10005 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10006 if(NULL == pWdaParams)
10007 {
10008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 VOS_ASSERT(0);
10011 vos_mem_free(wdiBtAmpEventParam);
10012 return VOS_STATUS_E_NOMEM;
10013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10015 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010016 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10017 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 /* Store BT AMP event pointer, as this will be used for response */
10019 /* store Params pass it to WDI */
10020 pWdaParams->pWdaContext = pWDA;
10021 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10022 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010024 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 if(IS_WDI_STATUS_FAILURE(status))
10026 {
10027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10028 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10029 vos_mem_free(pWdaParams->wdaMsgParam) ;
10030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10031 vos_mem_free(pWdaParams) ;
10032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10034 {
10035 pWDA->wdaAmpSessionOn = VOS_TRUE;
10036 }
10037 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010038}
10039
Jeff Johnson295189b2012-06-20 16:38:30 -070010040/*
10041 * FUNCTION: WDA_FTMCommandReqCallback
10042 * Handle FTM CMD response came from HAL
10043 * Route responce to HDD FTM
10044 */
10045void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10046 void *usrData)
10047{
10048 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010049 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10050 {
10051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010052 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 return;
10054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 /* Release Current FTM Command Request */
10056 vos_mem_free(pWDA->wdaFTMCmdReq);
10057 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 /* Post FTM Responce to HDD FTM */
10059 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 return;
10061}
Jeff Johnson295189b2012-06-20 16:38:30 -070010062/*
10063 * FUNCTION: WDA_ProcessFTMCommand
10064 * Send FTM command to WDI
10065 */
10066VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10067 tPttMsgbuffer *pPTTFtmCmd)
10068{
10069 WDI_Status status = WDI_STATUS_SUCCESS;
10070 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 ftmCMDReq = (WDI_FTMCommandReqType *)
10072 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10073 if(NULL == ftmCMDReq)
10074 {
10075 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10076 "WDA FTM Command buffer alloc fail");
10077 return VOS_STATUS_E_NOMEM;
10078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10080 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 /* Send command to WDI */
10083 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 return status;
10085}
Jeff Johnsone7245742012-09-05 17:12:55 -070010086#ifdef FEATURE_OEM_DATA_SUPPORT
10087/*
10088 * FUNCTION: WDA_StartOemDataReqCallback
10089 *
10090 */
10091void WDA_StartOemDataReqCallback(
10092 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10093 void* pUserData)
10094{
10095 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10097 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010098 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010099
Jeff Johnsone7245742012-09-05 17:12:55 -070010100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010101 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010102
10103 if(NULL == pWdaParams)
10104 {
10105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010106 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010107 VOS_ASSERT(0) ;
10108 return ;
10109 }
10110 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10111
Jeff Johnsone7245742012-09-05 17:12:55 -070010112 if(NULL == pWDA)
10113 {
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010116 VOS_ASSERT(0);
10117 return ;
10118 }
10119
10120 /*
10121 * Allocate memory for response params sent to PE
10122 */
10123 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10124
10125 // Check if memory is allocated for OemdataMeasRsp Params.
10126 if(NULL == pOemDataRspParams)
10127 {
10128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10129 "OEM DATA WDA callback alloc fail");
10130 VOS_ASSERT(0) ;
10131 return;
10132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010133
Jeff Johnsone7245742012-09-05 17:12:55 -070010134 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10136 vos_mem_free(pWdaParams->wdaMsgParam);
10137 vos_mem_free(pWdaParams) ;
10138
Jeff Johnsone7245742012-09-05 17:12:55 -070010139 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010140 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010141 * Also, here success always means that we have atleast one BSSID.
10142 */
10143 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10144
10145 //enable Tx
10146 status = WDA_ResumeDataTx(pWDA);
10147 if(status != VOS_STATUS_SUCCESS)
10148 {
10149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10150 }
10151 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10152 return ;
10153}
10154/*
10155 * FUNCTION: WDA_ProcessStartOemDataReq
10156 * Send Start Oem Data Req to WDI
10157 */
10158VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10159 tStartOemDataReq *pOemDataReqParams)
10160{
10161 WDI_Status status = WDI_STATUS_SUCCESS;
10162 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010163 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010164
10165 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10166
10167 if(NULL == wdiOemDataReqParams)
10168 {
10169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010171 VOS_ASSERT(0);
10172 return VOS_STATUS_E_NOMEM;
10173 }
10174
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010175 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10176 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10177 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10178 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010179
10180 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10181
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10183 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010187 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010188 vos_mem_free(pOemDataReqParams);
10189 VOS_ASSERT(0);
10190 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010191 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010192
Bernald44a1ae2013-01-09 08:30:39 -080010193 pWdaParams->pWdaContext = (void*)pWDA;
10194 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10195 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010196
10197 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10198 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010199
10200 if(IS_WDI_STATUS_FAILURE(status))
10201 {
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10203 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10205 vos_mem_free(pWdaParams->wdaMsgParam);
10206 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010207 }
10208 return CONVERT_WDI2VOS_STATUS(status) ;
10209}
10210#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010211/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010212 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 *
10214 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010215void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010216{
10217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010219 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 if(NULL == pWdaParams)
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010223 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 VOS_ASSERT(0) ;
10225 return ;
10226 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010227
10228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10229 vos_mem_free(pWdaParams->wdaMsgParam);
10230 vos_mem_free(pWdaParams);
10231
10232 return ;
10233}
10234/*
10235 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10236 * Free memory.
10237 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10238 */
10239void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10240{
10241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10242
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10244 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10245
10246 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10249 "%s: pWdaParams received NULL", __func__);
10250 VOS_ASSERT(0);
10251 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253
10254 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 {
10256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010257 vos_mem_free(pWdaParams->wdaMsgParam);
10258 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010260
10261 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010262}
Jeff Johnson295189b2012-06-20 16:38:30 -070010263#ifdef WLAN_FEATURE_GTK_OFFLOAD
10264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010265 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 *
10267 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010268void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010269 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010270{
10271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10272
10273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010274 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010275 if(NULL == pWdaParams)
10276 {
10277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10278 "%s: pWdaParams received NULL", __func__);
10279 VOS_ASSERT(0);
10280 return;
10281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010282
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 vos_mem_free(pWdaParams->wdaMsgParam) ;
10284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10285 vos_mem_free(pWdaParams) ;
10286
10287 //print a msg, nothing else to do
10288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010289 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010290
10291 return ;
10292}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010293/*
10294 * FUNCTION: WDA_GTKOffloadReqCallback
10295 * Free memory.
10296 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10297 */
10298void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10299{
10300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010301
Yue Ma7f44bbe2013-04-12 11:47:39 -070010302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10303 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10304
10305 if(NULL == pWdaParams)
10306 {
10307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10308 "%s: pWdaParams received NULL", __func__);
10309 VOS_ASSERT(0);
10310 return;
10311 }
10312
10313 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10314 {
10315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10316 vos_mem_free(pWdaParams->wdaMsgParam);
10317 vos_mem_free(pWdaParams);
10318 }
10319
10320 return;
10321}
Jeff Johnson295189b2012-06-20 16:38:30 -070010322/*
10323 * FUNCTION: WDA_ProcessGTKOffloadReq
10324 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10325 * to broadcast traffic (sta mode).
10326 */
10327VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10328 tpSirGtkOffloadParams pGtkOffloadParams)
10329{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010330 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10332 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10333 sizeof(WDI_GtkOffloadReqMsg)) ;
10334 tWDA_ReqParams *pWdaParams ;
10335
10336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010337 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010338
10339 if(NULL == wdiGtkOffloadReqMsg)
10340 {
10341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 VOS_ASSERT(0);
10344 return VOS_STATUS_E_NOMEM;
10345 }
10346
10347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10348 if(NULL == pWdaParams)
10349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_ASSERT(0);
10353 vos_mem_free(wdiGtkOffloadReqMsg);
10354 return VOS_STATUS_E_NOMEM;
10355 }
10356
10357 //
10358 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10359 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010360
10361 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010362 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010363
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10365 // Copy KCK
10366 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10367 // Copy KEK
10368 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10369 // Copy KeyReplayCounter
10370 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10371 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10372
Yue Ma7f44bbe2013-04-12 11:47:39 -070010373 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10374 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375
Jeff Johnson295189b2012-06-20 16:38:30 -070010376
10377 /* Store Params pass it to WDI */
10378 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10379 pWdaParams->pWdaContext = pWDA;
10380 /* Store param pointer as passed in by caller */
10381 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10382
Yue Ma7f44bbe2013-04-12 11:47:39 -070010383 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010384
10385 if(IS_WDI_STATUS_FAILURE(status))
10386 {
10387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10388 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10390 vos_mem_free(pWdaParams->wdaMsgParam);
10391 vos_mem_free(pWdaParams);
10392 }
10393
10394 return CONVERT_WDI2VOS_STATUS(status) ;
10395}
10396
10397/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010398 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 *
10400 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010401void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010402 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010403{
10404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10405 tWDA_CbContext *pWDA;
10406 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010407 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 vos_msg_t vosMsg;
10409
10410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010411 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010412 if(NULL == pWdaParams)
10413 {
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10415 "%s: pWdaParams received NULL", __func__);
10416 VOS_ASSERT(0);
10417 return;
10418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010419
10420 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10421 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10422
10423 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10424 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10425
10426 /* Message Header */
10427 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010428 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010429
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010430 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10431 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10432 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10433 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10434 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010435
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010436 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10437 pwdiGtkOffloadGetInfoRsparams->bssId,
10438 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010439 /* VOS message wrapper */
10440 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10441 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10442 vosMsg.bodyval = 0;
10443
10444 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10445 {
10446 /* free the mem and return */
10447 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10448 }
10449
10450 vos_mem_free(pWdaParams->wdaMsgParam) ;
10451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10452 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010453
10454 return;
10455}
10456/*
10457 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10458 * Free memory and send RSP back to SME.
10459 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10460 */
10461void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10462{
10463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10464 vos_msg_t vosMsg;
10465
10466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10467 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10468
10469 if(NULL == pWdaParams)
10470 {
10471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10472 "%s: pWdaParams received NULL", __func__);
10473 VOS_ASSERT(0);
10474 return;
10475 }
10476
10477 /* VOS message wrapper */
10478 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10479 vosMsg.bodyptr = NULL;
10480 vosMsg.bodyval = 0;
10481
10482 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10483 {
10484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10485 vos_mem_free(pWdaParams->wdaMsgParam);
10486 vos_mem_free(pWdaParams);
10487 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10488 }
10489
10490 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010491}
10492#endif
10493
10494/*
10495 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10496 * Request to WDI to set Tx Per Tracking configurations
10497 */
10498VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10499{
10500 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010501 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010502 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10503 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10504 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010508 if(NULL == pwdiSetTxPerTrackingReqParams)
10509 {
10510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 vos_mem_free(pTxPerTrackingParams);
10513 VOS_ASSERT(0);
10514 return VOS_STATUS_E_NOMEM;
10515 }
10516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10517 if(NULL == pWdaParams)
10518 {
10519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10522 vos_mem_free(pTxPerTrackingParams);
10523 VOS_ASSERT(0);
10524 return VOS_STATUS_E_NOMEM;
10525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10527 pTxPerTrackingParams->ucTxPerTrackingEnable;
10528 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10529 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10530 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10531 pTxPerTrackingParams->ucTxPerTrackingRatio;
10532 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10533 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010534 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10535 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 /* Store param pointer as passed in by caller */
10537 /* store Params pass it to WDI
10538 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10539 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10540 pWdaParams->pWdaContext = pWDA;
10541 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010542 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010543 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010544 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10547 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010548 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 vos_mem_free(pWdaParams->wdaMsgParam) ;
10550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10551 vos_mem_free(pWdaParams) ;
10552 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010553 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010554
10555}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010556/*
10557 * FUNCTION: WDA_HALDumpCmdCallback
10558 * Send the VOS complete .
10559 */
10560void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10561 void* pUserData)
10562{
10563 tANI_U8 *buffer = NULL;
10564 tWDA_CbContext *pWDA = NULL;
10565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 if(NULL == pWdaParams)
10567 {
10568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010570 VOS_ASSERT(0) ;
10571 return ;
10572 }
10573
10574 pWDA = pWdaParams->pWdaContext;
10575 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010576 if(wdiRspParams->usBufferLen > 0)
10577 {
10578 /*Copy the Resp data to UMAC supplied buffer*/
10579 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10582 vos_mem_free(pWdaParams);
10583
10584 /* Indicate VOSS about the start complete */
10585 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 return ;
10587}
10588
Jeff Johnson295189b2012-06-20 16:38:30 -070010589/*
10590 * FUNCTION: WDA_ProcessHALDumpCmdReq
10591 * Send Dump command to WDI
10592 */
10593VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10594 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10595 tANI_U32 arg4, tANI_U8 *pBuffer)
10596{
10597 WDI_Status status = WDI_STATUS_SUCCESS;
10598 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10599 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10600 tWDA_ReqParams *pWdaParams ;
10601 pVosContextType pVosContext = NULL;
10602 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10604 (void *)pMac);
10605
10606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10607 if(NULL == pWdaParams)
10608 {
10609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 return VOS_STATUS_E_NOMEM;
10612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 /* Allocate memory WDI request structure*/
10614 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10615 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10616 if(NULL == wdiHALDumpCmdReqParam)
10617 {
10618 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10619 "WDA HAL DUMP Command buffer alloc fail");
10620 vos_mem_free(pWdaParams);
10621 return WDI_STATUS_E_FAILURE;
10622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010623 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 /* Extract the arguments */
10625 wdiHalDumpCmdInfo->command = cmd;
10626 wdiHalDumpCmdInfo->argument1 = arg1;
10627 wdiHalDumpCmdInfo->argument2 = arg2;
10628 wdiHalDumpCmdInfo->argument3 = arg3;
10629 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10632
10633 /* Response message will be passed through the buffer */
10634 pWdaParams->wdaMsgParam = (void *)pBuffer;
10635
10636 /* store Params pass it to WDI */
10637 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 /* Send command to WDI */
10639 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010640 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 if ( vStatus != VOS_STATUS_SUCCESS )
10642 {
10643 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10644 {
10645 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010646 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 }
10648 else
10649 {
10650 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010651 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 }
10653 VOS_ASSERT(0);
10654 }
10655 return status;
10656}
Jeff Johnson295189b2012-06-20 16:38:30 -070010657#ifdef WLAN_FEATURE_GTK_OFFLOAD
10658/*
10659 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10660 * Request to WDI to get GTK Offload Information
10661 */
10662VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10663 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10664{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010665 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10667 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10668 tWDA_ReqParams *pWdaParams ;
10669
10670 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10671 {
10672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 VOS_ASSERT(0);
10675 return VOS_STATUS_E_NOMEM;
10676 }
10677
10678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10679 if(NULL == pWdaParams)
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 VOS_ASSERT(0);
10684 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10685 return VOS_STATUS_E_NOMEM;
10686 }
10687
Yue Ma7f44bbe2013-04-12 11:47:39 -070010688 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10689 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690
Jeff Johnson295189b2012-06-20 16:38:30 -070010691 /* Store Params pass it to WDI */
10692 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10693 pWdaParams->pWdaContext = pWDA;
10694 /* Store param pointer as passed in by caller */
10695 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10696
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010697 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010698 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010699
Yue Ma7f44bbe2013-04-12 11:47:39 -070010700 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010701
10702 if(IS_WDI_STATUS_FAILURE(status))
10703 {
10704 /* failure returned by WDI API */
10705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10706 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10708 vos_mem_free(pWdaParams) ;
10709 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10710 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10711 }
10712
10713 return CONVERT_WDI2VOS_STATUS(status) ;
10714}
10715#endif // WLAN_FEATURE_GTK_OFFLOAD
10716
10717/*
Yue Mab9c86f42013-08-14 15:59:08 -070010718 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10719 *
10720 */
10721VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10722 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10723{
10724 WDI_Status wdiStatus;
10725 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10726
10727 addPeriodicTxPtrnParams =
10728 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10729
10730 if (NULL == addPeriodicTxPtrnParams)
10731 {
10732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10733 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10734 __func__);
10735
10736 return VOS_STATUS_E_NOMEM;
10737 }
10738
10739 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10740 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10741
10742 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10743 addPeriodicTxPtrnParams->pUserData = pWDA;
10744
10745 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10746
10747 if (WDI_STATUS_PENDING == wdiStatus)
10748 {
10749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10750 "Pending received for %s:%d", __func__, __LINE__ );
10751 }
10752 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10753 {
10754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10755 "Failure in %s:%d", __func__, __LINE__ );
10756 }
10757
10758 vos_mem_free(addPeriodicTxPtrnParams);
10759
10760 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10761}
10762
10763/*
10764 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10765 *
10766 */
10767VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10768 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10769{
10770 WDI_Status wdiStatus;
10771 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10772
10773 delPeriodicTxPtrnParams =
10774 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10775
10776 if (NULL == delPeriodicTxPtrnParams)
10777 {
10778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10779 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10780 __func__);
10781
10782 return VOS_STATUS_E_NOMEM;
10783 }
10784
10785 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10786 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10787
10788 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10789 delPeriodicTxPtrnParams->pUserData = pWDA;
10790
10791 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10792
10793 if (WDI_STATUS_PENDING == wdiStatus)
10794 {
10795 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10796 "Pending received for %s:%d", __func__, __LINE__ );
10797 }
10798 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10799 {
10800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10801 "Failure in %s:%d", __func__, __LINE__ );
10802 }
10803
10804 vos_mem_free(delPeriodicTxPtrnParams);
10805
10806 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10807}
10808
Rajeev79dbe4c2013-10-05 11:03:42 +053010809#ifdef FEATURE_WLAN_BATCH_SCAN
10810/*
10811 * FUNCTION: WDA_ProcessStopBatchScanInd
10812 *
10813 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10814 *
10815 * PARAM:
10816 * pWDA: pointer to WDA context
10817 * pReq: pointer to stop batch scan request
10818 */
10819VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10820 tSirStopBatchScanInd *pReq)
10821{
10822 WDI_Status wdiStatus;
10823 WDI_StopBatchScanIndType wdiReq;
10824
10825 wdiReq.param = pReq->param;
10826
10827 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10828
10829 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10830 {
10831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10832 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10833 }
10834
10835 vos_mem_free(pReq);
10836
10837 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10838}
10839/*==========================================================================
10840 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10841
10842 DESCRIPTION
10843 API to pull batch scan result from FW
10844
10845 PARAMETERS
10846 pWDA: Pointer to WDA context
10847 pGetBatchScanReq: Pointer to get batch scan result indication
10848
10849 RETURN VALUE
10850 NONE
10851
10852===========================================================================*/
10853VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10854 tSirTriggerBatchScanResultInd *pReq)
10855{
10856 WDI_Status wdiStatus;
10857 WDI_TriggerBatchScanResultIndType wdiReq;
10858
10859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10860 "------> %s " ,__func__);
10861
10862 wdiReq.param = pReq->param;
10863
10864 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10865
10866 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10867 {
10868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10869 "Trigger batch scan result ind failed %s:%d",
10870 __func__, wdiStatus);
10871 }
10872
10873 vos_mem_free(pReq);
10874
10875 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10876}
10877
10878/*==========================================================================
10879 FUNCTION WDA_SetBatchScanRespCallback
10880
10881 DESCRIPTION
10882 API to process set batch scan response from FW
10883
10884 PARAMETERS
10885 pRsp: Pointer to set batch scan response
10886 pUserData: Pointer to user data
10887
10888 RETURN VALUE
10889 NONE
10890
10891===========================================================================*/
10892void WDA_SetBatchScanRespCallback
10893(
10894 WDI_SetBatchScanRspType *pRsp,
10895 void* pUserData
10896)
10897{
10898 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10899 tpAniSirGlobal pMac;
10900 void *pCallbackContext;
10901 tWDA_CbContext *pWDA = NULL ;
10902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10903
10904
10905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10906 "<------ %s " ,__func__);
10907 if (NULL == pWdaParams)
10908 {
10909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10910 "%s: pWdaParams received NULL", __func__);
10911 VOS_ASSERT(0) ;
10912 return ;
10913 }
10914
10915 /*extract WDA context*/
10916 pWDA = pWdaParams->pWdaContext;
10917 if (NULL == pWDA)
10918 {
10919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10920 "%s:pWDA is NULL can't invole HDD callback",
10921 __func__);
10922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10923 vos_mem_free(pWdaParams->wdaMsgParam);
10924 vos_mem_free(pWdaParams);
10925 VOS_ASSERT(0);
10926 return;
10927 }
10928
10929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10930 vos_mem_free(pWdaParams->wdaMsgParam);
10931 vos_mem_free(pWdaParams);
10932
10933 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10934 if (NULL == pMac)
10935 {
10936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10937 "%s:pMac is NULL", __func__);
10938 VOS_ASSERT(0);
10939 return;
10940 }
10941
10942 pHddSetBatchScanRsp =
10943 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10944 if (NULL == pHddSetBatchScanRsp)
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10947 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10948 VOS_ASSERT(0);
10949 return;
10950 }
10951
10952 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10953
10954 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10955 /*call hdd callback with set batch scan response data*/
10956 if(pMac->pmc.setBatchScanReqCallback)
10957 {
10958 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
10959 }
10960 else
10961 {
10962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10963 "%s:HDD callback is null", __func__);
10964 VOS_ASSERT(0);
10965 }
10966
10967 vos_mem_free(pHddSetBatchScanRsp);
10968 return ;
10969}
10970
10971/*==========================================================================
10972 FUNCTION WDA_ProcessSetBatchScanReq
10973
10974 DESCRIPTION
10975 API to send set batch scan request to WDI
10976
10977 PARAMETERS
10978 pWDA: Pointer to WDA context
10979 pSetBatchScanReq: Pointer to set batch scan req
10980
10981 RETURN VALUE
10982 NONE
10983
10984===========================================================================*/
10985VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
10986 tSirSetBatchScanReq *pSetBatchScanReq)
10987{
10988 WDI_Status status;
10989 tWDA_ReqParams *pWdaParams ;
10990 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
10991
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10993 "------> %s " ,__func__);
10994
10995 pWdiSetBatchScanReq =
10996 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
10997 if (NULL == pWdiSetBatchScanReq)
10998 {
10999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11000 "%s: VOS MEM Alloc Failure", __func__);
11001 vos_mem_free(pSetBatchScanReq);
11002 VOS_ASSERT(0);
11003 return VOS_STATUS_E_NOMEM;
11004 }
11005
11006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11007 if (NULL == pWdaParams)
11008 {
11009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11010 "%s: VOS MEM Alloc Failure", __func__);
11011 VOS_ASSERT(0);
11012 vos_mem_free(pSetBatchScanReq);
11013 vos_mem_free(pWdiSetBatchScanReq);
11014 return VOS_STATUS_E_NOMEM;
11015 }
11016
11017 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11018 pWdiSetBatchScanReq->numberOfScansToBatch =
11019 pSetBatchScanReq->numberOfScansToBatch;
11020 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11021 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11022 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11023
11024 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11025 pWdaParams->pWdaContext = pWDA;
11026 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11027
11028 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11029 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11030 if (IS_WDI_STATUS_FAILURE(status))
11031 {
11032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11033 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11035 vos_mem_free(pWdaParams->wdaMsgParam);
11036 vos_mem_free(pWdaParams);
11037 }
11038 return CONVERT_WDI2VOS_STATUS(status);
11039}
11040
11041#endif
11042
Yue Mab9c86f42013-08-14 15:59:08 -070011043/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011044 * FUNCTION: WDA_ProcessRateUpdateInd
11045 *
11046 */
11047VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11048 tSirRateUpdateInd *pRateUpdateParams)
11049{
11050 WDI_Status wdiStatus;
11051 WDI_RateUpdateIndParams rateUpdateParams;
11052
11053 vos_mem_copy(rateUpdateParams.bssid,
11054 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11055
11056 rateUpdateParams.ucastDataRateTxFlag =
11057 pRateUpdateParams->ucastDataRateTxFlag;
11058 rateUpdateParams.reliableMcastDataRateTxFlag =
11059 pRateUpdateParams->reliableMcastDataRateTxFlag;
11060 rateUpdateParams.mcastDataRate24GHzTxFlag =
11061 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11062 rateUpdateParams.mcastDataRate5GHzTxFlag =
11063 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11064
11065 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11066 rateUpdateParams.reliableMcastDataRate =
11067 pRateUpdateParams->reliableMcastDataRate;
11068 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11069 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11070
11071 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11072 rateUpdateParams.pUserData = pWDA;
11073
11074 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11075
11076 if (WDI_STATUS_PENDING == wdiStatus)
11077 {
11078 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11079 "Pending received for %s:%d", __func__, __LINE__ );
11080 }
11081 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11082 {
11083 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11084 "Failure in %s:%d", __func__, __LINE__ );
11085 }
11086
11087 vos_mem_free(pRateUpdateParams);
11088
11089 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11090}
11091
11092/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 * -------------------------------------------------------------------------
11094 * DATA interface with WDI for Mgmt Frames
11095 * -------------------------------------------------------------------------
11096 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011097/*
11098 * FUNCTION: WDA_TxComplete
11099 * Callback function for the WDA_TxPacket
11100 */
11101VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11102 VOS_STATUS status )
11103{
11104
11105 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11106 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011107 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011108
11109 if(NULL == wdaContext)
11110 {
11111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11112 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011113 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 VOS_ASSERT(0);
11115 return VOS_STATUS_E_FAILURE;
11116 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011117
11118 /*Check if frame was timed out or not*/
11119 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11120 (v_PVOID_t)&uUserData);
11121
11122 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11123 {
11124 /*Discard frame - no further processing is needed*/
11125 vos_pkt_return_packet(pData);
11126 return VOS_STATUS_SUCCESS;
11127 }
11128
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11130 if( NULL!=wdaContext->pTxCbFunc)
11131 {
11132 /*check if packet is freed already*/
11133 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11134 {
11135 wdaContext->pTxCbFunc(pMac, pData);
11136 }
11137 else
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011140 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011141 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 //Return from here since we reaching here because the packet already timeout
11143 return status;
11144 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 }
11146
11147 /*
11148 * Trigger the event to bring the HAL TL Tx complete function to come
11149 * out of wait
11150 * Let the coe above to complete the packet first. When this event is set,
11151 * the thread waiting for the event may run and set Vospacket_freed causing the original
11152 * packet not being freed.
11153 */
11154 status = vos_event_set(&wdaContext->txFrameEvent);
11155 if(!VOS_IS_STATUS_SUCCESS(status))
11156 {
11157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011158 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 return status;
11161}
Jeff Johnson295189b2012-06-20 16:38:30 -070011162/*
11163 * FUNCTION: WDA_TxPacket
11164 * Forward TX management frame to WDI
11165 */
11166VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11167 void *pFrmBuf,
11168 tANI_U16 frmLen,
11169 eFrameType frmType,
11170 eFrameTxDir txDir,
11171 tANI_U8 tid,
11172 pWDATxRxCompFunc pCompFunc,
11173 void *pData,
11174 pWDAAckFnTxComp pAckTxComp,
11175 tANI_U8 txFlag)
11176{
11177 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11178 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11179 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11180 tANI_U8 eventIdx = 0;
11181 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11182 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 if((NULL == pWDA)||(NULL == pFrmBuf))
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011186 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011187 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 VOS_ASSERT(0);
11189 return VOS_STATUS_E_FAILURE;
11190 }
11191
11192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011193 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11195 if(NULL == pMac)
11196 {
11197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011198 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 VOS_ASSERT(0);
11200 return VOS_STATUS_E_FAILURE;
11201 }
11202
11203
11204
11205 /* store the call back function in WDA context */
11206 pWDA->pTxCbFunc = pCompFunc;
11207 /* store the call back for the function of ackTxComplete */
11208 if( pAckTxComp )
11209 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011210 if( NULL != pWDA->pAckTxCbFunc )
11211 {
11212 /* Already TxComp is active no need to active again */
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011214 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011215 pWDA->pAckTxCbFunc( pMac, 0);
11216 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011217
Jeff Johnsone7245742012-09-05 17:12:55 -070011218 if( VOS_STATUS_SUCCESS !=
11219 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11220 {
11221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11222 "Tx Complete timeout Timer Stop Failed ");
11223 }
11224 else
11225 {
11226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011227 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011228 }
11229 }
11230
11231 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11232 pWDA->pAckTxCbFunc = pAckTxComp;
11233 if( VOS_STATUS_SUCCESS !=
11234 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11235 {
11236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11237 "Tx Complete Timer Start Failed ");
11238 pWDA->pAckTxCbFunc = NULL;
11239 return eHAL_STATUS_FAILURE;
11240 }
11241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 /* Reset the event to be not signalled */
11243 status = vos_event_reset(&pWDA->txFrameEvent);
11244 if(!VOS_IS_STATUS_SUCCESS(status))
11245 {
11246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011247 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011248 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11249 if( pAckTxComp )
11250 {
11251 pWDA->pAckTxCbFunc = NULL;
11252 if( VOS_STATUS_SUCCESS !=
11253 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11254 {
11255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "Tx Complete timeout Timer Stop Failed ");
11257 }
11258 }
11259 return VOS_STATUS_E_FAILURE;
11260 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011261
11262 /* If Peer Sta mask is set don't overwrite to self sta */
11263 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011265 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011267 else
11268 {
Ganesh K08bce952012-12-13 15:04:41 -080011269 /* Get system role, use the self station if in unknown role or STA role */
11270 systemRole = wdaGetGlobalSystemRole(pMac);
11271 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11272 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011273#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011274 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011275#endif
Ganesh K08bce952012-12-13 15:04:41 -080011276 ))
11277 {
11278 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11279 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011281
Jeff Johnsone7245742012-09-05 17:12:55 -070011282 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11283 disassoc frame reaches the HW, HAL has already deleted the peer station */
11284 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011285 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011286 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011287 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 /*Send Probe request frames on self sta idx*/
11290 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 /* Since we donot want probe responses to be retried, send probe responses
11293 through the NO_ACK queues */
11294 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11295 {
11296 //probe response is sent out using self station and no retries options.
11297 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11298 }
11299 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11300 {
11301 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11302 }
11303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11305
11306 /*Set frame tag to 0
11307 We will use the WDA user data in order to tag a frame as expired*/
11308 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11309 (v_PVOID_t)0);
11310
11311
11312 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11313 frmLen, ucTypeSubType, tid,
11314 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11315 {
11316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011317 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11319 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11320 if( pAckTxComp )
11321 {
11322 pWDA->pAckTxCbFunc = NULL;
11323 if( VOS_STATUS_SUCCESS !=
11324 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11325 {
11326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11327 "Tx Complete timeout Timer Stop Failed ");
11328 }
11329 }
11330 return VOS_STATUS_E_FAILURE;
11331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 /*
11333 * Wait for the event to be set by the TL, to get the response of TX
11334 * complete, this event should be set by the Callback function called by TL
11335 */
11336 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11337 &eventIdx);
11338 if(!VOS_IS_STATUS_SUCCESS(status))
11339 {
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11341 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011342 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11344 after the packet gets completed(packet freed once)*/
11345
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011346 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011347 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011348
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011349 /*Tag Frame as timed out for later deletion*/
11350 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11351 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11352
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 /* check whether the packet was freed already,so need not free again when
11354 * TL calls the WDA_Txcomplete routine
11355 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011356 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11357 /*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 -070011358 {
11359 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011360 } */
11361
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 if( pAckTxComp )
11363 {
11364 pWDA->pAckTxCbFunc = NULL;
11365 if( VOS_STATUS_SUCCESS !=
11366 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11369 "Tx Complete timeout Timer Stop Failed ");
11370 }
11371 }
11372 status = VOS_STATUS_E_FAILURE;
11373 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011374#ifdef WLAN_DUMP_MGMTFRAMES
11375 if (VOS_IS_STATUS_SUCCESS(status))
11376 {
11377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11378 "%s() TX packet : SubType %d", __func__,pFc->subType);
11379 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11380 pData, frmLen);
11381 }
11382#endif
11383
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 return status;
11385}
Jeff Johnson295189b2012-06-20 16:38:30 -070011386/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011387 * FUNCTION: WDA_ProcessDHCPStartInd
11388 * Forward DHCP Start to WDI
11389 */
11390static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11391 tAniDHCPInd *dhcpStartInd)
11392{
11393 WDI_Status status;
11394 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11395 if (NULL == wdiDHCPInd)
11396 {
11397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11398 "%s: VOS MEM Alloc Failure", __func__);
11399 VOS_ASSERT(0);
11400 vos_mem_free(dhcpStartInd);
11401 return VOS_STATUS_E_NOMEM;
11402 }
11403
11404 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11405 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11406 sizeof(tSirMacAddr));
11407
11408 status = WDI_dhcpStartInd(wdiDHCPInd);
11409
11410 if (IS_WDI_STATUS_FAILURE(status))
11411 {
11412 vos_mem_free(wdiDHCPInd);
11413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11414 "DHCP Start Indication failed");
11415 }
11416 vos_mem_free(dhcpStartInd);
11417 return CONVERT_WDI2VOS_STATUS(status) ;
11418}
11419
11420 /*
11421 * FUNCTION: WDA_ProcessDHCPStopInd
11422 * Forward DHCP Stop to WDI
11423 */
11424 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11425 tAniDHCPInd *dhcpStopInd)
11426 {
11427 WDI_Status status;
11428 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11429 if (NULL == wdiDHCPInd)
11430 {
11431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11432 "%s: VOS MEM Alloc Failure", __func__);
11433 VOS_ASSERT(0);
11434 vos_mem_free(dhcpStopInd);
11435 return VOS_STATUS_E_NOMEM;
11436 }
11437 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11438 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11439 status = WDI_dhcpStopInd(wdiDHCPInd);
11440 if (IS_WDI_STATUS_FAILURE(status))
11441 {
11442 vos_mem_free(wdiDHCPInd);
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11444 "DHCP Start Indication failed");
11445 }
11446 vos_mem_free(dhcpStopInd);
11447 return CONVERT_WDI2VOS_STATUS(status) ;
11448 }
11449
11450/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 * FUNCTION: WDA_McProcessMsg
11452 * Trigger DAL-AL to start CFG download
11453 */
11454VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11455{
11456 VOS_STATUS status = VOS_STATUS_SUCCESS;
11457 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 if(NULL == pMsg)
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011461 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 VOS_ASSERT(0);
11463 return VOS_STATUS_E_FAILURE;
11464 }
11465
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011467 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011468
11469 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11470 if(NULL == pWDA )
11471 {
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011473 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011475 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 return VOS_STATUS_E_FAILURE;
11477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 /* Process all the WDA messages.. */
11479 switch( pMsg->type )
11480 {
11481 case WNI_CFG_DNLD_REQ:
11482 {
11483 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011484 /* call WDA complete event if config download success */
11485 if( VOS_IS_STATUS_SUCCESS(status) )
11486 {
11487 vos_WDAComplete_cback(pVosContext);
11488 }
11489 else
11490 {
11491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11492 "WDA Config Download failure" );
11493 }
11494 break ;
11495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 /*
11497 * Init SCAN request from PE, convert it into DAL format
11498 * and send it to DAL
11499 */
11500 case WDA_INIT_SCAN_REQ:
11501 {
11502 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11503 break ;
11504 }
11505 /* start SCAN request from PE */
11506 case WDA_START_SCAN_REQ:
11507 {
11508 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11509 break ;
11510 }
11511 /* end SCAN request from PE */
11512 case WDA_END_SCAN_REQ:
11513 {
11514 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11515 break ;
11516 }
11517 /* end SCAN request from PE */
11518 case WDA_FINISH_SCAN_REQ:
11519 {
11520 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11521 break ;
11522 }
11523 /* join request from PE */
11524 case WDA_CHNL_SWITCH_REQ:
11525 {
11526 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11527 {
11528 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11529 }
11530 else
11531 {
11532 WDA_ProcessChannelSwitchReq(pWDA,
11533 (tSwitchChannelParams*)pMsg->bodyptr) ;
11534 }
11535 break ;
11536 }
11537 /* ADD BSS request from PE */
11538 case WDA_ADD_BSS_REQ:
11539 {
11540 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11541 break ;
11542 }
11543 case WDA_ADD_STA_REQ:
11544 {
11545 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11546 break ;
11547 }
11548 case WDA_DELETE_BSS_REQ:
11549 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011550 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11551 break ;
11552 }
11553 case WDA_DELETE_STA_REQ:
11554 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11556 break ;
11557 }
11558 case WDA_CONFIG_PARAM_UPDATE_REQ:
11559 {
11560 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11561 break ;
11562 }
11563 case WDA_SET_BSSKEY_REQ:
11564 {
11565 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11566 break ;
11567 }
11568 case WDA_SET_STAKEY_REQ:
11569 {
11570 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11571 break ;
11572 }
11573 case WDA_SET_STA_BCASTKEY_REQ:
11574 {
11575 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11576 break ;
11577 }
11578 case WDA_REMOVE_BSSKEY_REQ:
11579 {
11580 WDA_ProcessRemoveBssKeyReq(pWDA,
11581 (tRemoveBssKeyParams *)pMsg->bodyptr);
11582 break ;
11583 }
11584 case WDA_REMOVE_STAKEY_REQ:
11585 {
11586 WDA_ProcessRemoveStaKeyReq(pWDA,
11587 (tRemoveStaKeyParams *)pMsg->bodyptr);
11588 break ;
11589 }
11590 case WDA_REMOVE_STA_BCASTKEY_REQ:
11591 {
11592 /* TODO: currently UMAC is not sending this request, Add the code for
11593 handling this request when UMAC supports */
11594 break;
11595 }
11596#ifdef FEATURE_WLAN_CCX
11597 case WDA_TSM_STATS_REQ:
11598 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011599 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011600 break;
11601 }
11602#endif
11603 case WDA_UPDATE_EDCA_PROFILE_IND:
11604 {
11605 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11606 break;
11607 }
11608 case WDA_ADD_TS_REQ:
11609 {
11610 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11611 break;
11612 }
11613 case WDA_DEL_TS_REQ:
11614 {
11615 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11616 break;
11617 }
11618 case WDA_ADDBA_REQ:
11619 {
11620 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11621 break;
11622 }
11623 case WDA_DELBA_IND:
11624 {
11625 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11626 break;
11627 }
11628 case WDA_SET_LINK_STATE:
11629 {
11630 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11631 break;
11632 }
11633 case WDA_GET_STATISTICS_REQ:
11634 {
11635 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11636 break;
11637 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011638#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11639 case WDA_GET_ROAM_RSSI_REQ:
11640 {
11641 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11642 break;
11643 }
11644#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 case WDA_PWR_SAVE_CFG:
11646 {
11647 if(pWDA->wdaState == WDA_READY_STATE)
11648 {
11649 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11650 }
11651 else
11652 {
11653 if(NULL != pMsg->bodyptr)
11654 {
11655 vos_mem_free(pMsg->bodyptr);
11656 }
11657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11658 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11659 }
11660 break;
11661 }
11662 case WDA_ENTER_IMPS_REQ:
11663 {
11664 if(pWDA->wdaState == WDA_READY_STATE)
11665 {
11666 WDA_ProcessEnterImpsReq(pWDA);
11667 }
11668 else
11669 {
11670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11671 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11672 }
11673 break;
11674 }
11675 case WDA_EXIT_IMPS_REQ:
11676 {
11677 if(pWDA->wdaState == WDA_READY_STATE)
11678 {
11679 WDA_ProcessExitImpsReq(pWDA);
11680 }
11681 else
11682 {
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11684 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11685 }
11686 break;
11687 }
11688 case WDA_ENTER_BMPS_REQ:
11689 {
11690 if(pWDA->wdaState == WDA_READY_STATE)
11691 {
11692 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11693 }
11694 else
11695 {
11696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11697 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11698 }
11699 break;
11700 }
11701 case WDA_EXIT_BMPS_REQ:
11702 {
11703 if(pWDA->wdaState == WDA_READY_STATE)
11704 {
11705 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11706 }
11707 else
11708 {
11709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11710 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11711 }
11712 break;
11713 }
11714 case WDA_ENTER_UAPSD_REQ:
11715 {
11716 if(pWDA->wdaState == WDA_READY_STATE)
11717 {
11718 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11719 }
11720 else
11721 {
11722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11723 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11724 }
11725 break;
11726 }
11727 case WDA_EXIT_UAPSD_REQ:
11728 {
11729 if(pWDA->wdaState == WDA_READY_STATE)
11730 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011731 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 }
11733 else
11734 {
11735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11736 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11737 }
11738 break;
11739 }
11740 case WDA_UPDATE_UAPSD_IND:
11741 {
11742 if(pWDA->wdaState == WDA_READY_STATE)
11743 {
11744 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11745 }
11746 else
11747 {
11748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11749 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11750 }
11751 break;
11752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 case WDA_REGISTER_PE_CALLBACK :
11754 {
11755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11756 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11757 /*TODO: store the PE callback */
11758 /* Do Nothing? MSG Body should be freed at here */
11759 if(NULL != pMsg->bodyptr)
11760 {
11761 vos_mem_free(pMsg->bodyptr);
11762 }
11763 break;
11764 }
11765 case WDA_SYS_READY_IND :
11766 {
11767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11768 "Handling msg type WDA_SYS_READY_IND " );
11769 pWDA->wdaState = WDA_READY_STATE;
11770 if(NULL != pMsg->bodyptr)
11771 {
11772 vos_mem_free(pMsg->bodyptr);
11773 }
11774 break;
11775 }
11776 case WDA_BEACON_FILTER_IND :
11777 {
11778 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11779 break;
11780 }
11781 case WDA_BTC_SET_CFG:
11782 {
11783 /*TODO: handle this while dealing with BTC */
11784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11785 "Handling msg type WDA_BTC_SET_CFG " );
11786 /* Do Nothing? MSG Body should be freed at here */
11787 if(NULL != pMsg->bodyptr)
11788 {
11789 vos_mem_free(pMsg->bodyptr);
11790 }
11791 break;
11792 }
11793 case WDA_SIGNAL_BT_EVENT:
11794 {
11795 /*TODO: handle this while dealing with BTC */
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11797 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11798 /* Do Nothing? MSG Body should be freed at here */
11799 if(NULL != pMsg->bodyptr)
11800 {
11801 vos_mem_free(pMsg->bodyptr);
11802 }
11803 break;
11804 }
11805 case WDA_CFG_RXP_FILTER_REQ:
11806 {
11807 WDA_ProcessConfigureRxpFilterReq(pWDA,
11808 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11809 break;
11810 }
11811 case WDA_SET_HOST_OFFLOAD:
11812 {
11813 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11814 break;
11815 }
11816 case WDA_SET_KEEP_ALIVE:
11817 {
11818 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11819 break;
11820 }
11821#ifdef WLAN_NS_OFFLOAD
11822 case WDA_SET_NS_OFFLOAD:
11823 {
11824 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11825 break;
11826 }
11827#endif //WLAN_NS_OFFLOAD
11828 case WDA_ADD_STA_SELF_REQ:
11829 {
11830 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11831 break;
11832 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 case WDA_DEL_STA_SELF_REQ:
11834 {
11835 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11836 break;
11837 }
11838 case WDA_WOWL_ADD_BCAST_PTRN:
11839 {
11840 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11841 break;
11842 }
11843 case WDA_WOWL_DEL_BCAST_PTRN:
11844 {
11845 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11846 break;
11847 }
11848 case WDA_WOWL_ENTER_REQ:
11849 {
11850 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11851 break;
11852 }
11853 case WDA_WOWL_EXIT_REQ:
11854 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011855 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 break;
11857 }
11858 case WDA_TL_FLUSH_AC_REQ:
11859 {
11860 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11861 break;
11862 }
11863 case WDA_SIGNAL_BTAMP_EVENT:
11864 {
11865 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11866 break;
11867 }
11868#ifdef WDA_UT
11869 case WDA_WDI_EVENT_MSG:
11870 {
11871 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11872 break ;
11873 }
11874#endif
11875 case WDA_UPDATE_BEACON_IND:
11876 {
11877 WDA_ProcessUpdateBeaconParams(pWDA,
11878 (tUpdateBeaconParams *)pMsg->bodyptr);
11879 break;
11880 }
11881 case WDA_SEND_BEACON_REQ:
11882 {
11883 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11884 break;
11885 }
11886 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11887 {
11888 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11889 (tSendProbeRespParams *)pMsg->bodyptr);
11890 break;
11891 }
11892#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11893 case WDA_SET_MAX_TX_POWER_REQ:
11894 {
11895 WDA_ProcessSetMaxTxPowerReq(pWDA,
11896 (tMaxTxPowerParams *)pMsg->bodyptr);
11897 break;
11898 }
11899#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070011900 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
11901 {
11902 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
11903 pMsg->bodyptr);
11904 break;
11905 }
schang86c22c42013-03-13 18:41:24 -070011906 case WDA_SET_TX_POWER_REQ:
11907 {
11908 WDA_ProcessSetTxPowerReq(pWDA,
11909 (tSirSetTxPowerReq *)pMsg->bodyptr);
11910 break;
11911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 case WDA_SET_P2P_GO_NOA_REQ:
11913 {
11914 WDA_ProcessSetP2PGONOAReq(pWDA,
11915 (tP2pPsParams *)pMsg->bodyptr);
11916 break;
11917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 /* timer related messages */
11919 case WDA_TIMER_BA_ACTIVITY_REQ:
11920 {
11921 WDA_BaCheckActivity(pWDA) ;
11922 break ;
11923 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011924
11925 /* timer related messages */
11926 case WDA_TIMER_TRAFFIC_STATS_IND:
11927 {
11928 WDA_TimerTrafficStatsInd(pWDA);
11929 break;
11930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011931#ifdef WLAN_FEATURE_VOWIFI_11R
11932 case WDA_AGGR_QOS_REQ:
11933 {
11934 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11935 break;
11936 }
11937#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 case WDA_FTM_CMD_REQ:
11939 {
11940 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11941 break ;
11942 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011943#ifdef FEATURE_OEM_DATA_SUPPORT
11944 case WDA_START_OEM_DATA_REQ:
11945 {
11946 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11947 break;
11948 }
11949#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 /* Tx Complete Time out Indication */
11951 case WDA_TX_COMPLETE_TIMEOUT_IND:
11952 {
11953 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11954 break;
11955 }
11956 case WDA_WLAN_SUSPEND_IND:
11957 {
11958 WDA_ProcessWlanSuspendInd(pWDA,
11959 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11960 break;
11961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 case WDA_WLAN_RESUME_REQ:
11963 {
11964 WDA_ProcessWlanResumeReq(pWDA,
11965 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11966 break;
11967 }
11968
11969 case WDA_UPDATE_CF_IND:
11970 {
11971 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11972 pMsg->bodyptr = NULL;
11973 break;
11974 }
11975#ifdef FEATURE_WLAN_SCAN_PNO
11976 case WDA_SET_PNO_REQ:
11977 {
11978 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11979 break;
11980 }
11981 case WDA_UPDATE_SCAN_PARAMS_REQ:
11982 {
11983 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11984 break;
11985 }
11986 case WDA_SET_RSSI_FILTER_REQ:
11987 {
11988 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11989 break;
11990 }
11991#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011992#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011993 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011994 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011995 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011996 break;
11997 }
11998#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011999 case WDA_SET_TX_PER_TRACKING_REQ:
12000 {
12001 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12002 break;
12003 }
12004
12005#ifdef WLAN_FEATURE_PACKET_FILTERING
12006 case WDA_8023_MULTICAST_LIST_REQ:
12007 {
12008 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12009 break;
12010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12012 {
12013 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12014 break;
12015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12017 {
12018 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12019 break;
12020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012021 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12022 {
12023 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12024 break;
12025 }
12026#endif // WLAN_FEATURE_PACKET_FILTERING
12027
12028
12029 case WDA_TRANSMISSION_CONTROL_IND:
12030 {
12031 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12032 break;
12033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 case WDA_SET_POWER_PARAMS_REQ:
12035 {
12036 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12037 break;
12038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012039#ifdef WLAN_FEATURE_GTK_OFFLOAD
12040 case WDA_GTK_OFFLOAD_REQ:
12041 {
12042 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12043 break;
12044 }
12045
12046 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12047 {
12048 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12049 break;
12050 }
12051#endif //WLAN_FEATURE_GTK_OFFLOAD
12052
12053 case WDA_SET_TM_LEVEL_REQ:
12054 {
12055 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12056 break;
12057 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070012058#ifdef WLAN_FEATURE_11AC
12059 case WDA_UPDATE_OP_MODE:
12060 {
12061 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
12062 {
12063 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12064 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12065 else
12066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012067 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012068 }
12069 else
12070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012071 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012072 break;
12073 }
12074#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070012075#ifdef WLAN_FEATURE_11W
12076 case WDA_EXCLUDE_UNENCRYPTED_IND:
12077 {
12078 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12079 break;
12080 }
12081#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012082#ifdef FEATURE_WLAN_TDLS
12083 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12084 {
12085 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12086 break;
12087 }
12088#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012089 case WDA_DHCP_START_IND:
12090 {
12091 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12092 break;
12093 }
12094 case WDA_DHCP_STOP_IND:
12095 {
12096 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12097 break;
12098 }
Leo Chang9056f462013-08-01 19:21:11 -070012099#ifdef FEATURE_WLAN_LPHB
12100 case WDA_LPHB_CONF_REQ:
12101 {
12102 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12103 break;
12104 }
12105#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012106 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12107 {
12108 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12109 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12110 break;
12111 }
12112 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12113 {
12114 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12115 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12116 break;
12117 }
12118
Rajeev79dbe4c2013-10-05 11:03:42 +053012119#ifdef FEATURE_WLAN_BATCH_SCAN
12120 case WDA_SET_BATCH_SCAN_REQ:
12121 {
12122 WDA_ProcessSetBatchScanReq(pWDA,
12123 (tSirSetBatchScanReq *)pMsg->bodyptr);
12124 break;
12125 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012126 case WDA_RATE_UPDATE_IND:
12127 {
12128 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12129 break;
12130 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012131 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12132 {
12133 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12134 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12135 break;
12136 }
12137 case WDA_STOP_BATCH_SCAN_IND:
12138 {
12139 WDA_ProcessStopBatchScanInd(pWDA,
12140 (tSirStopBatchScanInd *)pMsg->bodyptr);
12141 break;
12142 }
12143#endif
12144
Jeff Johnson295189b2012-06-20 16:38:30 -070012145 default:
12146 {
12147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12148 "No Handling for msg type %x in WDA "
12149 ,pMsg->type);
12150 /* Do Nothing? MSG Body should be freed at here */
12151 if(NULL != pMsg->bodyptr)
12152 {
12153 vos_mem_free(pMsg->bodyptr);
12154 }
12155 //WDA_VOS_ASSERT(0) ;
12156 }
12157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 return status ;
12159}
12160
Jeff Johnson295189b2012-06-20 16:38:30 -070012161/*
12162 * FUNCTION: WDA_LowLevelIndCallback
12163 * IND API callback from WDI, send Ind to PE
12164 */
12165void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12166 void* pUserData )
12167{
12168 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12169#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12170 tSirRSSINotification rssiNotification;
12171#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 if(NULL == pWDA)
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 VOS_ASSERT(0);
12177 return ;
12178 }
12179
12180 switch(wdiLowLevelInd->wdiIndicationType)
12181 {
12182 case WDI_RSSI_NOTIFICATION_IND:
12183 {
12184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12185 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012186#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12187 rssiNotification.bReserved =
12188 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12189 rssiNotification.bRssiThres1NegCross =
12190 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12191 rssiNotification.bRssiThres1PosCross =
12192 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12193 rssiNotification.bRssiThres2NegCross =
12194 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12195 rssiNotification.bRssiThres2PosCross =
12196 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12197 rssiNotification.bRssiThres3NegCross =
12198 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12199 rssiNotification.bRssiThres3PosCross =
12200 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012201 rssiNotification.avgRssi = (v_S7_t)
12202 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012203 WLANTL_BMPSRSSIRegionChangedNotification(
12204 pWDA->pVosContext,
12205 &rssiNotification);
12206#endif
12207 break ;
12208 }
12209 case WDI_MISSED_BEACON_IND:
12210 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012211 tpSirSmeMissedBeaconInd pMissBeacInd =
12212 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12214 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012216 if(NULL == pMissBeacInd)
12217 {
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12219 "%s: VOS MEM Alloc Failure", __func__);
12220 break;
12221 }
12222 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12223 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12224 pMissBeacInd->bssIdx =
12225 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12226 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012227 break ;
12228 }
12229 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12230 {
12231 /* TODO: Decode Ind and send Ind to PE */
12232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12233 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12234 break ;
12235 }
12236
12237 case WDI_MIC_FAILURE_IND:
12238 {
12239 tpSirSmeMicFailureInd pMicInd =
12240 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12241
12242 if(NULL == pMicInd)
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 break;
12247 }
12248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12249 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12251 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12252 vos_mem_copy(pMicInd->bssId,
12253 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12254 sizeof(tSirMacAddr));
12255 vos_mem_copy(pMicInd->info.srcMacAddr,
12256 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12257 sizeof(tSirMacAddr));
12258 vos_mem_copy(pMicInd->info.taMacAddr,
12259 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12260 sizeof(tSirMacAddr));
12261 vos_mem_copy(pMicInd->info.dstMacAddr,
12262 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12263 sizeof(tSirMacAddr));
12264 vos_mem_copy(pMicInd->info.rxMacAddr,
12265 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12266 sizeof(tSirMacAddr));
12267 pMicInd->info.multicast =
12268 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12269 pMicInd->info.keyId=
12270 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12271 pMicInd->info.IV1=
12272 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12273 vos_mem_copy(pMicInd->info.TSC,
12274 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012275 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12276 (void *)pMicInd , 0) ;
12277 break ;
12278 }
12279 case WDI_FATAL_ERROR_IND:
12280 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012281 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 /* TODO: Decode Ind and send Ind to PE */
12283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12284 "Received WDI_FATAL_ERROR_IND from WDI ");
12285 break ;
12286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012287 case WDI_DEL_STA_IND:
12288 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 tpDeleteStaContext pDelSTACtx =
12290 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12291
12292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12293 "Received WDI_DEL_STA_IND from WDI ");
12294 if(NULL == pDelSTACtx)
12295 {
12296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 break;
12299 }
12300 vos_mem_copy(pDelSTACtx->addr2,
12301 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12302 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 vos_mem_copy(pDelSTACtx->bssId,
12304 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12305 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012306 pDelSTACtx->assocId =
12307 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12308 pDelSTACtx->reasonCode =
12309 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12310 pDelSTACtx->staId =
12311 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012312 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12313 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 break ;
12315 }
12316 case WDI_COEX_IND:
12317 {
12318 tANI_U32 index;
12319 vos_msg_t vosMsg;
12320 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12321 if(NULL == pSmeCoexInd)
12322 {
12323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012324 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 break;
12326 }
12327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12328 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 /* Message Header */
12330 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12331 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 /* Info from WDI Indication */
12333 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12334 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12335 {
12336 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 /* VOS message wrapper */
12339 vosMsg.type = eWNI_SME_COEX_IND;
12340 vosMsg.bodyptr = (void *)pSmeCoexInd;
12341 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012342 /* Send message to SME */
12343 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12344 {
12345 /* free the mem and return */
12346 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12347 }
12348 else
12349 {
12350 /* DEBUG */
12351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12352 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12353 pSmeCoexInd->coexIndType,
12354 pSmeCoexInd->coexIndData[0],
12355 pSmeCoexInd->coexIndData[1],
12356 pSmeCoexInd->coexIndData[2],
12357 pSmeCoexInd->coexIndData[3]);
12358 }
12359 break;
12360 }
12361 case WDI_TX_COMPLETE_IND:
12362 {
12363 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12364 /* Calling TxCompleteAck Indication from wda context*/
12365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12366 "Complete Indication received from HAL");
12367 if( pWDA->pAckTxCbFunc )
12368 {
12369 if( VOS_STATUS_SUCCESS !=
12370 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12371 {
12372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12373 "Tx Complete timeout Timer Stop Failed ");
12374 }
12375 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12376 pWDA->pAckTxCbFunc = NULL;
12377 }
12378 else
12379 {
12380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12381 "Tx Complete Indication is received after timeout ");
12382 }
12383 break;
12384 }
Viral Modid86bde22012-12-10 13:09:21 -080012385 case WDI_P2P_NOA_START_IND :
12386 {
12387 tSirP2PNoaStart *pP2pNoaStart =
12388 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12389
12390 if (NULL == pP2pNoaStart)
12391 {
12392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12393 "Memory allocation failure, "
12394 "WDI_P2P_NOA_START_IND not forwarded");
12395 break;
12396 }
12397 pP2pNoaStart->status =
12398 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12399 pP2pNoaStart->bssIdx =
12400 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12401 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12402 (void *)pP2pNoaStart , 0) ;
12403 break;
12404 }
12405
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012406#ifdef FEATURE_WLAN_TDLS
12407 case WDI_TDLS_IND :
12408 {
12409 tSirTdlsInd *pTdlsInd =
12410 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12411
12412 if (NULL == pTdlsInd)
12413 {
12414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12415 "Memory allocation failure, "
12416 "WDI_TDLS_IND not forwarded");
12417 break;
12418 }
12419 pTdlsInd->status =
12420 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12421 pTdlsInd->assocId =
12422 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12423 pTdlsInd->staIdx =
12424 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12425 pTdlsInd->reasonCode =
12426 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12427 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12428 (void *)pTdlsInd , 0) ;
12429 break;
12430 }
12431#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012432 case WDI_P2P_NOA_ATTR_IND :
12433 {
12434 tSirP2PNoaAttr *pP2pNoaAttr =
12435 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12437 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 if (NULL == pP2pNoaAttr)
12439 {
12440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12441 "Memory allocation failure, "
12442 "WDI_P2P_NOA_ATTR_IND not forwarded");
12443 break;
12444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012445 pP2pNoaAttr->index =
12446 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12447 pP2pNoaAttr->oppPsFlag =
12448 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12449 pP2pNoaAttr->ctWin =
12450 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12451
12452 pP2pNoaAttr->uNoa1IntervalCnt =
12453 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12454 pP2pNoaAttr->uNoa1Duration =
12455 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12456 pP2pNoaAttr->uNoa1Interval =
12457 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12458 pP2pNoaAttr->uNoa1StartTime =
12459 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 pP2pNoaAttr->uNoa2IntervalCnt =
12461 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12462 pP2pNoaAttr->uNoa2Duration =
12463 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12464 pP2pNoaAttr->uNoa2Interval =
12465 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12466 pP2pNoaAttr->uNoa2StartTime =
12467 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12469 (void *)pP2pNoaAttr , 0) ;
12470 break;
12471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012472#ifdef FEATURE_WLAN_SCAN_PNO
12473 case WDI_PREF_NETWORK_FOUND_IND:
12474 {
12475 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012476 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12477 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12478 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12479 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12480
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12482 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 if (NULL == pPrefNetworkFoundInd)
12484 {
12485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12486 "Memory allocation failure, "
12487 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012488 if (NULL !=
12489 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12490 {
12491 wpalMemoryFree(
12492 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12493 );
12494 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 break;
12497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 /* Message Header */
12499 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012500 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012501
12502 /* Info from WDI Indication */
12503 pPrefNetworkFoundInd->ssId.length =
12504 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12507 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12508 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012509 if (NULL !=
12510 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12511 {
12512 pPrefNetworkFoundInd->frameLength =
12513 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12514 vos_mem_copy( pPrefNetworkFoundInd->data,
12515 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12516 pPrefNetworkFoundInd->frameLength);
12517 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12518 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12519 }
12520 else
12521 {
12522 pPrefNetworkFoundInd->frameLength = 0;
12523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 /* VOS message wrapper */
12526 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12527 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12528 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012529 /* Send message to SME */
12530 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12531 {
12532 /* free the mem and return */
12533 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012535 break;
12536 }
12537#endif // FEATURE_WLAN_SCAN_PNO
12538
12539#ifdef WLAN_WAKEUP_EVENTS
12540 case WDI_WAKE_REASON_IND:
12541 {
12542 vos_msg_t vosMsg;
12543 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12544 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12545 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12546
12547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12548 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12549 wdiLowLevelInd->wdiIndicationType,
12550 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12551 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12552 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12553
12554 if (NULL == pWakeReasonInd)
12555 {
12556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12557 "Memory allocation failure, "
12558 "WDI_WAKE_REASON_IND not forwarded");
12559 break;
12560 }
12561
12562 vos_mem_zero(pWakeReasonInd, allocSize);
12563
12564 /* Message Header */
12565 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12566 pWakeReasonInd->mesgLen = allocSize;
12567
12568 /* Info from WDI Indication */
12569 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12570 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12571 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12572 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12573 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12574 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12575 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12576 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12577
12578 /* VOS message wrapper */
12579 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12580 vosMsg.bodyptr = (void *) pWakeReasonInd;
12581 vosMsg.bodyval = 0;
12582
12583 /* Send message to SME */
12584 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12585 {
12586 /* free the mem and return */
12587 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12588 }
12589
12590 break;
12591 }
12592#endif // WLAN_WAKEUP_EVENTS
12593
12594 case WDI_TX_PER_HIT_IND:
12595 {
12596 vos_msg_t vosMsg;
12597 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12598 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12599 /* VOS message wrapper */
12600 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12601 vosMsg.bodyptr = NULL;
12602 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012603 /* Send message to SME */
12604 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12605 {
12606 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12607 }
12608 break;
12609 }
12610
Leo Chang9056f462013-08-01 19:21:11 -070012611#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012612 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012613 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012614 vos_msg_t vosMsg;
12615 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012616
Leo Changd9df8aa2013-09-26 13:32:26 -070012617 lphbInd =
12618 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12619 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012620 {
12621 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12622 "%s: LPHB IND buffer alloc Fail", __func__);
12623 return ;
12624 }
12625
Leo Changd9df8aa2013-09-26 13:32:26 -070012626 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012627 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012628 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012629 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012630 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012631 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12632
12633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012634 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012635 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12636
Leo Changd9df8aa2013-09-26 13:32:26 -070012637 vosMsg.type = eWNI_SME_LPHB_IND;
12638 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012639 vosMsg.bodyval = 0;
12640 /* Send message to SME */
12641 if (VOS_STATUS_SUCCESS !=
12642 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12643 {
12644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12645 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012646 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012647 }
12648 break;
12649 }
12650#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012651 case WDI_PERIODIC_TX_PTRN_FW_IND:
12652 {
12653 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12654 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12655 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12656 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12657 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12658 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12659 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12660
12661 break;
12662 }
Leo Chang9056f462013-08-01 19:21:11 -070012663
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012664 case WDI_IBSS_PEER_INACTIVITY_IND:
12665 {
12666 tSirIbssPeerInactivityInd *pIbssInd =
12667 (tSirIbssPeerInactivityInd *)
12668 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12669
12670 if (NULL == pIbssInd)
12671 {
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12673 "Memory allocation failure, "
12674 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12675 break;
12676 }
12677
12678 pIbssInd->bssIdx =
12679 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12680 pIbssInd->staIdx =
12681 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12682 vos_mem_copy(pIbssInd->peerAddr,
12683 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12684 sizeof(tSirMacAddr));
12685 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12686 break;
12687 }
12688
Rajeev79dbe4c2013-10-05 11:03:42 +053012689#ifdef FEATURE_WLAN_BATCH_SCAN
12690 case WDI_BATCH_SCAN_RESULT_IND:
12691 {
12692 void *pBatchScanResult;
12693 void *pCallbackContext;
12694 tpAniSirGlobal pMac;
12695
12696 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12697 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12698
12699 /*sanity check*/
12700 if(NULL == pWDA)
12701 {
12702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12703 "%s:pWDA is NULL", __func__);
12704 VOS_ASSERT(0);
12705 return;
12706 }
12707
12708 pBatchScanResult =
12709 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12710 if (NULL == pBatchScanResult)
12711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12713 "%s:Batch scan result from FW is null can't invoke HDD callback",
12714 __func__);
12715 VOS_ASSERT(0);
12716 return;
12717 }
12718
12719 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12720 if (NULL == pMac)
12721 {
12722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12723 "%s:pMac is NULL", __func__);
12724 VOS_ASSERT(0);
12725 return;
12726 }
12727
12728 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12729 /*call hdd callback with set batch scan response data*/
12730 if(pMac->pmc.batchScanResultCallback)
12731 {
12732 pMac->pmc.batchScanResultCallback(pCallbackContext,
12733 pBatchScanResult);
12734 }
12735 else
12736 {
12737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12738 "%s:HDD callback is null", __func__);
12739 VOS_ASSERT(0);
12740 }
12741 break;
12742 }
12743#endif
12744
Leo Chang0b0e45a2013-12-15 15:18:55 -080012745#ifdef FEATURE_WLAN_CH_AVOID
12746 case WDI_CH_AVOID_IND:
12747 {
12748 vos_msg_t vosMsg;
12749 tSirChAvoidIndType *chAvoidInd;
12750
12751 chAvoidInd =
12752 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
12753 if (NULL == chAvoidInd)
12754 {
12755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12756 "%s: CH_AVOID IND buffer alloc Fail", __func__);
12757 return ;
12758 }
12759
12760 chAvoidInd->avoidRangeCount =
12761 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
12762 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
12763 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
12764 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
12765
12766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12767 "%s : WDA CH avoid notification", __func__);
12768
12769 vosMsg.type = eWNI_SME_CH_AVOID_IND;
12770 vosMsg.bodyptr = chAvoidInd;
12771 vosMsg.bodyval = 0;
12772 /* Send message to SME */
12773 if (VOS_STATUS_SUCCESS !=
12774 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12775 {
12776 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12777 "post eWNI_SME_CH_AVOID_IND to SME Failed");
12778 vos_mem_free(chAvoidInd);
12779 }
12780 break;
12781 }
12782#endif /* FEATURE_WLAN_CH_AVOID */
12783
Jeff Johnson295189b2012-06-20 16:38:30 -070012784 default:
12785 {
12786 /* TODO error */
12787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12788 "Received UNKNOWN Indication from WDI ");
12789 }
12790 }
12791 return ;
12792}
12793
Jeff Johnson295189b2012-06-20 16:38:30 -070012794/*
12795 * BA related processing in WDA.
12796 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012797void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12798 void* pUserData)
12799{
12800 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12801 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 if(NULL == pWdaParams)
12803 {
12804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012806 VOS_ASSERT(0) ;
12807 return ;
12808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 vos_mem_free(pWdaParams->wdaMsgParam) ;
12811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12812 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012814 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012815 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12816 {
12817 tANI_U8 i = 0 ;
12818 tBaActivityInd *baActivityInd = NULL ;
12819 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12820 tANI_U8 allocSize = sizeof(tBaActivityInd)
12821 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12822 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12823 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012825 if(NULL == baActivityInd)
12826 {
12827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 VOS_ASSERT(0) ;
12830 return;
12831 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012832 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12833 sizeof(tSirMacAddr)) ;
12834 baActivityInd->baCandidateCnt = baCandidateCount ;
12835
12836 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12837 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12838
12839 for(i = 0 ; i < baCandidateCount ; i++)
12840 {
12841 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012842 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12843 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12845 {
12846 baCandidate->baInfo[tid].fBaEnable =
12847 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12848 baCandidate->baInfo[tid].startingSeqNum =
12849 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12850 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012851 wdiBaCandidate++ ;
12852 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12855 }
12856 else
12857 {
12858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12859 "BA Trigger RSP with Failure received ");
12860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012862}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012863
12864
12865/*
12866 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12867 * during MCC
12868 */
12869void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12870{
12871 wpt_uint32 enabled;
12872 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12873 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12874 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12875
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012876 if (NULL == pMac )
12877 {
12878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12879 "%s: Invoked with invalid MAC context ", __func__ );
12880 VOS_ASSERT(0);
12881 return;
12882 }
12883
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012884 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12885 != eSIR_SUCCESS)
12886 {
12887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12888 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12889 return;
12890 }
12891
12892 if(!enabled)
12893 {
12894 return;
12895 }
12896
12897 if(NULL == pWDA)
12898 {
12899 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12900 "%s:WDA context is NULL", __func__);
12901 VOS_ASSERT(0);
12902 return;
12903 }
12904
12905 if(activate)
12906 {
12907 if( VOS_STATUS_SUCCESS !=
12908 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12909 {
12910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12911 "Traffic Stats Timer Start Failed ");
12912 return;
12913 }
12914 WDI_DS_ActivateTrafficStats();
12915 }
12916 else
12917 {
12918 WDI_DS_DeactivateTrafficStats();
12919 WDI_DS_ClearTrafficStats();
12920
12921 if( VOS_STATUS_SUCCESS !=
12922 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12923 {
12924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12925 "Traffic Stats Timer Stop Failed ");
12926 return;
12927 }
12928 }
12929}
12930
12931/*
12932 * Traffic Stats Timer handler
12933 */
12934void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12935{
12936 WDI_Status wdiStatus;
12937 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12938 WDI_TrafficStatsIndType trafficStatsIndParams;
12939 wpt_uint32 length, enabled;
12940 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12941
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012942 if (NULL == pMac )
12943 {
12944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12945 "%s: Invoked with invalid MAC context ", __func__ );
12946 VOS_ASSERT(0);
12947 return;
12948 }
12949
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012950 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12951 != eSIR_SUCCESS)
12952 {
12953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12954 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12955 return;
12956 }
12957
12958 if(!enabled)
12959 {
12960 WDI_DS_DeactivateTrafficStats();
12961 return;
12962 }
12963
12964 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12965
12966 if(pWdiTrafficStats != NULL)
12967 {
12968 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12969 trafficStatsIndParams.length = length;
12970 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012971 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012972 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12973 trafficStatsIndParams.pUserData = pWDA;
12974
12975 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12976
12977 if(WDI_STATUS_PENDING == wdiStatus)
12978 {
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12980 "Pending received for %s:%d ",__func__,__LINE__ );
12981 }
12982 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12983 {
12984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12985 "Failure in %s:%d ",__func__,__LINE__ );
12986 }
12987
12988 WDI_DS_ClearTrafficStats();
12989 }
12990 else
12991 {
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12993 "pWdiTrafficStats is Null");
12994 }
12995
12996 if( VOS_STATUS_SUCCESS !=
12997 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12998 {
12999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13000 "Traffic Stats Timer Start Failed ");
13001 return;
13002 }
13003}
13004
Jeff Johnson295189b2012-06-20 16:38:30 -070013005/*
13006 * BA Activity check timer handler
13007 */
13008void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13009{
13010 tANI_U8 curSta = 0 ;
13011 tANI_U8 tid = 0 ;
13012 tANI_U8 size = 0 ;
13013 tANI_U8 baCandidateCount = 0 ;
13014 tANI_U8 newBaCandidate = 0 ;
13015 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13016
13017 if(NULL == pWDA)
13018 {
13019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013020 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013021 VOS_ASSERT(0);
13022 return ;
13023 }
13024 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13025 {
13026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13027 "Inconsistent STA entries in WDA");
13028 VOS_ASSERT(0) ;
13029 }
13030 /* walk through all STA entries and find out TX packet count */
13031 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13032 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013033#ifdef WLAN_SOFTAP_VSTA_FEATURE
13034 // We can only do BA on "hard" STAs.
13035 if (!(IS_HWSTA_IDX(curSta)))
13036 {
13037 continue;
13038 }
13039#endif //WLAN_SOFTAP_VSTA_FEATURE
13040 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13041 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013042 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 tANI_U32 txPktCount = 0 ;
13044 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013046 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13047 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13049 curSta, tid, &txPktCount)))
13050 {
13051#if 0
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13053 "************* %d:%d, %d ",curSta, txPktCount,
13054 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13055#endif
13056 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013057 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13059 curSta, tid)))
13060 {
13061 /* get prepare for sending message to HAL */
13062 //baCandidate[baCandidateCount].staIdx = curSta ;
13063 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13064 newBaCandidate = WDA_ENABLE_BA ;
13065 }
13066 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13067 }
13068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 /* fill the entry for all the sta with given TID's */
13070 if(WDA_ENABLE_BA == newBaCandidate)
13071 {
13072 /* move to next BA candidate */
13073 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13074 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13075 baCandidateCount++ ;
13076 newBaCandidate = WDA_DISABLE_BA ;
13077 }
13078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013079 /* prepare and send message to hal */
13080 if( 0 < baCandidateCount)
13081 {
13082 WDI_Status status = WDI_STATUS_SUCCESS ;
13083 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13084 tWDA_ReqParams *pWdaParams =
13085 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013086 if(NULL == pWdaParams)
13087 {
13088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 VOS_ASSERT(0) ;
13091 return;
13092 }
13093 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13094 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13095 if(NULL == wdiTriggerBaReq)
13096 {
13097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 VOS_ASSERT(0) ;
13100 vos_mem_free(pWdaParams);
13101 return;
13102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 do
13104 {
13105 WDI_TriggerBAReqinfoType *triggerBaInfo =
13106 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13107 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13108 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13109 * for each request */
13110 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13111 triggerBaInfo->ucBASessionID = 0;
13112 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13113 } while(0) ;
13114 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013116 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 pWdaParams->pWdaContext = pWDA;
13118 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13119 pWdaParams->wdaMsgParam = NULL;
13120 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13121 WDA_TriggerBaReqCallback, pWdaParams) ;
13122 if(IS_WDI_STATUS_FAILURE(status))
13123 {
13124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13125 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13126 vos_mem_free(pWdaParams->wdaMsgParam) ;
13127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13128 vos_mem_free(pWdaParams) ;
13129 }
13130 }
13131 else
13132 {
13133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13134 "There is no TID for initiating BA");
13135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 if( VOS_STATUS_SUCCESS !=
13137 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13138 {
13139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13140 "BA Activity Timer Stop Failed ");
13141 return ;
13142 }
13143 if( VOS_STATUS_SUCCESS !=
13144 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13145 {
13146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13147 "BA Activity Timer Start Failed ");
13148 return;
13149 }
13150 return ;
13151}
Jeff Johnson295189b2012-06-20 16:38:30 -070013152/*
13153 * WDA common routine to create timer used by WDA.
13154 */
13155static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13156{
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13158 tANI_U32 val = 0 ;
13159 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13160
13161 if(NULL == pMac)
13162 {
13163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013164 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 VOS_ASSERT(0);
13166 return VOS_STATUS_E_FAILURE;
13167 }
13168 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13169 != eSIR_SUCCESS)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13172 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13173 return VOS_STATUS_E_FAILURE;
13174 }
13175 val = SYS_MS_TO_TICKS(val) ;
13176
13177 /* BA activity check timer */
13178 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13179 "BA Activity Check timer", WDA_TimerHandler,
13180 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13181 if(status != TX_SUCCESS)
13182 {
13183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13184 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013185 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 /* Tx Complete Timeout timer */
13189 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13190 "Tx Complete Check timer", WDA_TimerHandler,
13191 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 if(status != TX_SUCCESS)
13193 {
13194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13195 "Unable to create Tx Complete Timeout timer");
13196 /* Destroy timer of BA activity check timer */
13197 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13198 if(status != TX_SUCCESS)
13199 {
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13201 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013202 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013203 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013204 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013205 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013206
13207 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13208
13209 /* Traffic Stats timer */
13210 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13211 "Traffic Stats timer", WDA_TimerHandler,
13212 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13213 if(status != TX_SUCCESS)
13214 {
13215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13216 "Unable to create traffic stats timer");
13217 /* Destroy timer of BA activity check timer */
13218 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13219 if(status != TX_SUCCESS)
13220 {
13221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13222 "Unable to Destroy BA activity timer");
13223 }
13224 /* Destroy timer of tx complete timer */
13225 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13226 if(status != TX_SUCCESS)
13227 {
13228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13229 "Unable to Tx complete timer");
13230 }
13231 return VOS_STATUS_E_FAILURE ;
13232 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013233 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013234}
Jeff Johnson295189b2012-06-20 16:38:30 -070013235/*
13236 * WDA common routine to destroy timer used by WDA.
13237 */
13238static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13239{
13240 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13242 if(status != TX_SUCCESS)
13243 {
13244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13245 "Unable to Destroy Tx Complete Timeout timer");
13246 return eSIR_FAILURE ;
13247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013248 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13249 if(status != TX_SUCCESS)
13250 {
13251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13252 "Unable to Destroy BA activity timer");
13253 return eSIR_FAILURE ;
13254 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013255 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13256 if(status != TX_SUCCESS)
13257 {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13259 "Unable to Destroy traffic stats timer");
13260 return eSIR_FAILURE ;
13261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 return eSIR_SUCCESS ;
13263}
Jeff Johnson295189b2012-06-20 16:38:30 -070013264/*
13265 * WDA timer handler.
13266 */
13267void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13268{
13269 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13270 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013271 /*
13272 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13273 */
13274 wdaMsg.type = timerInfo ;
13275 wdaMsg.bodyptr = NULL;
13276 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013277 /* post the message.. */
13278 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13279 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13280 {
13281 vosStatus = VOS_STATUS_E_BADMSG;
13282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013283}
Jeff Johnson295189b2012-06-20 16:38:30 -070013284/*
13285 * WDA Tx Complete timeout Indication.
13286 */
13287void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13288{
13289 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 if( pWDA->pAckTxCbFunc )
13291 {
13292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013293 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 pWDA->pAckTxCbFunc( pMac, 0);
13295 pWDA->pAckTxCbFunc = NULL;
13296 }
13297 else
13298 {
13299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013300 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013302}
Jeff Johnson295189b2012-06-20 16:38:30 -070013303/*
13304 * WDA Set REG Domain to VOS NV
13305 */
Abhishek Singha306a442013-11-07 18:39:01 +053013306eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13307 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013308{
Abhishek Singha306a442013-11-07 18:39:01 +053013309 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 {
13311 return eHAL_STATUS_INVALID_PARAMETER;
13312 }
13313 return eHAL_STATUS_SUCCESS;
13314}
Jeff Johnson295189b2012-06-20 16:38:30 -070013315
Jeff Johnson295189b2012-06-20 16:38:30 -070013316#ifdef FEATURE_WLAN_SCAN_PNO
13317/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013318 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 *
13320 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013321void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013322{
13323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013325 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013326 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 {
13328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 VOS_ASSERT(0) ;
13331 return ;
13332 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013333
Yue Ma7f44bbe2013-04-12 11:47:39 -070013334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13335 vos_mem_free(pWdaParams->wdaMsgParam);
13336 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013337
13338 return ;
13339}
Jeff Johnson295189b2012-06-20 16:38:30 -070013340/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013341 * FUNCTION: WDA_PNOScanReqCallback
13342 * Free memory.
13343 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13344 */
13345void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013346{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13348
13349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13350 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13351
13352 if(NULL == pWdaParams)
13353 {
13354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13355 "%s: pWdaParams received NULL", __func__);
13356 VOS_ASSERT(0);
13357 return;
13358 }
13359
13360 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13361 {
13362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13363 vos_mem_free(pWdaParams->wdaMsgParam);
13364 vos_mem_free(pWdaParams);
13365 }
13366
13367 return;
13368}
13369/*
13370 * FUNCTION: WDA_UpdateScanParamsRespCallback
13371 *
13372 */
13373void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13374{
13375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013377 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013378 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 {
13380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013381 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 VOS_ASSERT(0) ;
13383 return ;
13384 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013385
13386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13387 vos_mem_free(pWdaParams->wdaMsgParam);
13388 vos_mem_free(pWdaParams);
13389
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 return ;
13391}
Jeff Johnson295189b2012-06-20 16:38:30 -070013392/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013393 * FUNCTION: WDA_UpdateScanParamsReqCallback
13394 * Free memory.
13395 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13396 */
13397void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13398{
13399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13400
13401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13402 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13403
13404 if(NULL == pWdaParams)
13405 {
13406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13407 "%s: pWdaParams received NULL", __func__);
13408 VOS_ASSERT(0);
13409 return;
13410 }
13411
13412 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13413 {
13414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13415 vos_mem_free(pWdaParams->wdaMsgParam);
13416 vos_mem_free(pWdaParams);
13417 }
13418
13419 return;
13420}
13421/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013422 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13423 * Request to WDI to set Preferred Network List.Offload
13424 */
13425VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13426 tSirPNOScanReq *pPNOScanReqParams)
13427{
Jeff Johnson43971f52012-07-17 12:26:56 -070013428 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013429 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13430 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13431 tWDA_ReqParams *pWdaParams ;
13432 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013435 if(NULL == pwdiPNOScanReqInfo)
13436 {
13437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 VOS_ASSERT(0);
13440 return VOS_STATUS_E_NOMEM;
13441 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13443 if(NULL == pWdaParams)
13444 {
13445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013446 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013447 VOS_ASSERT(0);
13448 vos_mem_free(pwdiPNOScanReqInfo);
13449 return VOS_STATUS_E_NOMEM;
13450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013451 //
13452 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13453 //
13454 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13455 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13457 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13458 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13460 {
13461 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13462 &pPNOScanReqParams->aNetworks[i],
13463 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 /*Scan timer intervals*/
13466 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13467 &pPNOScanReqParams->scanTimers,
13468 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 /*Probe template for 2.4GHz band*/
13470 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13471 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13472 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13474 pPNOScanReqParams->p24GProbeTemplate,
13475 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013476 /*Probe template for 5GHz band*/
13477 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13478 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13479 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13481 pPNOScanReqParams->p5GProbeTemplate,
13482 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013483 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13484 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013485
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 /* Store Params pass it to WDI */
13487 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13488 pWdaParams->pWdaContext = pWDA;
13489 /* Store param pointer as passed in by caller */
13490 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013491 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013492 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013493 if(IS_WDI_STATUS_FAILURE(status))
13494 {
13495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13496 "Failure in Set PNO REQ WDI API, free all the memory " );
13497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13498 vos_mem_free(pWdaParams->wdaMsgParam);
13499 pWdaParams->wdaWdiApiMsgParam = NULL;
13500 pWdaParams->wdaMsgParam = NULL;
13501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013502 return CONVERT_WDI2VOS_STATUS(status) ;
13503}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013504
13505#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13506
13507void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13508{
13509 /*Convert the CSR Auth types to WDI Auth types */
13510 switch (csrAuthType)
13511 {
13512 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13513 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13514 break;
13515#ifdef FEATURE_WLAN_CCX
13516 case eCSR_AUTH_TYPE_CCKM_WPA:
13517 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13518 break;
13519#endif
13520 case eCSR_AUTH_TYPE_WPA:
13521 *AuthType = eWDA_AUTH_TYPE_WPA;
13522 break;
13523 case eCSR_AUTH_TYPE_WPA_PSK:
13524 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13525 break;
13526#ifdef FEATURE_WLAN_CCX
13527 case eCSR_AUTH_TYPE_CCKM_RSN:
13528 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13529 break;
13530#endif
13531 case eCSR_AUTH_TYPE_RSN:
13532 *AuthType = eWDA_AUTH_TYPE_RSN;
13533 break;
13534 case eCSR_AUTH_TYPE_RSN_PSK:
13535 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13536 break;
13537#if defined WLAN_FEATURE_VOWIFI_11R
13538 case eCSR_AUTH_TYPE_FT_RSN:
13539 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13540 break;
13541 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13542 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13543 break;
13544#endif
13545#ifdef FEATURE_WLAN_WAPI
13546 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13547 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13548 break;
13549 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13550 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13551 break;
13552#endif /* FEATURE_WLAN_WAPI */
13553 case eCSR_AUTH_TYPE_SHARED_KEY:
13554 case eCSR_AUTH_TYPE_AUTOSWITCH:
13555 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13556 break;
13557#if 0
13558 case eCSR_AUTH_TYPE_SHARED_KEY:
13559 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13560 break;
13561 case eCSR_AUTH_TYPE_AUTOSWITCH:
13562 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13563#endif
13564 default:
13565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13566 "%s: Unknown Auth Type", __func__);
13567 break;
13568 }
13569}
13570void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13571{
13572 switch (csrEncrType)
13573 {
13574 case eCSR_ENCRYPT_TYPE_NONE:
13575 *EncrType = WDI_ED_NONE;
13576 break;
13577 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13578 case eCSR_ENCRYPT_TYPE_WEP40:
13579 *EncrType = WDI_ED_WEP40;
13580 break;
13581 case eCSR_ENCRYPT_TYPE_WEP104:
13582 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13583 *EncrType = WDI_ED_WEP104;
13584 break;
13585 case eCSR_ENCRYPT_TYPE_TKIP:
13586 *EncrType = WDI_ED_TKIP;
13587 break;
13588 case eCSR_ENCRYPT_TYPE_AES:
13589 *EncrType = WDI_ED_CCMP;
13590 break;
13591#ifdef WLAN_FEATURE_11W
13592 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13593 *EncrType = WDI_ED_AES_128_CMAC;
13594 break;
13595#endif
13596#ifdef FEATURE_WLAN_WAPI
13597 case eCSR_ENCRYPT_TYPE_WPI:
13598 *EncrType = WDI_ED_WPI;
13599 break;
13600#endif
13601 case eCSR_ENCRYPT_TYPE_ANY:
13602 *EncrType = WDI_ED_ANY;
13603 break;
13604
13605 default:
13606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13607 "%s: Unknown Encryption Type", __func__);
13608 break;
13609 }
13610}
13611
13612/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013613 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013614 * Request to WDI to set Roam Offload Scan
13615 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013616VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013617 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13618{
13619 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013620 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13621 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013622 tWDA_ReqParams *pWdaParams ;
13623 v_U8_t csrAuthType;
13624 WDI_RoamNetworkType *pwdiRoamNetworkType;
13625 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13627 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013628 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013629 {
13630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13631 "%s: VOS MEM Alloc Failure", __func__);
13632 VOS_ASSERT(0);
13633 return VOS_STATUS_E_NOMEM;
13634 }
13635 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13636 if (NULL == pWdaParams)
13637 {
13638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13639 "%s: VOS MEM Alloc Failure", __func__);
13640 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013641 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013642 return VOS_STATUS_E_NOMEM;
13643 }
13644
13645 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013646 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013647 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013648 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13649 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013650 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13651 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13652 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13653 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13654 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13655 sizeof(pwdiRoamNetworkType->currAPbssid));
13656 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13657 csrAuthType);
13658 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13659 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13660 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13661 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13662 pwdiRoamOffloadScanInfo->LookupThreshold =
13663 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080013664 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
13665 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013666 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13667 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013668 pwdiRoamOffloadScanInfo->MAWCEnabled =
13669 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013670 pwdiRoamOffloadScanInfo->Command =
13671 pRoamOffloadScanReqParams->Command ;
13672 pwdiRoamOffloadScanInfo->StartScanReason =
13673 pRoamOffloadScanReqParams->StartScanReason ;
13674 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13675 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13676 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13677 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13678 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13679 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13680 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13681 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13682 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13683 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13684 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13685 pRoamOffloadScanReqParams->IsCCXEnabled ;
13686 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13687 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13688 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13689 pwdiRoamNetworkType->ssId.ucLength =
13690 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13691 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13692 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13693 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13694 pwdiRoamNetworkType->ChannelCount =
13695 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13696 pwdiRoamOffloadScanInfo->ChannelCacheType =
13697 pRoamOffloadScanReqParams->ChannelCacheType;
13698 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13699 pRoamOffloadScanReqParams->ValidChannelList,
13700 pRoamOffloadScanReqParams->ValidChannelCount);
13701 pwdiRoamOffloadScanInfo->ValidChannelCount =
13702 pRoamOffloadScanReqParams->ValidChannelCount;
13703 pwdiRoamOffloadScanInfo->us24GProbeSize =
13704 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13705 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13706 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13707 pRoamOffloadScanReqParams->p24GProbeTemplate,
13708 pwdiRoamOffloadScanInfo->us24GProbeSize);
13709 pwdiRoamOffloadScanInfo->us5GProbeSize =
13710 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13711 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13712 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13713 pRoamOffloadScanReqParams->p5GProbeTemplate,
13714 pwdiRoamOffloadScanInfo->us5GProbeSize);
13715 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13716 pRoamOffloadScanReqParams->MDID.mdiePresent;
13717 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13718 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013719 pwdiRoamOffloadScanInfo->nProbes =
13720 pRoamOffloadScanReqParams->nProbes;
13721 pwdiRoamOffloadScanInfo->HomeAwayTime =
13722 pRoamOffloadScanReqParams->HomeAwayTime;
13723 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013724 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013725 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013726 pWdaParams->pWdaContext = pWDA;
13727 /* Store param pointer as passed in by caller */
13728 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013729 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013730 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13731 if(IS_WDI_STATUS_FAILURE(status))
13732 {
13733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13734 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13736 vos_mem_free(pWdaParams->wdaMsgParam);
13737 pWdaParams->wdaWdiApiMsgParam = NULL;
13738 pWdaParams->wdaMsgParam = NULL;
13739 }
13740 return CONVERT_WDI2VOS_STATUS(status) ;
13741}
13742#endif
13743
Jeff Johnson295189b2012-06-20 16:38:30 -070013744/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013745 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013746 *
13747 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013748void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013749{
13750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13751
13752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013754
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013758 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013759 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013760 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013761 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013762
Jeff Johnson295189b2012-06-20 16:38:30 -070013763 vos_mem_free(pWdaParams->wdaMsgParam) ;
13764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13765 vos_mem_free(pWdaParams) ;
13766
13767 return ;
13768}
13769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013770 * FUNCTION: WDA_RssiFilterReqCallback
13771 * Free memory.
13772 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13773 */
13774void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13775{
13776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13777
13778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13779 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13780
13781 if(NULL == pWdaParams)
13782 {
13783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13784 "%s: pWdaParams received NULL", __func__);
13785 VOS_ASSERT(0);
13786 return;
13787 }
13788
13789 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13790 {
13791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13792 vos_mem_free(pWdaParams->wdaMsgParam);
13793 vos_mem_free(pWdaParams);
13794 }
13795
13796 return;
13797}
13798/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013799 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13800 * Request to WDI to set Preferred Network List.Offload
13801 */
13802VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13803 tSirSetRSSIFilterReq* pRssiFilterParams)
13804{
Jeff Johnson43971f52012-07-17 12:26:56 -070013805 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13807 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13808 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013811 if(NULL == pwdiSetRssiFilterReqInfo)
13812 {
13813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013815 VOS_ASSERT(0);
13816 return VOS_STATUS_E_NOMEM;
13817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13819 if(NULL == pWdaParams)
13820 {
13821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013823 VOS_ASSERT(0);
13824 vos_mem_free(pwdiSetRssiFilterReqInfo);
13825 return VOS_STATUS_E_NOMEM;
13826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013827 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013828 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13829 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013830
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 /* Store Params pass it to WDI */
13832 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13833 pWdaParams->pWdaContext = pWDA;
13834 /* Store param pointer as passed in by caller */
13835 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013836 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013837 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 if(IS_WDI_STATUS_FAILURE(status))
13840 {
13841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13842 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13844 vos_mem_free(pWdaParams->wdaMsgParam);
13845 pWdaParams->wdaWdiApiMsgParam = NULL;
13846 pWdaParams->wdaMsgParam = NULL;
13847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013848 return CONVERT_WDI2VOS_STATUS(status) ;
13849}
13850
Jeff Johnson295189b2012-06-20 16:38:30 -070013851/*
13852 * FUNCTION: WDA_ProcessUpdateScanParams
13853 * Request to WDI to update Scan Parameters
13854 */
13855VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13856 tSirUpdateScanParams *pUpdateScanParams)
13857{
Jeff Johnson43971f52012-07-17 12:26:56 -070013858 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13860 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13861 sizeof(WDI_UpdateScanParamsInfoType)) ;
13862 tWDA_ReqParams *pWdaParams ;
13863 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013865 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013866 if(NULL == wdiUpdateScanParamsInfoType)
13867 {
13868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013870 VOS_ASSERT(0);
13871 return VOS_STATUS_E_NOMEM;
13872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13874 if ( NULL == pWdaParams )
13875 {
13876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013878 VOS_ASSERT(0);
13879 vos_mem_free(wdiUpdateScanParamsInfoType);
13880 return VOS_STATUS_E_NOMEM;
13881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013882 //
13883 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13884 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13886 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13887 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13888 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080013889 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070013890 pUpdateScanParams->b11dEnabled,
13891 pUpdateScanParams->b11dResolved,
13892 pUpdateScanParams->ucChannelCount,
13893 pUpdateScanParams->usPassiveMinChTime,
13894 pUpdateScanParams->usPassiveMaxChTime,
13895 pUpdateScanParams->usActiveMinChTime,
13896 pUpdateScanParams->usActiveMaxChTime,
13897 sizeof(tSirUpdateScanParams),
13898 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13899
Jeff Johnson295189b2012-06-20 16:38:30 -070013900 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13901 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013902 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13903 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13905 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13907 pUpdateScanParams->usActiveMaxChTime;
13908 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13909 pUpdateScanParams->usActiveMinChTime;
13910 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13911 pUpdateScanParams->usPassiveMaxChTime;
13912 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13913 pUpdateScanParams->usPassiveMinChTime;
13914
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013916 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13917 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013918
Jeff Johnson295189b2012-06-20 16:38:30 -070013919 for ( i = 0; i <
13920 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13921 i++)
13922 {
13923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13924 "Update Scan Parameters channel: %d",
13925 pUpdateScanParams->aChannels[i]);
13926
13927 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13928 pUpdateScanParams->aChannels[i];
13929 }
13930
Yue Ma7f44bbe2013-04-12 11:47:39 -070013931 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13932 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013933
Jeff Johnson295189b2012-06-20 16:38:30 -070013934 /* Store Params pass it to WDI */
13935 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13936 pWdaParams->pWdaContext = pWDA;
13937 /* Store param pointer as passed in by caller */
13938 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013939
Jeff Johnson295189b2012-06-20 16:38:30 -070013940
13941
13942 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013943 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013944 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013945 if(IS_WDI_STATUS_FAILURE(status))
13946 {
13947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13948 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13950 vos_mem_free(pWdaParams->wdaMsgParam);
13951 vos_mem_free(pWdaParams);
13952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013953 return CONVERT_WDI2VOS_STATUS(status) ;
13954}
13955#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013956
13957#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13958/*
13959 * FUNCTION: WDA_RoamOffloadScanReqCallback
13960 *
13961 */
13962void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13963{
13964 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013965 vos_msg_t vosMsg;
13966 wpt_uint8 reason = 0;
13967
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013969 "<------ %s " ,__func__);
13970 if (NULL == pWdaParams)
13971 {
13972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13973 "%s: pWdaParams received NULL", __func__);
13974 VOS_ASSERT(0) ;
13975 return ;
13976 }
13977 if ( pWdaParams != NULL )
13978 {
13979 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13980 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013981 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13983 }
13984 if ( pWdaParams->wdaMsgParam != NULL)
13985 {
13986 vos_mem_free(pWdaParams->wdaMsgParam);
13987 }
13988
13989 vos_mem_free(pWdaParams) ;
13990 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013991 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13992 vosMsg.bodyptr = NULL;
13993 if (WDI_STATUS_SUCCESS != status)
13994 {
13995 reason = 0;
13996 }
13997 vosMsg.bodyval = reason;
13998 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13999 {
14000 /* free the mem and return */
14001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014002 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014003 }
14004
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014005 return ;
14006}
14007#endif
14008
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014010 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014011 *
14012 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014013void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014014{
14015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14016
14017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14018 "<------ %s " ,__func__);
14019
14020 if(NULL == pWdaParams)
14021 {
14022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14023 "%s: pWdaParams received NULL", __func__);
14024 VOS_ASSERT(0);
14025 return;
14026 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014027
14028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14029 vos_mem_free(pWdaParams->wdaMsgParam);
14030 vos_mem_free(pWdaParams);
14031
14032 return;
14033}
14034/*
14035 * FUNCTION: WDA_SetPowerParamsReqCallback
14036 * Free memory.
14037 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14038 */
14039void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14040{
14041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14042
14043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14044 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14045
14046 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014047 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14049 "%s: pWdaParams received NULL", __func__);
14050 VOS_ASSERT(0);
14051 return;
14052 }
14053
14054 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14055 {
14056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14057 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014058 vos_mem_free(pWdaParams);
14059 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014060
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014061 return;
14062}
14063
Jeff Johnson295189b2012-06-20 16:38:30 -070014064#ifdef WLAN_FEATURE_PACKET_FILTERING
14065/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014066 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014067 *
14068 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014069void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014070 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14071 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014072{
14073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 if(NULL == pWdaParams)
14077 {
14078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 VOS_ASSERT(0) ;
14081 return ;
14082 }
14083
14084 vos_mem_free(pWdaParams->wdaMsgParam) ;
14085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14086 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 //print a msg, nothing else to do
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014089 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 return ;
14091}
Jeff Johnson295189b2012-06-20 16:38:30 -070014092/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014093 * FUNCTION: WDA_8023MulticastListReqCallback
14094 * Free memory.
14095 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14096 */
14097void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14098{
14099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14100
14101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14102 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14103
14104 if(NULL == pWdaParams)
14105 {
14106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14107 "%s: pWdaParams received NULL", __func__);
14108 VOS_ASSERT(0);
14109 return;
14110 }
14111
14112 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14113 {
14114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14115 vos_mem_free(pWdaParams->wdaMsgParam);
14116 vos_mem_free(pWdaParams);
14117 }
14118
14119 return;
14120}
14121/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 * FUNCTION: WDA_Process8023MulticastListReq
14123 * Request to WDI to add 8023 Multicast List
14124 */
14125VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14126 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14127{
Jeff Johnson43971f52012-07-17 12:26:56 -070014128 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014129 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14130 tWDA_ReqParams *pWdaParams ;
14131 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014133 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014134 pwdiFltPktSetMcListReqParamsType =
14135 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14136 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14137 ) ;
14138 if(NULL == pwdiFltPktSetMcListReqParamsType)
14139 {
14140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014141 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 return VOS_STATUS_E_NOMEM;
14143 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14145 if(NULL == pWdaParams)
14146 {
14147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14150 return VOS_STATUS_E_NOMEM;
14151 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014152
Jeff Johnson295189b2012-06-20 16:38:30 -070014153 //
14154 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14155 //
14156 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014157 pRcvFltMcAddrList->ulMulticastAddrCnt;
14158
14159 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14160 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14161 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14162 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14163
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14165 {
14166 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14167 &(pRcvFltMcAddrList->multicastAddr[i]),
14168 sizeof(tSirMacAddr));
14169 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014170 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14171 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014172
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 /* Store Params pass it to WDI */
14174 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14175 pWdaParams->pWdaContext = pWDA;
14176 /* Store param pointer as passed in by caller */
14177 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 status = WDI_8023MulticastListReq(
14179 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014180 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014181 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 if(IS_WDI_STATUS_FAILURE(status))
14183 {
14184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14185 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14187 vos_mem_free(pWdaParams->wdaMsgParam);
14188 vos_mem_free(pWdaParams);
14189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 return CONVERT_WDI2VOS_STATUS(status) ;
14191}
Jeff Johnson295189b2012-06-20 16:38:30 -070014192/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014193 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014194 *
14195 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014196void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014197 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14198 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014199{
14200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014202 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014203 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 if(NULL == pWdaParams)
14205 {
14206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014207 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014208 VOS_ASSERT(0) ;
14209 return ;
14210 }
14211
14212 vos_mem_free(pWdaParams->wdaMsgParam) ;
14213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14214 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 //print a msg, nothing else to do
14216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014217 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 return ;
14219}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014220
14221/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014222 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14223 * Free memory.
14224 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014225 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014226void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014227 void* pUserData)
14228{
14229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14230
14231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14232 "<------ %s, wdiStatus: %d",
14233 __func__, wdiStatus);
14234
14235 if (NULL == pWdaParams)
14236 {
14237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14238 "%s: Invalid pWdaParams pointer", __func__);
14239 VOS_ASSERT(0);
14240 return;
14241 }
14242
14243 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14244 {
14245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14246 vos_mem_free(pWdaParams->wdaMsgParam);
14247 vos_mem_free(pWdaParams);
14248 }
14249
14250 return;
14251}
14252
Jeff Johnson295189b2012-06-20 16:38:30 -070014253/*
14254 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14255 * Request to WDI to set Receive Filters
14256 */
14257VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14258 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14259{
Jeff Johnson43971f52012-07-17 12:26:56 -070014260 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14262 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14263 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14264 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14265 tWDA_ReqParams *pWdaParams ;
14266 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014269 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14270 {
14271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014273 VOS_ASSERT(0);
14274 return VOS_STATUS_E_NOMEM;
14275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14277 if(NULL == pWdaParams)
14278 {
14279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014281 VOS_ASSERT(0);
14282 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14283 return VOS_STATUS_E_NOMEM;
14284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014285 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14286 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14287 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14288 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014289 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14290 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14291
14292 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14293 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014294
14295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14296 "FID %d FT %d NParams %d CT %d",
14297 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14298 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14299 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14300 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014301 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14302 {
14303 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14304 &pRcvPktFilterCfg->paramsData[i],
14305 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014307 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014308 pwdiSetRcvPktFilterReqParamsType->
14309 wdiPktFilterCfg.paramsData[i].protocolLayer,
14310 pwdiSetRcvPktFilterReqParamsType->
14311 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014313 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014314 pwdiSetRcvPktFilterReqParamsType->
14315 wdiPktFilterCfg.paramsData[i].dataOffset,
14316 pwdiSetRcvPktFilterReqParamsType->
14317 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014319 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014320 pwdiSetRcvPktFilterReqParamsType->
14321 wdiPktFilterCfg.paramsData[i].compareData[0],
14322 pwdiSetRcvPktFilterReqParamsType->
14323 wdiPktFilterCfg.paramsData[i].compareData[1],
14324 pwdiSetRcvPktFilterReqParamsType->
14325 wdiPktFilterCfg.paramsData[i].compareData[2],
14326 pwdiSetRcvPktFilterReqParamsType->
14327 wdiPktFilterCfg.paramsData[i].compareData[3],
14328 pwdiSetRcvPktFilterReqParamsType->
14329 wdiPktFilterCfg.paramsData[i].compareData[4],
14330 pwdiSetRcvPktFilterReqParamsType->
14331 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014333 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014334 pwdiSetRcvPktFilterReqParamsType->
14335 wdiPktFilterCfg.paramsData[i].dataMask[0],
14336 pwdiSetRcvPktFilterReqParamsType->
14337 wdiPktFilterCfg.paramsData[i].dataMask[1],
14338 pwdiSetRcvPktFilterReqParamsType->
14339 wdiPktFilterCfg.paramsData[i].dataMask[2],
14340 pwdiSetRcvPktFilterReqParamsType->
14341 wdiPktFilterCfg.paramsData[i].dataMask[3],
14342 pwdiSetRcvPktFilterReqParamsType->
14343 wdiPktFilterCfg.paramsData[i].dataMask[4],
14344 pwdiSetRcvPktFilterReqParamsType->
14345 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014346 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014347 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014348 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014349 /* Store Params pass it to WDI */
14350 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14351 pWdaParams->pWdaContext = pWDA;
14352 /* Store param pointer as passed in by caller */
14353 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014354 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014355 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014356 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014357 if(IS_WDI_STATUS_FAILURE(status))
14358 {
14359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14360 "Failure in SetFilter(),free all the memory,status %d ",status);
14361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14362 vos_mem_free(pWdaParams->wdaMsgParam);
14363 vos_mem_free(pWdaParams);
14364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014365 return CONVERT_WDI2VOS_STATUS(status) ;
14366}
Jeff Johnson295189b2012-06-20 16:38:30 -070014367/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014368 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014369 *
14370 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014371void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014372 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14373 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014374{
14375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14376 tWDA_CbContext *pWDA;
14377 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14378 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14379 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14380 tANI_U8 i;
14381 vos_msg_t vosMsg;
14382
14383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014385 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14386
Jeff Johnsone7245742012-09-05 17:12:55 -070014387 if(NULL == pRcvFltPktMatchCntRsp)
14388 {
14389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014390 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014391 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014392 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014393 return ;
14394 }
14395
Jeff Johnson295189b2012-06-20 16:38:30 -070014396 if(NULL == pWdaParams)
14397 {
14398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014399 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014400 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014401 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014402 return ;
14403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014404 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14405 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014406 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14407 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14408
14409 /* Message Header */
14410 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14411 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14412
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014413 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014414
14415 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14416 {
14417 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14418 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014420 /* VOS message wrapper */
14421 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14422 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14423 vosMsg.bodyval = 0;
14424 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14425 {
14426 /* free the mem and return */
14427 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14428 }
14429
14430 vos_mem_free(pWdaParams->wdaMsgParam) ;
14431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14432 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014433
14434 return;
14435}
14436/*
14437 * FUNCTION: WDA_FilterMatchCountReqCallback
14438 * Free memory and send RSP back to SME.
14439 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14440 */
14441void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14442{
14443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14444 vos_msg_t vosMsg;
14445
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14447 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14448
14449 if(NULL == pWdaParams)
14450 {
14451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14452 "%s: pWdaParams received NULL", __func__);
14453 VOS_ASSERT(0);
14454 return;
14455 }
14456
14457 /* VOS message wrapper */
14458 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14459 vosMsg.bodyptr = NULL;
14460 vosMsg.bodyval = 0;
14461
14462 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14463 {
14464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14465 vos_mem_free(pWdaParams->wdaMsgParam);
14466 vos_mem_free(pWdaParams);
14467 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14468 }
14469
14470 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014471}
Jeff Johnson295189b2012-06-20 16:38:30 -070014472/*
14473 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14474 * Request to WDI to get PC Filter Match Count
14475 */
14476VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14477{
Jeff Johnson43971f52012-07-17 12:26:56 -070014478 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14480 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14481 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014483 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014484 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14485 {
14486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014488 VOS_ASSERT(0);
14489 return VOS_STATUS_E_NOMEM;
14490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14492 if(NULL == pWdaParams)
14493 {
14494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014496 VOS_ASSERT(0);
14497 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14498 return VOS_STATUS_E_NOMEM;
14499 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014500
Yue Ma7f44bbe2013-04-12 11:47:39 -070014501 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14502 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014503
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014504 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14505 pRcvFltPktMatchRsp->bssId,
14506 sizeof(wpt_macAddr));
14507
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 /* Store Params pass it to WDI */
14509 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14510 pWdaParams->pWdaContext = pWDA;
14511 /* Store param pointer as passed in by caller */
14512 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014514 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014516 if(IS_WDI_STATUS_FAILURE(status))
14517 {
14518 /* failure returned by WDI API */
14519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14520 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14522 vos_mem_free(pWdaParams) ;
14523 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14524 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 return CONVERT_WDI2VOS_STATUS(status) ;
14527}
Jeff Johnson295189b2012-06-20 16:38:30 -070014528/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014529 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 *
14531 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014532void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014533 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14534 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014535{
14536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014539/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14540 if(NULL == pWdaParams)
14541 {
14542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014543 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 VOS_ASSERT(0) ;
14545 return ;
14546 }
14547
14548 vos_mem_free(pWdaParams->wdaMsgParam) ;
14549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14550 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014551 //print a msg, nothing else to do
14552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014553 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 return ;
14555}
Jeff Johnson295189b2012-06-20 16:38:30 -070014556/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014557 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14558 * Free memory.
14559 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14560 */
14561void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14562{
14563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14564
14565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14566 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14567
14568 if(NULL == pWdaParams)
14569 {
14570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14571 "%s: Invalid pWdaParams pointer", __func__);
14572 VOS_ASSERT(0);
14573 return;
14574 }
14575
14576 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14577 {
14578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14579 vos_mem_free(pWdaParams->wdaMsgParam);
14580 vos_mem_free(pWdaParams);
14581 }
14582
14583 return;
14584}
14585/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014586 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14587 * Request to WDI to clear Receive Filters
14588 */
14589VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14590 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14591{
Jeff Johnson43971f52012-07-17 12:26:56 -070014592 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014593 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14594 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14595 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014597 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014598 if(NULL == pwdiRcvFltPktClearReqParamsType)
14599 {
14600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014602 VOS_ASSERT(0);
14603 return VOS_STATUS_E_NOMEM;
14604 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14606 if(NULL == pWdaParams)
14607 {
14608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 VOS_ASSERT(0);
14611 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14612 return VOS_STATUS_E_NOMEM;
14613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14615 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014616 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14617 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14618 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14619 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014620
Yue Ma7f44bbe2013-04-12 11:47:39 -070014621 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014622 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014623 /* Store Params pass it to WDI */
14624 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14625 pWdaParams->pWdaContext = pWDA;
14626 /* Store param pointer as passed in by caller */
14627 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014629 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014630 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014631 if(IS_WDI_STATUS_FAILURE(status))
14632 {
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14634 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014636 vos_mem_free(pWdaParams->wdaMsgParam);
14637 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014639 return CONVERT_WDI2VOS_STATUS(status) ;
14640}
14641#endif // WLAN_FEATURE_PACKET_FILTERING
14642
Jeff Johnson295189b2012-06-20 16:38:30 -070014643/*
14644 * FUNCTION: WDA_ProcessSetPowerParamsReq
14645 * Request to WDI to set power params
14646 */
14647VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14648 tSirSetPowerParamsReq *pPowerParams)
14649{
Jeff Johnson43971f52012-07-17 12:26:56 -070014650 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14652 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014653 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014655 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014656 if(NULL == pwdiSetPowerParamsReqInfo)
14657 {
14658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014660 VOS_ASSERT(0);
14661 return VOS_STATUS_E_NOMEM;
14662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14664 if(NULL == pWdaParams)
14665 {
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 VOS_ASSERT(0);
14669 vos_mem_free(pwdiSetPowerParamsReqInfo);
14670 return VOS_STATUS_E_NOMEM;
14671 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014672
Jeff Johnson295189b2012-06-20 16:38:30 -070014673
14674 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14675 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014676 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14677 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014678 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14679 pPowerParams->uListenInterval;
14680 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14681 pPowerParams->uBcastMcastFilter;
14682 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14683 pPowerParams->uEnableBET;
14684 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14685 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014686 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14687 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014688 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14689 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014690
Jeff Johnson295189b2012-06-20 16:38:30 -070014691 /* Store Params pass it to WDI */
14692 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14693 pWdaParams->pWdaContext = pWDA;
14694 /* Store param pointer as passed in by caller */
14695 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014697 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014698 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 if(IS_WDI_STATUS_FAILURE(status))
14700 {
14701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14702 "Failure in Set power params REQ WDI API, free all the memory " );
14703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14704 vos_mem_free(pWdaParams->wdaMsgParam);
14705 pWdaParams->wdaWdiApiMsgParam = NULL;
14706 pWdaParams->wdaMsgParam = NULL;
14707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014708 return CONVERT_WDI2VOS_STATUS(status) ;
14709}
14710
14711/*
14712 * FUNCTION: WDA_SetTmLevelRspCallback
14713 * Set TM Level response
14714 */
14715void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14716{
14717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14718
14719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014721
14722 if(NULL == pWdaParams)
14723 {
14724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014725 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014726 VOS_ASSERT(0) ;
14727 return ;
14728 }
14729
14730 /* Dose not need to send notification to upper layer
14731 * Just free allocated resources */
14732 if( pWdaParams != NULL )
14733 {
14734 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14735 {
14736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14737 }
14738 vos_mem_free(pWdaParams->wdaMsgParam) ;
14739 vos_mem_free(pWdaParams) ;
14740 }
14741}
14742
14743/*
14744 * FUNCTION: WDA_ProcessSetTmLevelReq
14745 * Set TM Level request
14746 */
14747VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14748 tAniSetTmLevelReq *setTmLevelReq)
14749{
14750 WDI_Status status = WDI_STATUS_SUCCESS ;
14751 tWDA_ReqParams *pWdaParams ;
14752 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14753 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14754 sizeof(WDI_SetTmLevelReqType)) ;
14755 if(NULL == wdiSetTmLevelReq)
14756 {
14757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014759 VOS_ASSERT(0);
14760 return VOS_STATUS_E_NOMEM;
14761 }
14762
14763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14764 if(NULL == pWdaParams)
14765 {
14766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014768 VOS_ASSERT(0);
14769 vos_mem_free(wdiSetTmLevelReq);
14770 return VOS_STATUS_E_NOMEM;
14771 }
14772
14773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014775
14776 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14777 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14778
14779 pWdaParams->pWdaContext = pWDA;
14780 pWdaParams->wdaMsgParam = setTmLevelReq;
14781 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14782
14783 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14784 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14785
14786 if(IS_WDI_STATUS_FAILURE(status))
14787 {
14788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014789 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 vos_mem_free(pWdaParams->wdaMsgParam) ;
14791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14792 vos_mem_free(pWdaParams) ;
14793 }
14794
14795 return CONVERT_WDI2VOS_STATUS(status) ;
14796}
14797
14798VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14799 tpTxControlParams pTxCtrlParam)
14800{
14801 VOS_STATUS wdaStatus;
14802
14803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014804 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014805 if( pTxCtrlParam == NULL )
14806 {
14807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014808 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014809 return VOS_STATUS_E_FAILURE;
14810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014811 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14812 {
14813 wdaStatus = WDA_SuspendDataTx(pWDA);
14814 }
14815 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14816 {
14817 wdaStatus = WDA_ResumeDataTx(pWDA);
14818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 return wdaStatus;
14820}
14821
14822 /* FUNCTION WDA_featureCapsExchange
14823 * WDA API to invoke capability exchange between host and FW.
14824 */
14825void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14826{
14827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014828 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 WDI_featureCapsExchangeReq( NULL, pVosContext);
14830}
14831
Yathish9f22e662012-12-10 14:21:35 -080014832/* FUNCTION WDA_disableCapablityFeature
14833 * WDA API to diable Active mode offload in host.
14834 */
14835void WDA_disableCapablityFeature(tANI_U8 feature_index)
14836{
14837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14838 "%s:enter", __func__ );
14839 WDI_disableCapablityFeature(feature_index);
14840}
14841
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 /* FUNCTION WDA_getHostWlanFeatCaps
14843 * Wrapper for WDI API, that will return if the feature (enum value).passed
14844 * to this API is supported or not in Host
14845 * return value
14846 * 0 - implies feature is NOT Supported
14847 * any non zero value - implies feature is SUPPORTED
14848 */
14849tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14850{
14851 return WDI_getHostWlanFeatCaps(featEnumValue);
14852}
14853
14854 /* FUNCTION WDA_getFwWlanFeatCaps
14855 * Wrapper for WDI API, that will return if the feature (enum value).passed
14856 * to this API is supported or not in FW
14857 * return value
14858 * 0 - implies feature is NOT Supported
14859 * any non zero value - implies feature is SUPPORTED
14860 */
14861tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14862{
14863 return WDI_getFwWlanFeatCaps(featEnumValue);
14864}
14865
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014866
Jeff Johnson295189b2012-06-20 16:38:30 -070014867/*
14868 * FUNCTION: WDA_shutdown
14869 * Shutdown WDA/WDI without handshaking with Riva.
14870 * Synchronous function.
14871 */
14872VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14873{
14874 WDI_Status wdiStatus;
14875 //tANI_U8 eventIdx = 0;
14876 VOS_STATUS status = VOS_STATUS_SUCCESS;
14877 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 if (NULL == pWDA)
14879 {
14880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014881 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014882 VOS_ASSERT(0);
14883 return VOS_STATUS_E_FAILURE;
14884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 /* FTM mode stay START_STATE */
14886 if( (WDA_READY_STATE != pWDA->wdaState) &&
14887 (WDA_INIT_STATE != pWDA->wdaState) &&
14888 (WDA_START_STATE != pWDA->wdaState) )
14889 {
14890 VOS_ASSERT(0);
14891 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014892
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014893 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14894 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014895 {
14896 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014897 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014898 }
Leo Chang9d76f622013-08-23 16:34:52 -070014899 else
14900 {
14901 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14902 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014903
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 /* call WDI shutdown */
14905 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14907 {
14908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14909 "error in WDA Stop" );
14910 status = VOS_STATUS_E_FAILURE;
14911 }
14912 /* WDI stop is synchrnous, shutdown is complete when it returns */
14913 pWDA->wdaState = WDA_STOP_STATE;
14914
Jeff Johnson295189b2012-06-20 16:38:30 -070014915 /* shutdown should perform the stop & close actions. */
14916 /* Destroy the event */
14917 status = vos_event_destroy(&pWDA->txFrameEvent);
14918 if(!VOS_IS_STATUS_SUCCESS(status))
14919 {
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014921 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014922 status = VOS_STATUS_E_FAILURE;
14923 }
14924 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14925 if(!VOS_IS_STATUS_SUCCESS(status))
14926 {
14927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014928 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014929 status = VOS_STATUS_E_FAILURE;
14930 }
14931 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14932 if(!VOS_IS_STATUS_SUCCESS(status))
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014935 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 status = VOS_STATUS_E_FAILURE;
14937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014938 /* free WDA context */
14939 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14940 if ( !VOS_IS_STATUS_SUCCESS(status) )
14941 {
14942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14943 "error in WDA close " );
14944 status = VOS_STATUS_E_FAILURE;
14945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014946 return status;
14947}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014948
Jeff Johnsone7245742012-09-05 17:12:55 -070014949/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014950 * FUNCTION: WDA_setNeedShutdown
14951 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014952 */
14953
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014954void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014955{
14956 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014957 if(pWDA == NULL)
14958 {
14959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14960 "Could not get the WDA Context pointer" );
14961 return;
14962 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014963 pWDA->needShutdown = TRUE;
14964}
14965/*
14966 * FUNCTION: WDA_needShutdown
14967 * WDA needs a shutdown
14968 */
14969
14970v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14971{
14972 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014973 if(pWDA == NULL)
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "Could not get the WDA Context pointer" );
14977 return 0;
14978 }
14979 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014980}
14981
Mohit Khanna4a70d262012-09-11 16:30:12 -070014982#ifdef WLAN_FEATURE_11AC
14983/*
14984 * FUNCTION: WDA_SetBeaconFilterReqCallback
14985 *
14986 */
14987void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14988{
14989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014991 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014992 if(NULL == pWdaParams)
14993 {
14994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014995 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014996 VOS_ASSERT(0) ;
14997 return ;
14998 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014999
Mohit Khanna4a70d262012-09-11 16:30:12 -070015000 vos_mem_free(pWdaParams->wdaMsgParam) ;
15001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15002 vos_mem_free(pWdaParams) ;
15003 /*
15004 * No respone required for SetBeaconFilter req so just free the request
15005 * param here
15006 */
15007
15008 return ;
15009}
15010
15011VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15012 tUpdateVHTOpMode *pData)
15013{
15014 WDI_Status status = WDI_STATUS_SUCCESS ;
15015 tWDA_ReqParams *pWdaParams ;
15016 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15017 sizeof(WDI_UpdateVHTOpMode)) ;
15018 if(NULL == wdiTemp)
15019 {
15020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015021 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015022 VOS_ASSERT(0);
15023 return VOS_STATUS_E_NOMEM;
15024 }
15025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15026 if(NULL == pWdaParams)
15027 {
15028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015029 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015030 VOS_ASSERT(0);
15031 vos_mem_free(wdiTemp);
15032 return VOS_STATUS_E_NOMEM;
15033 }
15034
15035 wdiTemp->opMode = pData->opMode;
15036 wdiTemp->staId = pData->staId;
15037
15038 pWdaParams->pWdaContext = pWDA;
15039 /* Store Req pointer, as this will be used for response */
15040 pWdaParams->wdaMsgParam = (void *)pData;
15041 /* store Params pass it to WDI */
15042 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15043
15044 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15045
15046 if(IS_WDI_STATUS_FAILURE(status))
15047 {
15048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15049 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15051 vos_mem_free(pWdaParams->wdaMsgParam);
15052 vos_mem_free(pWdaParams);
15053 }
15054 return CONVERT_WDI2VOS_STATUS(status) ;
15055}
15056#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015057
15058/*==========================================================================
15059 FUNCTION WDA_TransportChannelDebug
15060
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015061 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015062 Display Transport Channel debugging information
15063 User may request to display DXE channel snapshot
15064 Or if host driver detects any abnormal stcuk may display
15065
15066 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015067 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015068 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015069 enableStallDetect : Enable stall detect feature
15070 This feature will take effect to data performance
15071 Not integrate till fully verification
15072
15073 RETURN VALUE
15074 NONE
15075
15076===========================================================================*/
15077void WDA_TransportChannelDebug
15078(
schang6295e542013-03-12 15:31:23 -070015079 tpAniSirGlobal pMac,
15080 v_BOOL_t displaySnapshot,
15081 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015082)
15083{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015084 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015085 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015086}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015087
15088/*==========================================================================
15089 FUNCTION WDA_SetEnableSSR
15090
15091 DESCRIPTION
15092 API to enable/disable SSR on WDI timeout
15093
15094 PARAMETERS
15095 enableSSR : enable/disable SSR
15096
15097 RETURN VALUE
15098 NONE
15099
15100===========================================================================*/
15101void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15102{
15103 WDI_SetEnableSSR(enableSSR);
15104}
Leo Chang9056f462013-08-01 19:21:11 -070015105
15106#ifdef FEATURE_WLAN_LPHB
15107/*
15108 * FUNCTION: WDA_LPHBconfRspCallback
15109 *
15110 */
15111void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15112{
15113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15114
15115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15116 "<------ %s " ,__func__);
15117 if (NULL == pWdaParams)
15118 {
15119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15120 "%s: pWdaParams received NULL", __func__);
15121 VOS_ASSERT(0) ;
15122 return ;
15123 }
15124
15125 /* Do not need to send notification to upper layer
15126 * Just free allocated resources */
15127 if (pWdaParams != NULL)
15128 {
15129 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15130 {
15131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15132 }
15133 vos_mem_free(pWdaParams->wdaMsgParam) ;
15134 vos_mem_free(pWdaParams) ;
15135 }
15136
15137 return;
15138}
15139
15140/*
15141 * FUNCTION: WDA_ProcessLPHBConfReq
15142 *
15143 */
15144VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15145 tSirLPHBReq *pData)
15146{
15147 WDI_Status wdiStatus;
15148 tWDA_ReqParams *pWdaParams ;
15149
15150 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15151 "------> %s " , __func__);
15152
15153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15154 if (NULL == pWdaParams)
15155 {
15156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15157 "%s: VOS MEM Alloc Failure", __func__);
15158 VOS_ASSERT(0);
15159 vos_mem_free(pData);
15160 return VOS_STATUS_E_NOMEM;
15161 }
15162
15163 pWdaParams->pWdaContext = pWDA;
15164 pWdaParams->wdaMsgParam = (void *)pData;
15165 pWdaParams->wdaWdiApiMsgParam = NULL;
15166
15167 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15168 if (WDI_STATUS_PENDING == wdiStatus)
15169 {
15170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15171 "Pending received for %s:%d ", __func__, __LINE__);
15172 }
15173 else if (WDI_STATUS_SUCCESS != wdiStatus)
15174 {
15175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15176 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15177 vos_mem_free(pWdaParams->wdaMsgParam);
15178 vos_mem_free(pWdaParams);
15179 }
15180
15181 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15182}
15183#endif /* FEATURE_WLAN_LPHB */
15184