blob: 41ee8f060bfcee09279a215d41a5dbc563806a6e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
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,
263 "WDI Sync Event init failed - status = %d\n", 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,
271 "VOS Mgmt Frame Event init failed - status = %d\n", 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,
278 "VOS suspend data tx Event init failed - status = %d\n", 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,
285 "VOS wait On Wdi Ind Event init failed - status = %d\n", 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;
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 if ((NULL == pMac)||(NULL == wdaContext))
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 VOS_ASSERT(0);
534 return VOS_STATUS_E_FAILURE;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
537 WNI_CFG_STA_ID_LEN +
538 WNI_CFG_EDCA_WME_ACBK_LEN +
539 WNI_CFG_EDCA_WME_ACBE_LEN +
540 WNI_CFG_EDCA_WME_ACVI_LEN +
541 WNI_CFG_EDCA_WME_ACVO_LEN +
542 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 /* malloc memory for all configs in one shot */
544 configParam = vos_mem_malloc(configParamSize);
545
546 if(NULL == configParam )
547 {
548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700549 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 VOS_ASSERT(0) ;
551 return VOS_STATUS_E_NOMEM;
552 }
553 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 tlvStruct = (tHalCfg *)configParam;
556 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 /* TODO: Remove Later */
558 /* QWLAN_HAL_CFG_STA_ID */
559 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
560 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
561 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
562 eSIR_SUCCESS)
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
565 "Failed to get value for WNI_CFG_STA_ID");
566 goto handle_failure;
567 }
568 tlvStruct->length = strLength ;
569 /* calculate the pad bytes to have the CFG in aligned format */
570 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
571 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700572 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
573 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
575 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
576 tlvStruct->length = sizeof(tANI_U32);
577 configDataValue = (tANI_U32 *)(tlvStruct + 1);
578 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
579 != eSIR_SUCCESS)
580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
582 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
583 goto handle_failure;
584 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
586 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
588 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
589 tlvStruct->length = sizeof(tANI_U32);
590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
591 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
592 eSIR_SUCCESS)
593 {
594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
595 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
596 goto handle_failure;
597 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
599 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
601 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
602 tlvStruct->length = sizeof(tANI_U32);
603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
604 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
605 != eSIR_SUCCESS)
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
609 goto handle_failure;
610 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
612 + sizeof(tHalCfg) + tlvStruct->length)) ;
613
614 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
615 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
616 tlvStruct->length = sizeof(tANI_U32);
617 configDataValue = (tANI_U32 *)(tlvStruct + 1);
618 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
619 configDataValue ) != eSIR_SUCCESS)
620 {
621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
622 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
623 goto handle_failure;
624 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
626 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* QWLAN_HAL_CFG_CAL_PERIOD */
628 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
629 tlvStruct->length = sizeof(tANI_U32);
630 configDataValue = (tANI_U32 *)(tlvStruct + 1);
631 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
632 != eSIR_SUCCESS)
633 {
634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
635 "Failed to get value for WNI_CFG_CAL_PERIOD");
636 goto handle_failure;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
639 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* QWLAN_HAL_CFG_CAL_CONTROL */
641 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
642 tlvStruct->length = sizeof(tANI_U32);
643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
644 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
645 != eSIR_SUCCESS)
646 {
647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
648 "Failed to get value for WNI_CFG_CAL_CONTROL");
649 goto handle_failure;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
652 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 /* QWLAN_HAL_CFG_PROXIMITY */
654 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
655 tlvStruct->length = sizeof(tANI_U32);
656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
657 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
658 != eSIR_SUCCESS)
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
661 "Failed to get value for WNI_CFG_PROXIMITY");
662 goto handle_failure;
663 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
665 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
667 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
668 tlvStruct->length = sizeof(tANI_U32);
669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
670 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
671 != eSIR_SUCCESS)
672 {
673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
674 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
675 goto handle_failure;
676 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700677 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
678 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
680 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
681 tlvStruct->length = sizeof(tANI_U32);
682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
683 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
684 eSIR_SUCCESS)
685 {
686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
687 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
688 goto handle_failure;
689 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
691 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
693 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
694 tlvStruct->length = sizeof(tANI_U32);
695 configDataValue = (tANI_U32 *)(tlvStruct + 1);
696 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
697 configDataValue ) != eSIR_SUCCESS)
698 {
699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
700 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
701 goto handle_failure;
702 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700703 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
704 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
706 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
707 tlvStruct->length = sizeof(tANI_U32);
708 configDataValue = (tANI_U32 *)(tlvStruct + 1);
709 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
710 eSIR_SUCCESS)
711 {
712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
713 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
714 goto handle_failure;
715 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
717 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
719 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
720 tlvStruct->length = sizeof(tANI_U32);
721 configDataValue = (tANI_U32 *)(tlvStruct + 1);
722 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
723 eSIR_SUCCESS)
724 {
725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
726 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
727 goto handle_failure;
728 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
730 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
732 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
733 tlvStruct->length = sizeof(tANI_U32);
734 configDataValue = (tANI_U32 *)(tlvStruct + 1);
735 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
736 eSIR_SUCCESS)
737 {
738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
739 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
740 goto handle_failure;
741 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
743 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
745 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
746 tlvStruct->length = sizeof(tANI_U32);
747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
748 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
749 configDataValue ) != eSIR_SUCCESS)
750 {
751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
752 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
753 goto handle_failure;
754 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
756 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
758 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
762 configDataValue ) != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length));
770
771 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
772 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
773 tlvStruct->length = sizeof(tANI_U32);
774 configDataValue = (tANI_U32 *)(tlvStruct + 1);
775 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
776 configDataValue ) != eSIR_SUCCESS)
777 {
778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
779 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
780 goto handle_failure;
781 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700782 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
783 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
785 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
786 tlvStruct->length = sizeof(tANI_U32);
787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
788 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
789 configDataValue ) != eSIR_SUCCESS)
790 {
791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
792 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
793 goto handle_failure;
794 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
796 + sizeof(tHalCfg) + tlvStruct->length));
797
798 /* QWLAN_HAL_CFG_FIXED_RATE */
799 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
800 tlvStruct->length = sizeof(tANI_U32);
801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
802 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
803 != eSIR_SUCCESS)
804 {
805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
806 "Failed to get value for WNI_CFG_FIXED_RATE");
807 goto handle_failure;
808 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700809 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
810 + sizeof(tHalCfg) + tlvStruct->length));
811
812 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
813 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
817 != eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length));
825
826 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
827 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
828 tlvStruct->length = sizeof(tANI_U32);
829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
830 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
831 configDataValue ) != eSIR_SUCCESS)
832 {
833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
834 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
835 goto handle_failure;
836 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700837 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
838 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
840 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
841 tlvStruct->length = sizeof(tANI_U32);
842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
843 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
844 configDataValue ) != eSIR_SUCCESS)
845 {
846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
847 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
848 goto handle_failure;
849 }
850 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
851 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
853 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
854 tlvStruct->length = sizeof(tANI_U32);
855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
856 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
857 configDataValue ) != eSIR_SUCCESS)
858 {
859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
860 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
861 goto handle_failure;
862 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700863 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
864 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
866 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
867 tlvStruct->length = sizeof(tANI_U32);
868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
869 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
870 configDataValue ) != eSIR_SUCCESS)
871 {
872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
873 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
874 goto handle_failure;
875 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700876 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
877 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
879 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
880 tlvStruct->length = sizeof(tANI_U32);
881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
882 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
883 configDataValue ) != eSIR_SUCCESS)
884 {
885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
886 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
887 goto handle_failure;
888 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
890 + sizeof(tHalCfg) + tlvStruct->length);
891
892#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
893 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
894 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length);
906#endif
907 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
908 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
912 configDataValue ) != eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
921 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
925 eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length);
933
934 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
935 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
936 tlvStruct->length = sizeof(tANI_U32);
937 configDataValue = (tANI_U32 *)(tlvStruct + 1);
938 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
939 configDataValue ) != eSIR_SUCCESS)
940 {
941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
942 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
943 goto handle_failure;
944 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700945 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
946 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
948 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
949 tlvStruct->length = sizeof(tANI_U32);
950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
951 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
952 configDataValue ) != eSIR_SUCCESS)
953 {
954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
955 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
956 goto handle_failure;
957 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700958 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
959 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
961 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
974 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
978 configDataValue ) != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length);
986
987 /* QWLAN_HAL_CFG_STATS_PERIOD */
988 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
992 eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_STATS_PERIOD");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1001 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1002 tlvStruct->length = sizeof(tANI_U32);
1003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1004 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1005 eSIR_SUCCESS)
1006 {
1007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1008 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1009 goto handle_failure;
1010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1014 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1018 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001019 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1020 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1022 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1023 tlvStruct->length = sizeof(tANI_U32);
1024 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1025 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1026 != eSIR_SUCCESS)
1027 {
1028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1029 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1030 goto handle_failure;
1031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1033 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1035 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1036 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1039 &strLength) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1043 goto handle_failure;
1044 }
1045 tlvStruct->length = strLength;
1046 /* calculate the pad bytes to have the CFG in aligned format */
1047 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1048 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1050 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1052 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1053 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1055 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1056 &strLength) != eSIR_SUCCESS)
1057 {
1058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1059 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1060 goto handle_failure;
1061 }
1062 tlvStruct->length = strLength;
1063 /* calculate the pad bytes to have the CFG in aligned format */
1064 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1065 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1069 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1070 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1073 &strLength) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1077 goto handle_failure;
1078 }
1079 tlvStruct->length = strLength;
1080 /* calculate the pad bytes to have the CFG in aligned format */
1081 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1082 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1084 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1086 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1087 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1090 &strLength) != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1094 goto handle_failure;
1095 }
1096 tlvStruct->length = strLength;
1097 /* calculate the pad bytes to have the CFG in aligned format */
1098 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1099 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001100 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1101 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1103 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1104 tlvStruct->length = sizeof(tANI_U32);
1105 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1106 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1107 != eSIR_SUCCESS)
1108 {
1109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1110 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1111 goto handle_failure;
1112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1114 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1116 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1117 tlvStruct->length = sizeof(tANI_U32);
1118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1119 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1120 != eSIR_SUCCESS)
1121 {
1122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1123 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1124 goto handle_failure;
1125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1129 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1133 != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1142 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1143 tlvStruct->length = sizeof(tANI_U32);
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1146 != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1150 goto handle_failure;
1151 }
1152 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1153 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1155 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1156 tlvStruct->length = sizeof(tANI_U32);
1157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1158 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1159 != eSIR_SUCCESS)
1160 {
1161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1162 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1163 goto handle_failure;
1164 }
1165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1166 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001167 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1168 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1169 tlvStruct->length = sizeof(tANI_U32);
1170 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1171 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1172 != eSIR_SUCCESS)
1173 {
1174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1175 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1176 goto handle_failure;
1177 }
1178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1179 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1181 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1182 tlvStruct->length = sizeof(tANI_U32);
1183 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1184 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1185 != eSIR_SUCCESS)
1186 {
1187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1188 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1189 goto handle_failure;
1190 }
1191 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1192 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001193 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1194 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1195 tlvStruct->length = sizeof(tANI_U32);
1196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1197 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1198 != eSIR_SUCCESS)
1199 {
1200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1201 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1202 goto handle_failure;
1203 }
1204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1205 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1207 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1208 tlvStruct->length = sizeof(tANI_U32);
1209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1210 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1211 != eSIR_SUCCESS)
1212 {
1213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1214 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1215 goto handle_failure;
1216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1218 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1220 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1221 tlvStruct->length = sizeof(tANI_U32);
1222 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1223 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1224 != eSIR_SUCCESS)
1225 {
1226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1227 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1228 goto handle_failure;
1229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1233 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1237 != eSIR_SUCCESS)
1238 {
1239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1240 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1241 goto handle_failure;
1242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1246 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1247 * into FW, so the parameters are added here.
1248 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1250 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1251 tlvStruct->length = sizeof(tANI_U32);
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1255 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001256 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1264 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1265 tlvStruct->length = sizeof(tANI_U32);
1266 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1267 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1268 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1269 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001270 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1271 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1272 tlvStruct->length = sizeof(tANI_U32);
1273 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1274 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1275 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1276 + sizeof(tHalCfg) + tlvStruct->length) ;
1277
1278 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
1285
1286 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1287 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1288 tlvStruct->length = sizeof(tANI_U32);
1289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1290 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
1293
1294 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
1301
1302 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1303 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
1309
1310 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1311 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1312 tlvStruct->length = sizeof(tANI_U32);
1313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1314 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
1317
1318 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1319 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1320 tlvStruct->length = sizeof(tANI_U32);
1321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1322 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1324 + sizeof(tHalCfg) + tlvStruct->length) ;
1325
1326 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1327 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1331 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1332 + sizeof(tHalCfg) + tlvStruct->length) ;
1333
1334 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1335 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1336 tlvStruct->length = sizeof(tANI_U32);
1337 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1338 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
1341
1342 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1343 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1344 tlvStruct->length = sizeof(tANI_U32);
1345 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1346 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1347 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1348 + sizeof(tHalCfg) + tlvStruct->length) ;
1349
1350 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1351 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1352 tlvStruct->length = sizeof(tANI_U32);
1353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1354 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1355 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1356 + sizeof(tHalCfg) + tlvStruct->length) ;
1357
1358 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1359 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
1365
1366 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1367 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1368 tlvStruct->length = sizeof(tANI_U32);
1369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1370 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1371 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1372 + sizeof(tHalCfg) + tlvStruct->length) ;
1373
1374 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001375 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1376 tlvStruct->length = sizeof(tANI_U32);
1377 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1378 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1379 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1380 wcnssCompiledApiVersion.minor,
1381 wcnssCompiledApiVersion.version,
1382 wcnssCompiledApiVersion.revision);
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
Jeff Johnsond13512a2012-07-17 11:42:19 -07001386 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1387 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1391 configDataValue ) != eSIR_SUCCESS)
1392 {
1393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1394 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1395 goto handle_failure;
1396 }
1397
1398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
1400 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1401 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1405 configDataValue ) != eSIR_SUCCESS)
1406 {
1407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1408 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1409 goto handle_failure;
1410 }
1411
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414
1415 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1416 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1420 != eSIR_SUCCESS)
1421 {
1422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1423 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1424 goto handle_failure;
1425 }
1426
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
1429
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001430 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1431 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1435 != eSIR_SUCCESS)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1438 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1439 goto handle_failure;
1440 }
1441
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001444#ifdef WLAN_SOFTAP_VSTA_FEATURE
1445 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1446 tlvStruct->length = sizeof(tANI_U32);
1447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1448 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1449 != eSIR_SUCCESS)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1452 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1453 goto handle_failure;
1454 }
1455
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458#endif
1459
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001460 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1461 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1462 tlvStruct->length = sizeof(tANI_U32);
1463 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1464
1465 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1466 != eSIR_SUCCESS)
1467 {
1468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1469 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1470 goto handle_failure;
1471 }
1472
1473 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1474 + sizeof(tHalCfg) + tlvStruct->length) ;
1475
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301476/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1477 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1481 configDataValue ) != eSIR_SUCCESS)
1482 {
1483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1484 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1485 goto handle_failure;
1486 }
1487
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301490#ifdef FEATURE_WLAN_TDLS
1491 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1492 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1500 goto handle_failure;
1501 }
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1506 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1510 configDataValue ) != eSIR_SUCCESS)
1511 {
1512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1513 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1514 goto handle_failure;
1515 }
1516 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1517 + sizeof(tHalCfg) + tlvStruct->length) ;
1518 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1519 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1520 tlvStruct->length = sizeof(tANI_U32);
1521 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1522 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1523 configDataValue ) != eSIR_SUCCESS)
1524 {
1525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1526 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1527 goto handle_failure;
1528 }
1529 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1530 + sizeof(tHalCfg) + tlvStruct->length) ;
1531 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1532 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1536 configDataValue ) != eSIR_SUCCESS)
1537 {
1538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1539 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1540 goto handle_failure;
1541 }
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
1544#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301545
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001546 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1547 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1548 tlvStruct->length = sizeof(tANI_U32);
1549 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1550 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1551 configDataValue ) != eSIR_SUCCESS)
1552 {
1553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1554 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1555 goto handle_failure;
1556 }
1557
1558 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1559 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001560
1561 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1562 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1563 tlvStruct->length = sizeof(tANI_U32);
1564 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1565 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1566 != eSIR_SUCCESS)
1567 {
1568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1569 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1570 goto handle_failure;
1571 }
1572 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length));
1574
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301575 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1576 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1580 configDataValue ) != eSIR_SUCCESS)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1583 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1584 goto handle_failure;
1585 }
1586
1587 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1588 + sizeof(tHalCfg) + tlvStruct->length) ;
1589
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001591#ifdef WLAN_DEBUG
1592 {
1593 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1595 "****** Dumping CFG TLV ***** ");
1596 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1597 {
1598 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1599 "%02x %02x %02x %02x %02x %02x %02x %02x",
1600 tlvStructStart[i],
1601 tlvStructStart[i+1],
1602 tlvStructStart[i+2],
1603 tlvStructStart[i+3],
1604 tlvStructStart[i+4],
1605 tlvStructStart[i+5],
1606 tlvStructStart[i+6],
1607 tlvStructStart[i+7]);
1608 }
1609 /* Dump the bytes in the last line*/
1610 for (; i < wdiStartParams->usConfigBufferLen; i++)
1611 {
1612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1613 "%02x ",tlvStructStart[i]);
1614 }
1615 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1616 "**************************** ");
1617 }
1618#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001619 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001620handle_failure:
1621 vos_mem_free(configParam);
1622 return VOS_STATUS_E_FAILURE;
1623}
Jeff Johnson295189b2012-06-20 16:38:30 -07001624/*
1625 * FUNCTION: WDA_wdiCompleteCB
1626 * call the voss call back function
1627 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001628void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001629{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1631 tWDA_CbContext *wdaContext;
1632
1633 if(NULL == pWdaParams)
1634 {
1635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001636 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001637 VOS_ASSERT(0) ;
1638 return ;
1639 }
1640
1641 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1642
Jeff Johnson295189b2012-06-20 16:38:30 -07001643 if (NULL == wdaContext)
1644 {
1645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001646 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 return ;
1648 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001649
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001651 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001655 vos_mem_free(pWdaParams);
1656
Jeff Johnson295189b2012-06-20 16:38:30 -07001657 if(WDI_STATUS_SUCCESS != status)
1658 {
1659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1660 "WDI stop callback returned failure" );
1661 VOS_ASSERT(0) ;
1662 }
1663 else
1664 {
1665 wdaContext->wdaState = WDA_STOP_STATE;
1666 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001667
Leo Chang9d76f622013-08-23 16:34:52 -07001668 /* FTM Driver stop procedure should be synced.
1669 * Stop and Close will happen on same context */
1670 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1671 {
1672 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1673 {
1674 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1675 "%s: FTM Stop Event Set Fail", __func__);
1676 VOS_ASSERT(0);
1677 }
1678 }
1679
Jeff Johnson295189b2012-06-20 16:38:30 -07001680 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001681 vos_WDAComplete_cback(wdaContext->pVosContext);
1682
Jeff Johnson295189b2012-06-20 16:38:30 -07001683 return ;
1684}
Jeff Johnson295189b2012-06-20 16:38:30 -07001685/*
1686 * FUNCTION: WDA_stop
1687 * call WDI_stop
1688 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001689VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1690{
1691 WDI_Status wdiStatus;
1692 VOS_STATUS status = VOS_STATUS_SUCCESS;
1693 WDI_StopReqParamsType *wdiStopReq;
1694 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001695 tWDA_ReqParams *pWdaParams ;
1696
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 if (NULL == pWDA)
1698 {
1699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001700 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 VOS_ASSERT(0);
1702 return VOS_STATUS_E_FAILURE;
1703 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001704 if (pWDA->wdiFailed == true)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001707 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001708 return VOS_STATUS_E_ALREADY;
1709 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001710
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 /* FTM mode stay START_STATE */
1712 if( (WDA_READY_STATE != pWDA->wdaState) &&
1713 (WDA_INIT_STATE != pWDA->wdaState) &&
1714 (WDA_START_STATE != pWDA->wdaState) )
1715 {
1716 VOS_ASSERT(0);
1717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001718 wdiStopReq = (WDI_StopReqParamsType *)
1719 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1720 if(NULL == wdiStopReq)
1721 {
1722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001724 VOS_ASSERT(0);
1725 return VOS_STATUS_E_NOMEM;
1726 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001727
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 wdiStopReq->wdiStopReason = reason;
1729 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001730
1731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1732 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001733 {
1734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001736 VOS_ASSERT(0);
1737 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001738 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001739 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001740
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001741 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1742 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 {
1744 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001745 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001747
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001748 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1749 pWdaParams->wdaMsgParam = NULL;
1750 pWdaParams->pWdaContext = pWDA;
1751
Jeff Johnson295189b2012-06-20 16:38:30 -07001752 /* call WDI stop */
1753 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001754 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1755
Jeff Johnson295189b2012-06-20 16:38:30 -07001756 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1761 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 status = VOS_STATUS_E_FAILURE;
1763 }
Leo Chang9d76f622013-08-23 16:34:52 -07001764
1765 /* FTM Driver stop procedure should be synced.
1766 * Stop and Close will happen on same context */
1767 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1768 {
1769 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1770 WDI_RESPONSE_TIMEOUT);
1771 if (status != VOS_STATUS_SUCCESS)
1772 {
1773 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1774 "%s: FTM Stop Timepoout", __func__);
1775 VOS_ASSERT(0);
1776 vos_event_reset(&pWDA->ftmStopDoneEvent);
1777 }
1778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001779 return status;
1780}
Jeff Johnson295189b2012-06-20 16:38:30 -07001781/*
1782 * FUNCTION: WDA_close
1783 * call WDI_close and free the WDA context
1784 */
1785VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1786{
Jeff Johnson43971f52012-07-17 12:26:56 -07001787 VOS_STATUS status = VOS_STATUS_SUCCESS;
1788 WDI_Status wstatus;
1789 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001790 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 if (NULL == wdaContext)
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 return VOS_STATUS_E_FAILURE;
1796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1798 (WDA_STOP_STATE != wdaContext->wdaState))
1799 {
1800 VOS_ASSERT(0);
1801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001802 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001803 wstatus = WDI_Close();
1804 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001805 {
1806 status = VOS_STATUS_E_FAILURE;
1807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001808 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001810 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1811 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 {
1813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1814 "WDI Sync Event destroy failed - status = %d\n", status);
1815 status = VOS_STATUS_E_FAILURE;
1816 }
1817
Jeff Johnson43971f52012-07-17 12:26:56 -07001818 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001819 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "VOS Event destroy failed - status = %d\n", status);
1823 status = VOS_STATUS_E_FAILURE;
1824 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001825 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001826 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 {
1828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1829 "VOS Event destroy failed - status = %d\n", status);
1830 status = VOS_STATUS_E_FAILURE;
1831 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001832 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001833 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001834 {
1835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1836 "VOS Event destroy failed - status = %d\n", status);
1837 status = VOS_STATUS_E_FAILURE;
1838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001839 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001840 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001841 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "error in WDA close " );
1845 status = VOS_STATUS_E_FAILURE;
1846 }
1847 return status;
1848}
Jeff Johnson295189b2012-06-20 16:38:30 -07001849/*
1850 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1851 * returns 1 if the compiled version is greater than or equal to the input version
1852 */
1853
1854uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1855{
1856 VOS_STATUS status = VOS_STATUS_SUCCESS;
1857 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1858 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001859 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001860 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1861 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1862 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1863 (compiledVersion.revision >= revision)))
1864 return 1;
1865 else
1866 return 0;
1867}
Jeff Johnson295189b2012-06-20 16:38:30 -07001868/*
1869 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1870 * returns 1 if the compiled version is greater than or equal to the input version
1871 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001872uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1873{
1874 VOS_STATUS status = VOS_STATUS_SUCCESS;
1875 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1876 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1879 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1880 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1881 (reportedVersion.revision >= revision)))
1882 return 1;
1883 else
1884 return 0;
1885}
Jeff Johnson295189b2012-06-20 16:38:30 -07001886/*
1887 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1888 * Returns the version of the WCNSS WLAN API with which the HOST
1889 * device driver was compiled
1890 */
1891VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1892 tSirVersionType *pVersion)
1893{
1894 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001896 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 if ((NULL == pvosGCtx) || (NULL == pVersion))
1898 {
1899 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001900 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 VOS_ASSERT(0);
1902 return VOS_STATUS_E_FAILURE;
1903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1905 if (NULL == pWDA )
1906 {
1907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001908 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001909 VOS_ASSERT(0);
1910 return VOS_STATUS_E_FAILURE;
1911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 *pVersion = pWDA->wcnssWlanCompiledVersion;
1913 return VOS_STATUS_SUCCESS;
1914}
Jeff Johnson295189b2012-06-20 16:38:30 -07001915/*
1916 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1917 * Returns the version of the WCNSS WLAN API with which the WCNSS
1918 * device driver was compiled
1919 */
1920VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1921 tSirVersionType *pVersion)
1922{
1923 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001925 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001926 if ((NULL == pvosGCtx) || (NULL == pVersion))
1927 {
1928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001929 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001930 VOS_ASSERT(0);
1931 return VOS_STATUS_E_FAILURE;
1932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001933 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1934 if (NULL == pWDA )
1935 {
1936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001937 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 VOS_ASSERT(0);
1939 return VOS_STATUS_E_FAILURE;
1940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 *pVersion = pWDA->wcnssWlanReportedVersion;
1942 return VOS_STATUS_SUCCESS;
1943}
Jeff Johnson295189b2012-06-20 16:38:30 -07001944/*
1945 * FUNCTION: WDA_GetWcnssSoftwareVersion
1946 * Returns the WCNSS Software version string
1947 */
1948VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1949 tANI_U8 *pVersion,
1950 tANI_U32 versionBufferSize)
1951{
1952 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001954 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 if ((NULL == pvosGCtx) || (NULL == pVersion))
1956 {
1957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001958 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 VOS_ASSERT(0);
1960 return VOS_STATUS_E_FAILURE;
1961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001962 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1963 if (NULL == pWDA )
1964 {
1965 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001966 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 VOS_ASSERT(0);
1968 return VOS_STATUS_E_FAILURE;
1969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1971 return VOS_STATUS_SUCCESS;
1972}
Jeff Johnson295189b2012-06-20 16:38:30 -07001973/*
1974 * FUNCTION: WDA_GetWcnssHardwareVersion
1975 * Returns the WCNSS Hardware version string
1976 */
1977VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1978 tANI_U8 *pVersion,
1979 tANI_U32 versionBufferSize)
1980{
1981 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001983 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 if ((NULL == pvosGCtx) || (NULL == pVersion))
1985 {
1986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001987 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 VOS_ASSERT(0);
1989 return VOS_STATUS_E_FAILURE;
1990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001991 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1992 if (NULL == pWDA )
1993 {
1994 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001995 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 VOS_ASSERT(0);
1997 return VOS_STATUS_E_FAILURE;
1998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2000 return VOS_STATUS_SUCCESS;
2001}
Jeff Johnson295189b2012-06-20 16:38:30 -07002002/*
2003 * FUNCTION: WDA_WniCfgDnld
2004 * Trigger CFG Download
2005 */
2006VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2007{
2008 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 v_VOID_t *pFileImage = NULL;
2011 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 v_VOID_t *pCfgBinary = NULL;
2013 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002014 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002015
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 if (NULL == pMac )
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002019 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 VOS_ASSERT(0);
2021 return VOS_STATUS_E_FAILURE;
2022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 /* get the number of bytes in the CFG Binary... */
2024 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2025 &cbFileImageSize );
2026 if ( VOS_STATUS_E_NOMEM != vosStatus )
2027 {
2028 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2029 "Error obtaining binary size" );
2030 goto fail;
2031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 // malloc a buffer to read in the Configuration binary file.
2033 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 if ( NULL == pFileImage )
2035 {
2036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2037 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2038 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 vosStatus = VOS_STATUS_E_NOMEM;
2040 goto fail;
2041 }
2042
2043 /* Get the entire CFG file image... */
2044 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2045 &cbFileImageSize );
2046 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2050 cbFileImageSize );
2051 goto fail;
2052 }
2053
2054 /*
2055 * Validate the binary image. This function will return a pointer
2056 * and length where the CFG binary is located within the binary image file.
2057 */
2058 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2059 &pCfgBinary, &cbCfgBinarySize );
2060 if ( VOS_FALSE == bStatus )
2061 {
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2063 "Error: Cannot find STA CFG in binary image file" );
2064 vosStatus = VOS_STATUS_E_FAILURE;
2065 goto fail;
2066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 /*
2068 * TODO: call the config download function
2069 * for now calling the existing cfg download API
2070 */
2071 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002072 vosStatus = VOS_STATUS_SUCCESS;
2073
2074 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002075
2076fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002077 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 return vosStatus;
2079}
Jeff Johnson295189b2012-06-20 16:38:30 -07002080/* -----------------------------------------------------------------
2081 * WDI interface
2082 * -----------------------------------------------------------------
2083 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002084/*
2085 * FUNCTION: WDA_suspendDataTxCallback
2086 * call back function called from TL after suspend Transmission
2087 */
2088VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2089 v_U8_t* ucSTAId,
2090 VOS_STATUS vosStatus)
2091{
2092 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002094 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 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: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 VOS_ASSERT(0);
2100 return VOS_STATUS_E_FAILURE;
2101 }
2102 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2103 {
2104 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2105 }
2106 else
2107 {
2108 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 /* Trigger the event to bring the WDA TL suspend function to come
2111 * out of wait*/
2112 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2113 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2114 {
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2116 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 /* If TL suspended had timedout before this callback was called, resume back
2119 * TL.*/
2120 if (pWDA->txSuspendTimedOut)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2123 "Late TLSuspendCallback, resuming TL back again\n");
2124 WDA_ResumeDataTx(pWDA);
2125 pWDA->txSuspendTimedOut = FALSE;
2126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002127 return VOS_STATUS_SUCCESS;
2128}
Jeff Johnson295189b2012-06-20 16:38:30 -07002129/*
2130 * FUNCTION: WDA_suspendDataTx
2131 * Update TL to suspend the data Transmission
2132 */
2133VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2134{
2135 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2136 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002137
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002139 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 if (pWDA->txSuspendTimedOut)
2142 {
2143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2144 "TL suspend timedout previously, CB not called yet\n");
2145 return status;
2146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002147 /* Reset the event to be not signalled */
2148 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2149 if(!VOS_IS_STATUS_SUCCESS(status))
2150 {
2151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2152 "VOS Event reset failed - status = %d\n",status);
2153 return VOS_STATUS_E_FAILURE;
2154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002156 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 WDA_SuspendDataTxCallback);
2158 if(status != VOS_STATUS_SUCCESS)
2159 {
2160 return status;
2161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 /* Wait for the event to be set by the TL, to get the response of
2163 * suspending the TX queues, this event should be set by the Callback
2164 * function called by TL*/
2165 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2166 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2167 if(!VOS_IS_STATUS_SUCCESS(status))
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002171 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 /* Set this flag to true when TL suspend times out, so that when TL
2173 * suspend eventually happens and calls the callback, TL can be resumed
2174 * right away by looking at this flag when true.*/
2175 pWDA->txSuspendTimedOut = TRUE;
2176 }
2177 else
2178 {
2179 pWDA->txSuspendTimedOut = FALSE;
2180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2182 {
2183 status = VOS_STATUS_SUCCESS;
2184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 return status;
2186}
Jeff Johnson295189b2012-06-20 16:38:30 -07002187/*
2188 * FUNCTION: WDA_resumeDataTx
2189 * Update TL to resume the data Transmission
2190 */
2191VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2192{
2193 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002194
2195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002196 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002197
2198 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 return status;
2200}
Jeff Johnson295189b2012-06-20 16:38:30 -07002201/*
2202 * FUNCTION: WDA_InitScanReqCallback
2203 * Trigger Init SCAN callback
2204 */
2205void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2206{
2207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2208 tWDA_CbContext *pWDA;
2209 tInitScanParams *pWDA_ScanParam ;
2210 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 if(NULL == pWdaParams)
2214 {
2215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002217 VOS_ASSERT(0) ;
2218 return ;
2219 }
2220 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2221 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 if(NULL == pWDA_ScanParam)
2223 {
2224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002225 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002226 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2228 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 return ;
2230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 if(WDI_STATUS_SUCCESS != wdiStatus)
2232 {
2233 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 if(VOS_STATUS_SUCCESS != status)
2235 {
2236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002237 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 }
2239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 /* free WDI command buffer */
2241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002243
Jeff Johnson295189b2012-06-20 16:38:30 -07002244
2245 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002246 /* without converting the Status to Failure or Success Just
2247 pass the same status to lim */
2248 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 /* send SCAN RSP message back to PE */
2250 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 return ;
2252}
2253
2254/*
2255 * FUNCTION: WDA_ProcessInitScanReq
2256 * Trigger Init SCAN in DAL
2257 */
2258VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2259 tInitScanParams *initScanParams)
2260{
2261 WDI_Status status = WDI_STATUS_SUCCESS ;
2262 WDI_InitScanReqParamsType *wdiInitScanParam =
2263 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2264 sizeof(WDI_InitScanReqParamsType)) ;
2265 tWDA_ReqParams *pWdaParams;
2266 tANI_U8 i = 0;
2267
2268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 if(NULL == wdiInitScanParam)
2271 {
2272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002273 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 VOS_ASSERT(0);
2275 return VOS_STATUS_E_NOMEM;
2276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2278 if(NULL == pWdaParams)
2279 {
2280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 VOS_ASSERT(0);
2283 vos_mem_free(wdiInitScanParam);
2284 return VOS_STATUS_E_NOMEM;
2285 }
2286
2287 /* Copy init Scan params to WDI structure */
2288 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2289 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2290 sizeof(tSirMacAddr)) ;
2291 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2292 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2293 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2295 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2297 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2299 {
2300 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2301 initScanParams->scanEntry.bssIdx[i] ;
2302 }
2303
2304 /* if Frame length, copy macMgmtHdr or WDI structure */
2305 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2306 {
2307 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2308 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2309 }
2310 wdiInitScanParam->wdiReqStatusCB = NULL ;
2311
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 /* Store Init Req pointer, as this will be used for response */
2313 pWdaParams->pWdaContext = pWDA;
2314 pWdaParams->wdaMsgParam = initScanParams;
2315 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 /* first try to suspend TX */
2317 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002318 if(WDI_STATUS_SUCCESS != status)
2319 {
2320 goto handleWdiFailure;
2321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 /* call DAL API to pass init scan request to DAL */
2323 status = WDI_InitScanReq(wdiInitScanParam,
2324 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if(IS_WDI_STATUS_FAILURE(status))
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2328 "error in WDA Init Scan, Resume Tx " );
2329 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 VOS_ASSERT(0) ;
2331
2332 goto handleWdiFailure;
2333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002335handleWdiFailure:
2336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2337 "Failure in WDI Api, free all the memory " );
2338 /* free WDI command buffer */
2339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2340 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 /* send Failure to PE */
2342 initScanParams->status = eSIR_FAILURE ;
2343 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 return CONVERT_WDI2VOS_STATUS(status) ;
2345}
2346
Jeff Johnson295189b2012-06-20 16:38:30 -07002347/*
2348 * FUNCTION: WDA_StartScanReqCallback
2349 * send Start SCAN RSP back to PE
2350 */
2351void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2352 void* pUserData)
2353{
2354 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2355 tWDA_CbContext *pWDA;
2356 tStartScanParams *pWDA_ScanParam;
2357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 if(NULL == pWdaParams)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 VOS_ASSERT(0) ;
2364 return ;
2365 }
2366 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2367 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 if(NULL == pWDA_ScanParam)
2369 {
2370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002371 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002373 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 return ;
2375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002379 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 return ;
2383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2385 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002386
Jeff Johnson295189b2012-06-20 16:38:30 -07002387
2388 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002389 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 /* send SCAN RSP message back to PE */
2391 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 return ;
2393}
2394
Jeff Johnson295189b2012-06-20 16:38:30 -07002395/*
2396 * FUNCTION: WDA_ProcessStartScanReq
2397 * Trigger start SCAN in WDI
2398 */
2399VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2400 tStartScanParams *startScanParams)
2401{
2402 WDI_Status status = WDI_STATUS_SUCCESS;
2403 WDI_StartScanReqParamsType *wdiStartScanParams =
2404 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2405 sizeof(WDI_StartScanReqParamsType)) ;
2406 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 if(NULL == wdiStartScanParams)
2410 {
2411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002413 VOS_ASSERT(0);
2414 return VOS_STATUS_E_NOMEM;
2415 }
2416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2417 if(NULL == pWdaParams)
2418 {
2419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_ASSERT(0);
2422 vos_mem_free(wdiStartScanParams);
2423 return VOS_STATUS_E_NOMEM;
2424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 /* Copy init Scan params to WDI structure */
2426 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2427 wdiStartScanParams->wdiReqStatusCB = NULL ;
2428
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 /* Store Init Req pointer, as this will be used for response */
2430 /* store Params pass it to WDI */
2431 pWdaParams->pWdaContext = pWDA;
2432 pWdaParams->wdaMsgParam = startScanParams;
2433 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 /* call DAL API to pass init scan request to DAL */
2435 status = WDI_StartScanReq(wdiStartScanParams,
2436 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 /* failure returned by WDI API */
2438 if(IS_WDI_STATUS_FAILURE(status))
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2441 "Failure in Start Scan WDI API, free all the memory "
2442 "It should be due to previous abort scan." );
2443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2444 vos_mem_free(pWdaParams) ;
2445 startScanParams->status = eSIR_FAILURE ;
2446 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 return CONVERT_WDI2VOS_STATUS(status) ;
2449}
Jeff Johnson295189b2012-06-20 16:38:30 -07002450/*
2451 * FUNCTION: WDA_EndScanReqCallback
2452 * END SCAN callback
2453 */
2454void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2455{
2456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2457 tWDA_CbContext *pWDA;
2458 tEndScanParams *endScanParam;
2459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 if(NULL == pWdaParams)
2462 {
2463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 VOS_ASSERT(0) ;
2466 return ;
2467 }
2468 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2469 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 if(NULL == endScanParam)
2471 {
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2476 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 return ;
2478 }
2479
2480 /* Free WDI command buffer */
2481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2482 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002484 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 /* send response back to PE */
2486 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2487 return ;
2488}
2489
Jeff Johnson295189b2012-06-20 16:38:30 -07002490/*
2491 * FUNCTION: WDA_ProcessEndScanReq
2492 * Trigger END SCAN in WDI
2493 */
2494VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2495 tEndScanParams *endScanParams)
2496{
2497 WDI_Status status = WDI_STATUS_SUCCESS;
2498 WDI_EndScanReqParamsType *wdiEndScanParams =
2499 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2500 sizeof(WDI_EndScanReqParamsType)) ;
2501 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 if(NULL == wdiEndScanParams)
2505 {
2506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 VOS_ASSERT(0);
2509 return VOS_STATUS_E_NOMEM;
2510 }
2511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2512 if(NULL == pWdaParams)
2513 {
2514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_ASSERT(0);
2517 vos_mem_free(wdiEndScanParams);
2518 return VOS_STATUS_E_NOMEM;
2519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* Copy init Scan params to WDI structure */
2521 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2522 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 /* Store Init Req pointer, as this will be used for response */
2524 /* store Params pass it to WDI */
2525 pWdaParams->pWdaContext = pWDA;
2526 pWdaParams->wdaMsgParam = endScanParams;
2527 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 /* call DAL API to pass init scan request to DAL */
2529 status = WDI_EndScanReq(wdiEndScanParams,
2530 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002531 if(IS_WDI_STATUS_FAILURE(status))
2532 {
2533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2534 "Failure in End Scan WDI API, free all the memory "
2535 "It should be due to previous abort scan." );
2536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2537 vos_mem_free(pWdaParams) ;
2538 endScanParams->status = eSIR_FAILURE ;
2539 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 return CONVERT_WDI2VOS_STATUS(status) ;
2542}
Jeff Johnson295189b2012-06-20 16:38:30 -07002543/*
2544 * FUNCTION: WDA_FinishScanReqCallback
2545 * Trigger Finish SCAN callback
2546 */
2547void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2548{
2549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2550 tWDA_CbContext *pWDA;
2551 tFinishScanParams *finishScanParam;
2552 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 if(NULL == pWdaParams)
2556 {
2557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 VOS_ASSERT(0) ;
2560 return ;
2561 }
2562
2563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2564 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 if(NULL == finishScanParam)
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002568 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2571 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 Johnson295189b2012-06-20 16:38:30 -07002576 /*
2577 * Now Resume TX, if we reached here means, TX is already suspended, we
2578 * have to resume it unconditionaly
2579 */
2580 status = WDA_ResumeDataTx(pWDA) ;
2581
2582 if(VOS_STATUS_SUCCESS != status)
2583 {
2584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002587 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2589 return ;
2590}
Jeff Johnson295189b2012-06-20 16:38:30 -07002591/*
2592 * FUNCTION: WDA_ProcessFinshScanReq
2593 * Trigger Finish SCAN in WDI
2594 */
2595VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2596 tFinishScanParams *finishScanParams)
2597{
2598 WDI_Status status = WDI_STATUS_SUCCESS;
2599 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2600 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2601 sizeof(WDI_FinishScanReqParamsType)) ;
2602 tWDA_ReqParams *pWdaParams ;
2603 tANI_U8 i = 0;
2604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 if(NULL == wdiFinishScanParams)
2607 {
2608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 VOS_ASSERT(0);
2611 return VOS_STATUS_E_NOMEM;
2612 }
2613 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2614 if(NULL == pWdaParams)
2615 {
2616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 VOS_ASSERT(0);
2619 vos_mem_free(wdiFinishScanParams);
2620 return VOS_STATUS_E_NOMEM;
2621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* Copy init Scan params to WDI structure */
2623 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2624 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2625 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2627 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2628 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2629 finishScanParams->frameLength ;
2630 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2631 finishScanParams->currentOperChannel ;
2632 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2633 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2634 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2636 {
2637 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2638 finishScanParams->scanEntry.bssIdx[i] ;
2639 }
2640
2641
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 /* if Frame length, copy macMgmtHdr ro WDI structure */
2643 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2644 {
2645 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2646 &finishScanParams->macMgmtHdr,
2647 sizeof(WDI_MacMgmtHdr)) ;
2648 }
2649 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 /* Store Init Req pointer, as this will be used for response */
2651 /* store Params pass it to WDI */
2652 pWdaParams->pWdaContext = pWDA;
2653 pWdaParams->wdaMsgParam = finishScanParams;
2654 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 /* call DAL API to pass init scan request to DAL */
2656 status = WDI_FinishScanReq(wdiFinishScanParams,
2657 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002658
Jeff Johnson295189b2012-06-20 16:38:30 -07002659
2660 /*
2661 * WDI API returns failure..
2662 */
2663 if(IS_WDI_STATUS_FAILURE( status))
2664 {
2665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2666 "Failure in Finish Scan WDI API, free all the memory " );
2667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2668 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 finishScanParams->status = eSIR_FAILURE ;
2670 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 return CONVERT_WDI2VOS_STATUS(status) ;
2673}
Jeff Johnson295189b2012-06-20 16:38:30 -07002674/*---------------------------------------------------------------------
2675 * ASSOC API's
2676 *---------------------------------------------------------------------
2677 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002678/*
2679 * FUNCTION: WDA_JoinReqCallback
2680 * Trigger Init SCAN callback
2681 */
2682void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2683{
2684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2685 tWDA_CbContext *pWDA;
2686 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002688 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 if(NULL == pWdaParams)
2690 {
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 VOS_ASSERT(0) ;
2694 return ;
2695 }
2696 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2697 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2699 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 /* reset macBSSID */
2701 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 /* reset macSTASelf */
2703 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002704 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 return ;
2707}
Jeff Johnson295189b2012-06-20 16:38:30 -07002708/*
2709 * FUNCTION: WDA_ProcessJoinReq
2710 * Trigger Join REQ in WDI
2711 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002712VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2713 tSwitchChannelParams* joinReqParam)
2714{
2715 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 WDI_JoinReqParamsType *wdiJoinReqParam =
2717 (WDI_JoinReqParamsType *)vos_mem_malloc(
2718 sizeof(WDI_JoinReqParamsType)) ;
2719 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 if(NULL == wdiJoinReqParam)
2723 {
2724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002726 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002727 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 return VOS_STATUS_E_NOMEM;
2729 }
2730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2731 if(NULL == pWdaParams)
2732 {
2733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 VOS_ASSERT(0);
2736 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002737 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 return VOS_STATUS_E_NOMEM;
2739 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002740
2741 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2742 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2743 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2744 {
2745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2746 "%s: received join request when BSSID or self-STA is NULL "
2747 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002748 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002749 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2750 VOS_ASSERT(0);
2751 vos_mem_free(wdiJoinReqParam);
2752 vos_mem_free(pWdaParams);
2753 joinReqParam->status = eSIR_FAILURE ;
2754 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2755 return VOS_STATUS_E_INVAL;
2756 }
2757
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 /* copy the BSSID for pWDA */
2759 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2760 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2762 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2764 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002765#ifdef WLAN_FEATURE_VOWIFI
2766 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2767 joinReqParam->maxTxPower ;
2768#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2770 joinReqParam->localPowerConstraint ;
2771#endif
2772 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2773 joinReqParam->secondaryChannelOffset ;
2774 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2775
2776 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 /* Store Init Req pointer, as this will be used for response */
2778 /* store Params pass it to WDI */
2779 pWdaParams->pWdaContext = pWDA;
2780 pWdaParams->wdaMsgParam = joinReqParam;
2781 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 status = WDI_JoinReq(wdiJoinReqParam,
2783 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(IS_WDI_STATUS_FAILURE(status))
2785 {
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2787 "Failure in Join WDI API, free all the memory " );
2788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2789 vos_mem_free(pWdaParams) ;
2790 joinReqParam->status = eSIR_FAILURE ;
2791 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 return CONVERT_WDI2VOS_STATUS(status) ;
2794}
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_SwitchChannelReqCallback
2797 * send Switch channel RSP back to PE
2798 */
2799void WDA_SwitchChannelReqCallback(
2800 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2801{
2802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2803 tWDA_CbContext *pWDA;
2804 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 if(NULL == pWdaParams)
2808 {
2809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002810 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 VOS_ASSERT(0) ;
2812 return ;
2813 }
2814 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2815 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2816
2817#ifdef WLAN_FEATURE_VOWIFI
2818 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2819#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2821 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002823 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 return ;
2826}
Jeff Johnson295189b2012-06-20 16:38:30 -07002827/*
2828 * FUNCTION: WDA_ProcessChannelSwitchReq
2829 * Request to WDI to switch channel REQ params.
2830 */
2831VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2832 tSwitchChannelParams *pSwitchChanParams)
2833{
2834 WDI_Status status = WDI_STATUS_SUCCESS ;
2835 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2836 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2837 sizeof(WDI_SwitchChReqParamsType)) ;
2838 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 if(NULL == wdiSwitchChanParam)
2842 {
2843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 VOS_ASSERT(0);
2846 return VOS_STATUS_E_NOMEM;
2847 }
2848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2849 if(NULL == pWdaParams)
2850 {
2851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 VOS_ASSERT(0);
2854 vos_mem_free(wdiSwitchChanParam);
2855 return VOS_STATUS_E_NOMEM;
2856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2858#ifndef WLAN_FEATURE_VOWIFI
2859 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2860 pSwitchChanParams->localPowerConstraint;
2861#endif
2862 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2863 pSwitchChanParams->secondaryChannelOffset;
2864 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 /* Store req pointer, as this will be used for response */
2866 /* store Params pass it to WDI */
2867 pWdaParams->pWdaContext = pWDA;
2868 pWdaParams->wdaMsgParam = pSwitchChanParams;
2869 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870#ifdef WLAN_FEATURE_VOWIFI
2871 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2872 = pSwitchChanParams->maxTxPower;
2873 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2874 pSwitchChanParams ->selfStaMacAddr,
2875 sizeof(tSirMacAddr));
2876#endif
2877 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2878 pSwitchChanParams->bssId,
2879 sizeof(tSirMacAddr));
2880
2881 status = WDI_SwitchChReq(wdiSwitchChanParam,
2882 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 if(IS_WDI_STATUS_FAILURE(status))
2884 {
2885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2886 "Failure in process channel switch Req WDI API, free all the memory " );
2887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2888 vos_mem_free(pWdaParams) ;
2889 pSwitchChanParams->status = eSIR_FAILURE ;
2890 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2891 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 return CONVERT_WDI2VOS_STATUS(status) ;
2893}
Jeff Johnson295189b2012-06-20 16:38:30 -07002894/*
2895 * FUNCTION: WDA_ConfigBssReqCallback
2896 * config BSS Req Callback, called by WDI
2897 */
2898void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2899 ,void* pUserData)
2900{
2901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2902 tWDA_CbContext *pWDA;
2903 tAddBssParams *configBssReqParam;
2904 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if(NULL == pWdaParams)
2908 {
2909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002910 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 VOS_ASSERT(0) ;
2912 return ;
2913 }
2914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2915 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2916 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002918 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2920 {
2921 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2922 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2924 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2925 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2926
2927 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2928 {
2929 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2930 {
2931 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2932 staConfigBssParam->staType = STA_ENTRY_BSSID;
2933 }
2934 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2935 (staConfigBssParam->staType == STA_ENTRY_SELF))
2936 {
2937 /* This is the 1st add BSS Req for the BTAMP STA */
2938 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2939 staConfigBssParam->staType = STA_ENTRY_BSSID;
2940 }
2941 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2942 (staConfigBssParam->staType == STA_ENTRY_PEER))
2943 {
2944 /* This is the 2nd ADD BSS Request that is sent
2945 * on the BTAMP STA side. The Sta type is
2946 * set to STA_ENTRY_PEER here.*/
2947 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2948 }
2949 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2950 (staConfigBssParam->staType == STA_ENTRY_SELF))
2951 {
2952 /* statype is already set by PE.
2953 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2954 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2955 staConfigBssParam->staType = STA_ENTRY_BSSID;
2956 }
2957 else
2958 {
2959 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2960 staConfigBssParam->staType = STA_ENTRY_PEER;
2961 }
2962 }
2963 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2964 {
2965 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2966 staConfigBssParam->staType = STA_ENTRY_SELF;
2967 }
2968 else
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2971 "Invalid operation mode specified");
2972 VOS_ASSERT(0);
2973 }
2974
2975 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2980 sizeof(tSirMacAddr));
2981 staConfigBssParam->txChannelWidthSet =
2982 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2984 staConfigBssParam->htCapable)
2985 {
2986 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2987 wdiConfigBssRsp->ucBSSIdx;
2988 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2989 WDA_VALID_STA_INDEX ;
2990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2992 wdiConfigBssRsp->ucBSSIdx,
2993 wdiConfigBssRsp->ucSTAIdx))
2994 {
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_ASSERT(0) ;
2998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 VOS_ASSERT(0) ;
3004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003005#ifdef WLAN_FEATURE_VOWIFI
3006 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3007#endif
3008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3010 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_UpdateEdcaParamsForAC
3016 * Update WDI EDCA params with PE edca params
3017 */
3018void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3019 WDI_EdcaParamRecord *wdiEdcaParam,
3020 tSirMacEdcaParamRecord *macEdcaParam)
3021{
3022 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3023 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3024 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3025 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3026 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3027 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3028}
Jeff Johnson295189b2012-06-20 16:38:30 -07003029/*
3030 * FUNCTION: WDA_ProcessConfigBssReq
3031 * Configure BSS before starting Assoc with AP
3032 */
3033VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3034 tAddBssParams* configBssReqParam)
3035{
3036 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303037 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003040 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303041 if (NULL == configBssReqParam)
3042 {
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3044 "%s: configBssReqParam is NULL", __func__);
3045 return VOS_STATUS_E_INVAL;
3046 }
3047
3048 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3049 sizeof(WDI_ConfigBSSReqParamsType)) ;
3050
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 if(NULL == wdiConfigBssReqParam)
3052 {
3053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 VOS_ASSERT(0);
3056 return VOS_STATUS_E_NOMEM;
3057 }
3058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3059 if(NULL == pWdaParams)
3060 {
3061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 VOS_ASSERT(0);
3064 vos_mem_free(wdiConfigBssReqParam);
3065 return VOS_STATUS_E_NOMEM;
3066 }
Kiran4a17ebe2013-01-31 10:43:43 -08003067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3068 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3071 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 /* Store Init Req pointer, as this will be used for response */
3073 /* store Params pass it to WDI */
3074 pWdaParams->pWdaContext = pWDA;
3075 pWdaParams->wdaMsgParam = configBssReqParam;
3076 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3078 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 if(IS_WDI_STATUS_FAILURE(status))
3080 {
3081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3082 "Failure in Config BSS WDI API, free all the memory " );
3083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3084 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 return CONVERT_WDI2VOS_STATUS(status) ;
3089}
Jeff Johnson295189b2012-06-20 16:38:30 -07003090#ifdef ENABLE_HAL_COMBINED_MESSAGES
3091/*
3092 * FUNCTION: WDA_PostAssocReqCallback
3093 * Post ASSOC req callback, send RSP back to PE
3094 */
3095void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3096 void* pUserData)
3097{
3098 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3099 tPostAssocParams *postAssocReqParam =
3100 (tPostAssocParams *)pWDA->wdaMsgParam ;
3101 /*STA context within the BSS Params*/
3102 tAddStaParams *staPostAssocParam =
3103 &postAssocReqParam->addBssParams.staContext ;
3104 /*STA Params for self STA*/
3105 tAddStaParams *selfStaPostAssocParam =
3106 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003110 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3112 {
3113 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3114 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3115 sizeof(tSirMacAddr)) ;
3116 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3117 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3118 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3120 }
3121 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3122 pWDA->wdaWdiApiMsgParam = NULL;
3123 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 return ;
3126}
Jeff Johnson295189b2012-06-20 16:38:30 -07003127/*
3128 * FUNCTION: WDA_ProcessPostAssocReq
3129 * Trigger POST ASSOC processing in WDI
3130 */
3131VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3132 tPostAssocParams *postAssocReqParam)
3133{
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 WDI_Status status = WDI_STATUS_SUCCESS ;
3135
3136 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3137 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3138 sizeof(WDI_PostAssocReqParamsType)) ;
3139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003140 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003141
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 if(NULL == wdiPostAssocReqParam)
3143 {
3144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 VOS_ASSERT(0);
3147 return VOS_STATUS_E_NOMEM;
3148 }
3149
3150 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3151 {
3152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003153 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_ASSERT(0);
3155 return VOS_STATUS_E_FAILURE;
3156 }
3157
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 /* update BSS params into WDI structure */
3159 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3160 &postAssocReqParam->addBssParams) ;
3161 /* update STA params into WDI structure */
3162 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3163 &postAssocReqParam->addStaParams) ;
3164
3165 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3166 postAssocReqParam->addBssParams.highPerformance;
3167 WDA_UpdateEdcaParamsForAC(pWDA,
3168 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3169 &postAssocReqParam->addBssParams.acbe);
3170 WDA_UpdateEdcaParamsForAC(pWDA,
3171 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3172 &postAssocReqParam->addBssParams.acbk);
3173 WDA_UpdateEdcaParamsForAC(pWDA,
3174 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3175 &postAssocReqParam->addBssParams.acvi);
3176 WDA_UpdateEdcaParamsForAC(pWDA,
3177 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3178 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 /* Store Init Req pointer, as this will be used for response */
3180 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 /* store Params pass it to WDI */
3182 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3184 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 if(IS_WDI_STATUS_FAILURE(status))
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3188 "Failure in Post Assoc WDI API, free all the memory " );
3189 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3190 pWDA->wdaWdiApiMsgParam = NULL;
3191 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return CONVERT_WDI2VOS_STATUS(status) ;
3196}
3197#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003198/*
3199 * FUNCTION: WDA_AddStaReqCallback
3200 * ADD STA req callback, send RSP back to PE
3201 */
3202void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3203 void* pUserData)
3204{
3205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3206 tWDA_CbContext *pWDA;
3207 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 if(NULL == pWdaParams)
3211 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 VOS_ASSERT(0) ;
3214 return ;
3215 }
3216 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3217 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003219 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3221 {
3222 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3223 /*TODO: UMAC structure doesn't have these fields*/
3224 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3225 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3226 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3227 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3228 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3229 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003230#ifdef FEATURE_WLAN_TDLS
3231 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3232 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3233#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003235#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 {
3237 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3238 wdiConfigStaRsp->ucBssIdx;
3239 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3240 WDA_VALID_STA_INDEX ;
3241 }
3242 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0) ;
3247 return ;
3248 }
3249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3251 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 return ;
3254}
Jeff Johnson295189b2012-06-20 16:38:30 -07003255/*
3256 * FUNCTION: WDA_ConfigStaReq
3257 * Trigger Config STA processing in WDI
3258 */
3259VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3260 tAddStaParams *addStaReqParam)
3261{
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3264 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3265 sizeof(WDI_ConfigSTAReqParamsType)) ;
3266 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(NULL == wdiConfigStaReqParam)
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 VOS_ASSERT(0);
3274 return VOS_STATUS_E_NOMEM;
3275 }
3276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3277 if(NULL == pWdaParams)
3278 {
3279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 VOS_ASSERT(0);
3282 vos_mem_free(wdiConfigStaReqParam);
3283 return VOS_STATUS_E_NOMEM;
3284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 /* update STA params into WDI structure */
3287 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3288 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 /* Store Init Req pointer, as this will be used for response */
3290 /* store Params pass it to WDI */
3291 pWdaParams->pWdaContext = pWDA;
3292 pWdaParams->wdaMsgParam = addStaReqParam;
3293 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3295 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 if(IS_WDI_STATUS_FAILURE(status))
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3299 "Failure in Config STA WDI API, free all the memory " );
3300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3301 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 return CONVERT_WDI2VOS_STATUS(status) ;
3306}
Jeff Johnson295189b2012-06-20 16:38:30 -07003307/*
3308 * FUNCTION: WDA_DelBSSReqCallback
3309 * Dens DEL BSS RSP back to PE
3310 */
3311void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3312 void* pUserData)
3313{
3314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3315 tWDA_CbContext *pWDA;
3316 tDeleteBssParams *delBssReqParam;
3317 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 if(NULL == pWdaParams)
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 VOS_ASSERT(0) ;
3325 return ;
3326 }
3327 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3328 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003329 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3331 {
3332 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3333 sizeof(tSirMacAddr)) ;
3334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3336 {
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 VOS_ASSERT(0) ;
3340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3342 {
3343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003344 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 VOS_ASSERT(0) ;
3346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0) ;
3352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3354 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 /* reset the the system role*/
3356 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3357
3358 /* Reset the BA related information */
3359 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3360 {
3361 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3362 {
3363 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3364 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3365 /* Reset framesTxed counters here */
3366 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3367 {
3368 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3369 }
3370 }
3371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 return ;
3374}
3375
Jeff Johnson295189b2012-06-20 16:38:30 -07003376/*
3377 * FUNCTION: WDA_ProcessDelBssReq
3378 * Init DEL BSS req with WDI
3379 */
3380VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3381 tDeleteBssParams *delBssParam)
3382{
3383 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3385 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3386 sizeof(WDI_DelBSSReqParamsType)) ;
3387 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 if(NULL == wdiDelBssReqParam)
3391 {
3392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 VOS_ASSERT(0);
3395 return VOS_STATUS_E_NOMEM;
3396 }
3397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3398 if(NULL == pWdaParams)
3399 {
3400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_ASSERT(0);
3403 vos_mem_free(wdiDelBssReqParam);
3404 return VOS_STATUS_E_NOMEM;
3405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3407 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3408
3409 /* Store Init Req pointer, as this will be used for response */
3410 /* store Params pass it to WDI */
3411 pWdaParams->pWdaContext = pWDA;
3412 pWdaParams->wdaMsgParam = delBssParam;
3413 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 status = WDI_DelBSSReq(wdiDelBssReqParam,
3415 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 if(IS_WDI_STATUS_FAILURE(status))
3417 {
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3419 "Failure in Del BSS WDI API, free all the memory " );
3420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3421 vos_mem_free(pWdaParams) ;
3422 delBssParam->status = eSIR_FAILURE ;
3423 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 return CONVERT_WDI2VOS_STATUS(status) ;
3426}
Jeff Johnson295189b2012-06-20 16:38:30 -07003427/*
3428 * FUNCTION: WDA_DelSTAReqCallback
3429 * Dens DEL STA RSP back to PE
3430 */
3431void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3432 void* pUserData)
3433{
3434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3435 tWDA_CbContext *pWDA;
3436 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003438 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 if(NULL == pWdaParams)
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003442 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 VOS_ASSERT(0) ;
3444 return ;
3445 }
3446 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3447 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003448 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3450 {
3451 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3452 {
3453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003454 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 VOS_ASSERT(0) ;
3456 }
3457 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3458 }
3459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3460 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 /*Reset the BA information corresponding to this STAIdx */
3462 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3463 WDA_INVALID_STA_INDEX;
3464 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3465
3466 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 return ;
3468}
Jeff Johnson295189b2012-06-20 16:38:30 -07003469/*
3470 * FUNCTION: WDA_ProcessDelStaReq
3471 * Init DEL STA req with WDI
3472 */
3473VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3474 tDeleteStaParams *delStaParam)
3475{
3476 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3478 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3479 sizeof(WDI_DelSTAReqParamsType)) ;
3480 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 if(NULL == wdiDelStaReqParam)
3484 {
3485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_ASSERT(0);
3488 return VOS_STATUS_E_NOMEM;
3489 }
3490 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3491 if(NULL == pWdaParams)
3492 {
3493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003494 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 VOS_ASSERT(0);
3496 vos_mem_free(wdiDelStaReqParam);
3497 return VOS_STATUS_E_NOMEM;
3498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3500 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 /* Store Init Req pointer, as this will be used for response */
3502 /* store Params pass it to WDI */
3503 pWdaParams->pWdaContext = pWDA;
3504 pWdaParams->wdaMsgParam = delStaParam;
3505 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 status = WDI_DelSTAReq(wdiDelStaReqParam,
3507 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 if(IS_WDI_STATUS_FAILURE(status))
3509 {
3510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3511 "Failure in Del STA WDI API, free all the memory status = %d",
3512 status );
3513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3514 vos_mem_free(pWdaParams) ;
3515 delStaParam->status = eSIR_FAILURE ;
3516 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 return CONVERT_WDI2VOS_STATUS(status) ;
3519}
Jeff Johnson295189b2012-06-20 16:38:30 -07003520void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3521{
3522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3523 tWDA_CbContext *pWDA;
3524 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003526 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 if(NULL == pWdaParams)
3528 {
3529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 VOS_ASSERT(0) ;
3532 return ;
3533 }
3534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3535 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3537 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3539 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3540 pwdiAddSTASelfRsp->macSelfSta,
3541 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 return ;
3544}
Jeff Johnson295189b2012-06-20 16:38:30 -07003545/*
3546 * FUNCTION: WDA_ProcessAddStaSelfReq
3547 *
3548 */
3549VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3550{
3551 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003552 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3554 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3555 sizeof(WDI_AddSTASelfReqParamsType)) ;
3556 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 if( NULL == wdiAddStaSelfReq )
3560 {
3561 VOS_ASSERT( 0 );
3562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003563 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 return( VOS_STATUS_E_NOMEM );
3565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 if( NULL == pWdaParams )
3568 {
3569 VOS_ASSERT( 0 );
3570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003571 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 vos_mem_free(wdiAddStaSelfReq) ;
3573 return( VOS_STATUS_E_NOMEM );
3574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003577 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 /* Store Init Req pointer, as this will be used for response */
3579 /* store Params pass it to WDI */
3580 pWdaParams->pWdaContext = pWDA;
3581 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3582 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003583 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584
Jeff Johnson43971f52012-07-17 12:26:56 -07003585 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 {
3587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3588 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003589 wstatus );
3590 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3592 vos_mem_free(pWdaParams) ;
3593 pAddStaSelfReq->status = eSIR_FAILURE ;
3594 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3595 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597}
Jeff Johnson295189b2012-06-20 16:38:30 -07003598/*
3599 * FUNCTION: WDA_DelSTASelfRespCallback
3600 *
3601 */
3602void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3603 wdiDelStaSelfRspParams , void* pUserData)
3604{
3605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3606 tWDA_CbContext *pWDA;
3607 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003609 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 if (NULL == pWdaParams)
3611 {
3612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003613 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 VOS_ASSERT(0);
3615 return;
3616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3618 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003620 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621
3622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3623 vos_mem_free(pWdaParams) ;
3624
3625 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 return ;
3627}
Jeff Johnson295189b2012-06-20 16:38:30 -07003628/*
3629 * FUNCTION: WDA_DelSTASelfReqCallback
3630 *
3631 */
3632void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3633 void* pUserData)
3634{
3635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3636 tWDA_CbContext *pWDA;
3637 tDelStaSelfParams *delStaSelfParams;
3638
3639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303640 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003641 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003642
3643 if (NULL == pWdaParams)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003646 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 VOS_ASSERT(0);
3648 return;
3649 }
3650
3651 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3652 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3653
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003654 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655
3656 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3657 {
3658 VOS_ASSERT(0);
3659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3660 vos_mem_free(pWdaParams) ;
3661 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3662 }
3663
3664 return ;
3665}
3666
3667/*
3668 * FUNCTION: WDA_DelSTASelfReq
3669 * Trigger Config STA processing in WDI
3670 */
3671VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3672 tDelStaSelfParams* pDelStaSelfReqParam)
3673{
3674 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003675 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 tWDA_ReqParams *pWdaParams = NULL;
3677 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3678 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3679 sizeof(WDI_DelSTASelfReqParamsType)) ;
3680
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003682 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 if( NULL == wdiDelStaSelfReq )
3684 {
3685 VOS_ASSERT( 0 );
3686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003687 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 return( VOS_STATUS_E_NOMEM );
3689 }
3690
3691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3692 if( NULL == pWdaParams )
3693 {
3694 VOS_ASSERT( 0 );
3695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 vos_mem_free(wdiDelStaSelfReq) ;
3698 return( VOS_STATUS_E_NOMEM );
3699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 pWdaParams->pWdaContext = pWDA;
3701 /* Store param pointer as passed in by caller */
3702 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3703 /* store Params pass it to WDI */
3704 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3706 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3707
3708 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3709 wdiDelStaSelfReq->pUserData = pWdaParams;
3710
Jeff Johnson43971f52012-07-17 12:26:56 -07003711 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3713
Jeff Johnson43971f52012-07-17 12:26:56 -07003714 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003715 {
3716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3717 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3718 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003719 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3721 vos_mem_free(pWdaParams) ;
3722 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3723 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3724 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003725 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726}
3727
Jeff Johnson295189b2012-06-20 16:38:30 -07003728/*
3729 * FUNCTION: WDA_SendMsg
3730 * Send Message back to PE
3731 */
3732void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3733 void *pBodyptr, tANI_U32 bodyVal)
3734{
3735 tSirMsgQ msg = {0} ;
3736 tANI_U32 status = VOS_STATUS_SUCCESS ;
3737 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 msg.type = msgType;
3739 msg.bodyval = bodyVal;
3740 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 if (VOS_STATUS_SUCCESS != status)
3743 {
3744 if(NULL != pBodyptr)
3745 {
3746 vos_mem_free(pBodyptr);
3747 }
3748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003749 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 VOS_ASSERT(0) ;
3751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 return ;
3753}
Jeff Johnson295189b2012-06-20 16:38:30 -07003754/*
3755 * FUNCTION: WDA_UpdateBSSParams
3756 * Translated WDA/PE BSS info into WDI BSS info..
3757 */
3758void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3759 WDI_ConfigBSSReqInfoType *wdiBssParams,
3760 tAddBssParams *wdaBssParams)
3761{
3762 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 /* copy bssReq Params to WDI structure */
3764 vos_mem_copy(wdiBssParams->macBSSID,
3765 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3766 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3767 sizeof(tSirMacAddr)) ;
3768 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3769 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3770 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 wdiBssParams->ucShortSlotTimeSupported =
3772 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3774 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3775 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3776 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3777 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3778
3779 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3780 wdiBssParams->ucTXOPProtectionFullSupport =
3781 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3783 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3786 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3787 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3788 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3789
Chet Lanctot186b5732013-03-18 10:26:30 -07003790 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3791
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 /* copy SSID into WDI structure */
3793 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3794 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3795 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3797 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003799#ifdef WLAN_FEATURE_VOWIFI
3800 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3801#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804#ifdef WLAN_FEATURE_VOWIFI_11R
3805 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003806 if(wdiBssParams->bExtSetStaKeyParamValid)
3807 {
3808 /* copy set STA key params to WDI structure */
3809 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3810 wdaBssParams->extSetStaKeyParam.staIdx;
3811 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3812 wdaBssParams->extSetStaKeyParam.encType;
3813 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3814 wdaBssParams->extSetStaKeyParam.wepType;
3815 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3816 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3818 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003819 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3821 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3822 {
3823 WDA_GetWepKeysFromCfg( pWDA,
3824 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3825 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3826 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3827 }
3828 else
3829 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3831 keyIndex++)
3832 {
3833 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3834 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3835 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3836 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3837 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3838 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3840 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3841 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3842 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3843 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3844 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3845 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3846 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3849 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003850 }
3851 }
3852 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3853 }
3854 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3855 {
3856 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3857 sizeof(wdaBssParams->extSetStaKeyParam) );
3858 }
3859#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003860#ifdef WLAN_FEATURE_11AC
3861 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3862 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3863#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003864
3865 return ;
3866}
Jeff Johnson295189b2012-06-20 16:38:30 -07003867/*
3868 * FUNCTION: WDA_UpdateSTAParams
3869 * Translated WDA/PE BSS info into WDI BSS info..
3870 */
3871void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3872 WDI_ConfigStaReqInfoType *wdiStaParams,
3873 tAddStaParams *wdaStaParams)
3874{
3875 tANI_U8 i = 0;
3876 /* Update STA params */
3877 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3878 sizeof(tSirMacAddr)) ;
3879 wdiStaParams->usAssocId = wdaStaParams->assocId;
3880 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003881 wdiStaParams->staIdx = wdaStaParams->staIdx;
3882
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 wdiStaParams->ucShortPreambleSupported =
3884 wdaStaParams->shortPreambleSupported;
3885 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3886 sizeof(tSirMacAddr)) ;
3887 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3888
3889 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3890
3891 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3892 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3893 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3894 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3895 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3896 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3897 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3898
3899 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3900 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 wdiStaParams->wdiSupportedRates.opRateMode =
3902 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3904 {
3905 wdiStaParams->wdiSupportedRates.llbRates[i] =
3906 wdaStaParams->supportedRates.llbRates[i];
3907 }
3908 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3909 {
3910 wdiStaParams->wdiSupportedRates.llaRates[i] =
3911 wdaStaParams->supportedRates.llaRates[i];
3912 }
3913 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3914 {
3915 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3916 wdaStaParams->supportedRates.aniLegacyRates[i];
3917 }
3918 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3919 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003920#ifdef WLAN_FEATURE_11AC
3921 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3922 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3923 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3924 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3925#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3927 {
3928 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3929 wdaStaParams->supportedRates.supportedMCSSet[i];
3930 }
3931 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3932 wdaStaParams->supportedRates.rxHighestDataRate;
3933
3934 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3935
3936 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3937
3938 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3939 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3940 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3941
3942 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3943 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3944 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3945 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003947#ifdef WLAN_FEATURE_11AC
3948 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3949 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003950 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003951#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003952 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3953 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 return ;
3955}
Jeff Johnson295189b2012-06-20 16:38:30 -07003956/*
3957 * -------------------------------------------------------------------------
3958 * CFG update to WDI
3959 * -------------------------------------------------------------------------
3960 */
3961
3962 /*
3963 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3964 * Convert the WNI CFG ID to HAL CFG ID
3965 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003966static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003967{
3968 switch(wniCfgId)
3969 {
3970 case WNI_CFG_STA_ID:
3971 return QWLAN_HAL_CFG_STA_ID;
3972 case WNI_CFG_CURRENT_TX_ANTENNA:
3973 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3974 case WNI_CFG_CURRENT_RX_ANTENNA:
3975 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3976 case WNI_CFG_LOW_GAIN_OVERRIDE:
3977 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3978 case WNI_CFG_POWER_STATE_PER_CHAIN:
3979 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3980 case WNI_CFG_CAL_PERIOD:
3981 return QWLAN_HAL_CFG_CAL_PERIOD;
3982 case WNI_CFG_CAL_CONTROL:
3983 return QWLAN_HAL_CFG_CAL_CONTROL;
3984 case WNI_CFG_PROXIMITY:
3985 return QWLAN_HAL_CFG_PROXIMITY;
3986 case WNI_CFG_NETWORK_DENSITY:
3987 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3988 case WNI_CFG_MAX_MEDIUM_TIME:
3989 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3990 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3991 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3992 case WNI_CFG_RTS_THRESHOLD:
3993 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3994 case WNI_CFG_SHORT_RETRY_LIMIT:
3995 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3996 case WNI_CFG_LONG_RETRY_LIMIT:
3997 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3998 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3999 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4000 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4001 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4002 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4003 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4004 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4005 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4006 case WNI_CFG_FIXED_RATE:
4007 return QWLAN_HAL_CFG_FIXED_RATE;
4008 case WNI_CFG_RETRYRATE_POLICY:
4009 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4010 case WNI_CFG_RETRYRATE_SECONDARY:
4011 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4012 case WNI_CFG_RETRYRATE_TERTIARY:
4013 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4014 case WNI_CFG_FORCE_POLICY_PROTECTION:
4015 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4016 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4017 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4018 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4019 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4020 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4021 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4022 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4023 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4024 case WNI_CFG_MAX_BA_SESSIONS:
4025 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4026 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4027 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4028 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4029 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4030 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4031 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4032 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4033 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4034 case WNI_CFG_STATS_PERIOD:
4035 return QWLAN_HAL_CFG_STATS_PERIOD;
4036 case WNI_CFG_CFP_MAX_DURATION:
4037 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4038#if 0 /*This is not part of CFG*/
4039 case WNI_CFG_FRAME_TRANS_ENABLED:
4040 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4041#endif
4042 case WNI_CFG_DTIM_PERIOD:
4043 return QWLAN_HAL_CFG_DTIM_PERIOD;
4044 case WNI_CFG_EDCA_WME_ACBK:
4045 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4046 case WNI_CFG_EDCA_WME_ACBE:
4047 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4048 case WNI_CFG_EDCA_WME_ACVI:
4049 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4050 case WNI_CFG_EDCA_WME_ACVO:
4051 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4052#if 0
4053 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4054 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4055 case WNI_CFG_TELE_BCN_TRANS_LI:
4056 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4057 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4058 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4059 case WNI_CFG_TELE_BCN_MAX_LI:
4060 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4061 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4062 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4063#endif
4064 case WNI_CFG_ENABLE_CLOSE_LOOP:
4065 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004066 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4067 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 default:
4069 {
4070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4071 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4072 wniCfgId);
4073 return VOS_STATUS_E_INVAL;
4074 }
4075 }
4076}
Jeff Johnson295189b2012-06-20 16:38:30 -07004077/*
4078 * FUNCTION: WDA_UpdateCfgCallback
4079 *
4080 */
4081void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4082{
4083 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4084 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4085 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004087 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 /*
4089 * currently there is no response message is expected between PE and
4090 * WDA, Failure return from WDI is a ASSERT condition
4091 */
4092 if(WDI_STATUS_SUCCESS != wdiStatus)
4093 {
4094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004095 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4097 }
4098
4099 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4100 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4101 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 return ;
4103}
Jeff Johnson295189b2012-06-20 16:38:30 -07004104/*
4105 * FUNCTION: WDA_UpdateCfg
4106 *
4107 */
4108VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4109{
4110
4111 WDI_Status status = WDI_STATUS_SUCCESS ;
4112 tANI_U32 val =0;
4113 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4114 tHalCfg *configData;
4115 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4116 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 if (NULL == pMac )
4120 {
4121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004122 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 return VOS_STATUS_E_FAILURE;
4124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 if(WDA_START_STATE != pWDA->wdaState)
4126 {
4127 return VOS_STATUS_E_FAILURE;
4128 }
4129
4130 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4131 {
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004133 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 VOS_ASSERT(0);
4135 return VOS_STATUS_E_FAILURE;
4136 }
4137
4138 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4139 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 if(NULL == wdiCfgReqParam)
4141 {
4142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 VOS_ASSERT(0);
4145 return VOS_STATUS_E_NOMEM;
4146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4148 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 if(NULL == wdiCfgReqParam->pConfigBuffer)
4150 {
4151 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004152 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 vos_mem_free(wdiCfgReqParam);
4154 VOS_ASSERT(0);
4155 return VOS_STATUS_E_NOMEM;
4156 }
4157
4158 /*convert the WNI CFG Id to HAL CFG Id*/
4159 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4160 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4161
4162 /*TODO: revisit this for handling string parameters */
4163 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4164 &val) != eSIR_SUCCESS)
4165 {
4166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4167 "Failed to cfg get id %d\n", cfgParam->bodyval);
4168 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4169 vos_mem_free(wdiCfgReqParam);
4170 return eSIR_FAILURE;
4171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4173 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4174 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4175 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4176 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4177
4178 /* store Params pass it to WDI */
4179 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004180#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4181 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4182 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 if(IS_WDI_STATUS_FAILURE(status))
4184 {
4185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4186 "Failure in Update CFG WDI API, free all the memory " );
4187 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4188 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4189 pWDA->wdaWdiCfgApiMsgParam = NULL;
4190 /* Failure is not expected */
4191 VOS_ASSERT(0) ;
4192 }
4193#else
4194 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4195 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4196 pWDA->wdaWdiCfgApiMsgParam = NULL;
4197#endif
4198 return CONVERT_WDI2VOS_STATUS(status) ;
4199}
4200
Jeff Johnson295189b2012-06-20 16:38:30 -07004201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4202 v_U8_t *pDefaultKeyId,
4203 v_U8_t *pNumKeys,
4204 WDI_KeysType *pWdiKeys )
4205{
4206 v_U32_t i, j, defKeyId = 0;
4207 v_U32_t val = SIR_MAC_KEY_LENGTH;
4208 VOS_STATUS status = WDI_STATUS_SUCCESS;
4209 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 if (NULL == pMac )
4211 {
4212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004213 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 return VOS_STATUS_E_FAILURE;
4215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4217 &defKeyId ))
4218 {
4219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4220 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4221 }
4222
4223 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 /* Need to extract ALL of the configured WEP Keys */
4225 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4226 {
4227 val = SIR_MAC_KEY_LENGTH;
4228 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4229 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4230 pWdiKeys[j].key,
4231 &val ))
4232 {
4233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4234 "WEP Key index [%d] may not configured in CFG\n",i);
4235 }
4236 else
4237 {
4238 pWdiKeys[j].keyId = (tANI_U8) i;
4239 /*
4240 * Actually, a DC (Don't Care) because
4241 * this is determined (and set) by PE/MLME
4242 */
4243 pWdiKeys[j].unicast = 0;
4244 /*
4245 * Another DC (Don't Care)
4246 */
4247 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4248 /* Another DC (Don't Care). Unused for WEP */
4249 pWdiKeys[j].paeRole = 0;
4250 /* Determined from wlan_cfgGetStr() above.*/
4251 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 j++;
4253 *pNumKeys = (tANI_U8) j;
4254 }
4255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 return status;
4257}
Jeff Johnson295189b2012-06-20 16:38:30 -07004258/*
4259 * FUNCTION: WDA_SetBssKeyReqCallback
4260 * send SET BSS key RSP back to PE
4261 */
4262void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4263{
4264 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4265 tWDA_CbContext *pWDA;
4266 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004268 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 if(NULL == pWdaParams)
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_ASSERT(0) ;
4274 return ;
4275 }
4276 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4277 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4279 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004280 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 return ;
4283}
Jeff Johnson295189b2012-06-20 16:38:30 -07004284/*
4285 * FUNCTION: WDA_ProcessSetBssKeyReq
4286 * Request to WDI for programming the BSS key( key for
4287 * broadcast/multicast frames Encryption)
4288 */
4289VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4290 tSetBssKeyParams *setBssKeyParams )
4291{
4292 WDI_Status status = WDI_STATUS_SUCCESS ;
4293 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4294 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4295 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4296 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004299 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 if(NULL == wdiSetBssKeyParam)
4301 {
4302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 VOS_ASSERT(0);
4305 return VOS_STATUS_E_NOMEM;
4306 }
4307 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4308 if(NULL == pWdaParams)
4309 {
4310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 VOS_ASSERT(0);
4313 vos_mem_free(wdiSetBssKeyParam);
4314 return VOS_STATUS_E_NOMEM;
4315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 /* copy set BSS params to WDI structure */
4318 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4319 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4320 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 if(setBssKeyParams->encType != eSIR_ED_NONE)
4322 {
4323 if( setBssKeyParams->numKeys == 0 &&
4324 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4325 setBssKeyParams->encType == eSIR_ED_WEP104))
4326 {
4327 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4329 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4330 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4331 }
4332 else
4333 {
4334 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4335 {
4336 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4337 setBssKeyParams->key[keyIndex].keyId;
4338 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4339 setBssKeyParams->key[keyIndex].unicast;
4340 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4341 setBssKeyParams->key[keyIndex].keyDirection;
4342 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4343 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4344 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4345 setBssKeyParams->key[keyIndex].paeRole;
4346 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4347 setBssKeyParams->key[keyIndex].keyLength;
4348 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4349 setBssKeyParams->key[keyIndex].key,
4350 SIR_MAC_MAX_KEY_LENGTH);
4351 }
4352 }
4353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4355 setBssKeyParams->singleTidRc;
4356 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 /* Store set key pointer, as this will be used for response */
4358 /* store Params pass it to WDI */
4359 pWdaParams->pWdaContext = pWDA;
4360 pWdaParams->wdaMsgParam = setBssKeyParams;
4361 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4363 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4364
4365 if(IS_WDI_STATUS_FAILURE(status))
4366 {
4367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4368 "Failure in Set BSS Key Req WDI API, free all the memory " );
4369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4370 vos_mem_free(pWdaParams) ;
4371 setBssKeyParams->status = eSIR_FAILURE ;
4372 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 return CONVERT_WDI2VOS_STATUS(status) ;
4375}
Jeff Johnson295189b2012-06-20 16:38:30 -07004376/*
4377 * FUNCTION: WDA_RemoveBssKeyReqCallback
4378 * send SET BSS key RSP back to PE
4379 */
4380void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4381{
4382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4383 tWDA_CbContext *pWDA;
4384 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(NULL == pWdaParams)
4388 {
4389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004390 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 VOS_ASSERT(0) ;
4392 return ;
4393 }
4394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4395 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4397 vos_mem_free(pWdaParams) ;
4398
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004399 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 return ;
4402}
Jeff Johnson295189b2012-06-20 16:38:30 -07004403/*
4404 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4405 * Request to WDI to remove the BSS key( key for broadcast/multicast
4406 * frames Encryption)
4407 */
4408VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4409 tRemoveBssKeyParams *removeBssKeyParams )
4410{
4411 WDI_Status status = WDI_STATUS_SUCCESS ;
4412 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4413 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4414 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 if(NULL == wdiRemoveBssKeyParam)
4419 {
4420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 VOS_ASSERT(0);
4423 return VOS_STATUS_E_NOMEM;
4424 }
4425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4426 if(NULL == pWdaParams)
4427 {
4428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 VOS_ASSERT(0);
4431 vos_mem_free(wdiRemoveBssKeyParam);
4432 return VOS_STATUS_E_NOMEM;
4433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 /* copy Remove BSS key params to WDI structure*/
4435 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4436 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4437 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4438 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4439 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 /* Store remove key pointer, as this will be used for response */
4441 /* store Params pass it to WDI */
4442 pWdaParams->pWdaContext = pWDA;
4443 pWdaParams->wdaMsgParam = removeBssKeyParams;
4444 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4446 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 if(IS_WDI_STATUS_FAILURE(status))
4448 {
4449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4450 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4452 vos_mem_free(pWdaParams) ;
4453 removeBssKeyParams->status = eSIR_FAILURE ;
4454 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 return CONVERT_WDI2VOS_STATUS(status) ;
4457}
Jeff Johnson295189b2012-06-20 16:38:30 -07004458/*
4459 * FUNCTION: WDA_SetBssKeyReqCallback
4460 * send SET BSS key RSP back to PE
4461 */
4462void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4463{
4464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4465 tWDA_CbContext *pWDA;
4466 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 if(NULL == pWdaParams)
4470 {
4471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004472 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 VOS_ASSERT(0) ;
4474 return ;
4475 }
4476 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4477 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4479 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004480 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 return ;
4483}
Jeff Johnson295189b2012-06-20 16:38:30 -07004484/*
4485 * FUNCTION: WDA_ProcessSetStaKeyReq
4486 * Request to WDI for programming the STA key( key for Unicast frames
4487 * Encryption)
4488 */
4489VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4490 tSetStaKeyParams *setStaKeyParams )
4491{
4492 WDI_Status status = WDI_STATUS_SUCCESS ;
4493 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4494 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4495 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4496 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004499 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 if(NULL == wdiSetStaKeyParam)
4501 {
4502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 VOS_ASSERT(0);
4505 return VOS_STATUS_E_NOMEM;
4506 }
4507 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4508 if(NULL == pWdaParams)
4509 {
4510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 VOS_ASSERT(0);
4513 vos_mem_free(wdiSetStaKeyParam);
4514 return VOS_STATUS_E_NOMEM;
4515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 /* copy set STA key params to WDI structure */
4519 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4520 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4521 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4522 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 if(setStaKeyParams->encType != eSIR_ED_NONE)
4524 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004525 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4527 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4528 {
4529 WDA_GetWepKeysFromCfg( pWDA,
4530 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4531 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4532 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4533 }
4534 else
4535 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4537 keyIndex++)
4538 {
4539 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4540 setStaKeyParams->key[keyIndex].keyId;
4541 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4542 setStaKeyParams->key[keyIndex].unicast;
4543 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4544 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4546 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4547 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4548 setStaKeyParams->key[keyIndex].paeRole;
4549 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4550 setStaKeyParams->key[keyIndex].keyLength;
4551 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4552 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4553 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4554 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4555 {
4556 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4557 }
4558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4560 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 }
4562 }
4563 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4564 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 /* Store set key pointer, as this will be used for response */
4566 /* store Params pass it to WDI */
4567 pWdaParams->pWdaContext = pWDA;
4568 pWdaParams->wdaMsgParam = setStaKeyParams;
4569 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4571 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 if(IS_WDI_STATUS_FAILURE(status))
4573 {
4574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4575 "Failure in set STA Key Req WDI API, free all the memory " );
4576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4577 vos_mem_free(pWdaParams) ;
4578 setStaKeyParams->status = eSIR_FAILURE ;
4579 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 return CONVERT_WDI2VOS_STATUS(status) ;
4582}
Jeff Johnson295189b2012-06-20 16:38:30 -07004583/*
4584 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4585 * send SET Bcast STA key RSP back to PE
4586 */
4587void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4588{
4589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4590 tWDA_CbContext *pWDA;
4591 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004593 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 if(NULL == pWdaParams)
4595 {
4596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004597 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 VOS_ASSERT(0) ;
4599 return ;
4600 }
4601 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4602 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4604 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004605 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 return ;
4608}
4609
Jeff Johnson295189b2012-06-20 16:38:30 -07004610/*
4611 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4612 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4613 * Encryption)
4614 */
4615VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4616 tSetStaKeyParams *setStaKeyParams )
4617{
4618 WDI_Status status = WDI_STATUS_SUCCESS ;
4619 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4620 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4621 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4622 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 if(NULL == wdiSetStaKeyParam)
4627 {
4628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 VOS_ASSERT(0);
4631 return VOS_STATUS_E_NOMEM;
4632 }
4633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4634 if(NULL == pWdaParams)
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 VOS_ASSERT(0);
4639 vos_mem_free(wdiSetStaKeyParam);
4640 return VOS_STATUS_E_NOMEM;
4641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004643 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 /* copy set STA key params to WDI structure */
4645 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4646 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4647 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4648 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 if(setStaKeyParams->encType != eSIR_ED_NONE)
4650 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4652 keyIndex++)
4653 {
4654 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4655 setStaKeyParams->key[keyIndex].keyId;
4656 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4657 setStaKeyParams->key[keyIndex].unicast;
4658 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4659 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4661 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4662 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4663 setStaKeyParams->key[keyIndex].paeRole;
4664 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4665 setStaKeyParams->key[keyIndex].keyLength;
4666 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4667 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4670 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 }
4672 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 /* Store set key pointer, as this will be used for response */
4674 /* store Params pass it to WDI */
4675 pWdaParams->pWdaContext = pWDA;
4676 pWdaParams->wdaMsgParam = setStaKeyParams;
4677 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4679 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 if(IS_WDI_STATUS_FAILURE(status))
4681 {
4682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4683 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4685 vos_mem_free(pWdaParams) ;
4686 setStaKeyParams->status = eSIR_FAILURE ;
4687 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 return CONVERT_WDI2VOS_STATUS(status) ;
4690}
Jeff Johnson295189b2012-06-20 16:38:30 -07004691/*
4692 * FUNCTION: WDA_RemoveStaKeyReqCallback
4693 * send SET BSS key RSP back to PE
4694 */
4695void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4696{
4697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4698 tWDA_CbContext *pWDA;
4699 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004701 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 if(NULL == pWdaParams)
4703 {
4704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004705 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 VOS_ASSERT(0) ;
4707 return ;
4708 }
4709 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4710 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4712 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004713 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 return ;
4716}
4717
Jeff Johnson295189b2012-06-20 16:38:30 -07004718/*
4719 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4720 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4721 */
4722VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4723 tRemoveStaKeyParams *removeStaKeyParams )
4724{
4725 WDI_Status status = WDI_STATUS_SUCCESS ;
4726 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4727 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4728 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4729 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004731 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 if(NULL == wdiRemoveStaKeyParam)
4733 {
4734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 VOS_ASSERT(0);
4737 return VOS_STATUS_E_NOMEM;
4738 }
4739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4740 if(NULL == pWdaParams)
4741 {
4742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 VOS_ASSERT(0);
4745 vos_mem_free(wdiRemoveStaKeyParam);
4746 return VOS_STATUS_E_NOMEM;
4747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 /* copy remove STA key params to WDI structure*/
4749 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4750 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4751 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4752 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4753 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 /* Store remove key pointer, as this will be used for response */
4755 /* store Params pass it to WDI */
4756 pWdaParams->pWdaContext = pWDA;
4757 pWdaParams->wdaMsgParam = removeStaKeyParams;
4758 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004759 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4760 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 if(IS_WDI_STATUS_FAILURE(status))
4762 {
4763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4764 "Failure in remove STA Key Req WDI API, free all the memory " );
4765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4766 vos_mem_free(pWdaParams) ;
4767 removeStaKeyParams->status = eSIR_FAILURE ;
4768 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 return CONVERT_WDI2VOS_STATUS(status) ;
4771}
Jeff Johnson295189b2012-06-20 16:38:30 -07004772/*
4773 * FUNCTION: WDA_IsHandleSetLinkStateReq
4774 * Update the WDA state and return the status to handle this message or not
4775 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004776WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4777 tWDA_CbContext *pWDA,
4778 tLinkStateParams *linkStateParams)
4779{
4780 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004781 switch(linkStateParams->state)
4782 {
4783 case eSIR_LINK_PREASSOC_STATE:
4784 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4785 /*
4786 * set the WDA state to PRE ASSOC
4787 * copy the BSSID into pWDA to use it in join request and return,
4788 * No need to handle these messages.
4789 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004790 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4791 {
4792 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004794 }
4795 else
4796 {
4797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004798 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004799 VOS_ASSERT(0);
4800 }
4801
4802 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4803 {
4804 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004806 }
4807 else
4808 {
4809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004810 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004811 VOS_ASSERT(0);
4812 }
4813
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4815 *channel and after ) so reset the WDA state to ready when the second
4816 * time UMAC issue the link state with PREASSOC
4817 */
4818 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4819 {
4820 /* RESET WDA state back to WDA_READY_STATE */
4821 pWDA->wdaState = WDA_READY_STATE;
4822 }
4823 else
4824 {
4825 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4826 }
4827 //populate linkState info in WDACbCtxt
4828 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 default:
4831 if(pWDA->wdaState != WDA_READY_STATE)
4832 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004833 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4834 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4835 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4836 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4837 *the ASSERT in WDA_Stop during module unload.*/
4838 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4839 {
4840 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004841 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004842 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004843 else
4844 {
4845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004846 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004847 status = WDA_IGNORE_SET_LINK_STATE;
4848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 }
4850 break;
4851 }
4852
4853 return status;
4854}
Jeff Johnson295189b2012-06-20 16:38:30 -07004855/*
4856 * FUNCTION: WDA_SetLinkStateCallback
4857 * call back function for set link state from WDI
4858 */
4859void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4860{
4861 tWDA_CbContext *pWDA;
4862 tLinkStateParams *linkStateParams;
4863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 if(NULL == pWdaParams)
4867 {
4868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 VOS_ASSERT(0) ;
4871 return ;
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 /*
4876 * In STA mode start the BA activity check timer after association
4877 * and in AP mode start BA activity check timer after BSS start */
4878 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4879 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004880 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4881 ((status == WDI_STATUS_SUCCESS) &&
4882 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 {
4884 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 /*
4888 * No respone required for WDA_SET_LINK_STATE so free the request
4889 * param here
4890 */
4891 if( pWdaParams != NULL )
4892 {
4893 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4894 {
4895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4896 }
4897 vos_mem_free(pWdaParams);
4898 }
4899 return ;
4900}
Jeff Johnson295189b2012-06-20 16:38:30 -07004901/*
4902 * FUNCTION: WDA_ProcessSetLinkState
4903 * Request to WDI to set the link status.
4904 */
4905VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4906 tLinkStateParams *linkStateParams)
4907{
4908 WDI_Status status = WDI_STATUS_SUCCESS ;
4909 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4910 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4911 sizeof(WDI_SetLinkReqParamsType)) ;
4912 tWDA_ReqParams *pWdaParams ;
4913 tpAniSirGlobal pMac;
4914 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4915
4916 if(NULL == pMac)
4917 {
4918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004919 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004921 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 return VOS_STATUS_E_FAILURE;
4923 }
4924
4925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 if(NULL == wdiSetLinkStateParam)
4928 {
4929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 VOS_ASSERT(0);
4932 return VOS_STATUS_E_NOMEM;
4933 }
4934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4935 if(NULL == pWdaParams)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0);
4940 vos_mem_free(wdiSetLinkStateParam);
4941 return VOS_STATUS_E_NOMEM;
4942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 if(WDA_IGNORE_SET_LINK_STATE ==
4944 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4945 {
4946 status = WDI_STATUS_E_FAILURE;
4947 }
4948 else
4949 {
4950 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4951 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4953 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4955 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 pWdaParams->pWdaContext = pWDA;
4957 /* Store remove key pointer, as this will be used for response */
4958 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 /* store Params pass it to WDI */
4960 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4961 /* Stop Timer only other than GO role and concurrent session */
4962 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004963 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4965 {
4966 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4969 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 if(IS_WDI_STATUS_FAILURE(status))
4971 {
4972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4973 "Failure in set link state Req WDI API, free all the memory " );
4974 }
4975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 if(IS_WDI_STATUS_FAILURE(status))
4977 {
4978 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004979 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 vos_mem_free(pWdaParams);
4981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 return CONVERT_WDI2VOS_STATUS(status) ;
4983}
Jeff Johnson295189b2012-06-20 16:38:30 -07004984/*
4985 * FUNCTION: WDA_GetStatsReqParamsCallback
4986 * send the response to PE with Stats received from WDI
4987 */
4988void WDA_GetStatsReqParamsCallback(
4989 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4990 void* pUserData)
4991{
4992 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4993 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4994
4995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 pGetPEStatsRspParams =
4998 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4999 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5000
5001 if(NULL == pGetPEStatsRspParams)
5002 {
5003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 VOS_ASSERT(0);
5006 return;
5007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5009 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5010 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5011 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005012
5013 //Fill the Session Id Properly in PE
5014 pGetPEStatsRspParams->sessionId = 0;
5015 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005016 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5018 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 vos_mem_copy( pGetPEStatsRspParams + 1,
5020 wdiGetStatsRsp + 1,
5021 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 /* send response to UMAC*/
5023 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5024
5025 return;
5026}
5027
Jeff Johnson295189b2012-06-20 16:38:30 -07005028/*
5029 * FUNCTION: WDA_ProcessGetStatsReq
5030 * Request to WDI to get the statistics
5031 */
5032VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5033 tAniGetPEStatsReq *pGetStatsParams)
5034{
5035 WDI_Status status = WDI_STATUS_SUCCESS ;
5036 WDI_GetStatsReqParamsType wdiGetStatsParam;
5037 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005039 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5041 pGetStatsParams->staId;
5042 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5043 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 status = WDI_GetStatsReq(&wdiGetStatsParam,
5046 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 if(IS_WDI_STATUS_FAILURE(status))
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5050 "Failure in Get Stats Req WDI API, free all the memory " );
5051 pGetPEStatsRspParams =
5052 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5053 if(NULL == pGetPEStatsRspParams)
5054 {
5055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005058 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 return VOS_STATUS_E_NOMEM;
5060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5062 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5063 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5064 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5065 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5066 (void *)pGetPEStatsRspParams, 0) ;
5067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 /* Free the request message */
5069 vos_mem_free(pGetStatsParams);
5070 return CONVERT_WDI2VOS_STATUS(status);
5071}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005072
5073#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5074/*
5075 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5076 * send the response to PE with roam Rssi received from WDI
5077 */
5078void WDA_GetRoamRssiReqParamsCallback(
5079 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5080 void* pUserData)
5081{
5082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5083 tWDA_CbContext *pWDA = NULL;
5084 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5085 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5087 "<------ %s " ,__func__);
5088 if(NULL == pWdaParams)
5089 {
5090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5091 "%s: pWdaParams received NULL", __func__);
5092 VOS_ASSERT(0) ;
5093 return ;
5094 }
5095 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5096 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5097
5098 if(NULL == pGetRoamRssiReqParams)
5099 {
5100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5101 "%s: pGetRoamRssiReqParams received NULL", __func__);
5102 VOS_ASSERT(0);
5103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5104 vos_mem_free(pWdaParams);
5105 return ;
5106 }
5107 pGetRoamRssiRspParams =
5108 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5109
5110 if(NULL == pGetRoamRssiRspParams)
5111 {
5112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5113 "%s: VOS MEM Alloc Failure", __func__);
5114 VOS_ASSERT(0);
5115 return;
5116 }
5117 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5118 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005119 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005120 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5121 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5122
5123 /* Assign get roam rssi req (backup) in to the response */
5124 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5125
5126 /* free WDI command buffer */
5127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5128 vos_mem_free(pWdaParams) ;
5129
5130 /* send response to UMAC*/
5131 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5132
5133 return;
5134}
5135
5136
5137
5138/*
5139 * FUNCTION: WDA_ProcessGetRoamRssiReq
5140 * Request to WDI to get the statistics
5141 */
5142VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5143 tAniGetRssiReq *pGetRoamRssiParams)
5144{
5145 WDI_Status status = WDI_STATUS_SUCCESS ;
5146 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5147 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5148 tWDA_ReqParams *pWdaParams = NULL;
5149
5150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5151 "------> %s " ,__func__);
5152 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5153 pGetRoamRssiParams->staId;
5154 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5155
5156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5157 if(NULL == pWdaParams)
5158 {
5159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5160 "%s: VOS MEM Alloc Failure", __func__);
5161 VOS_ASSERT(0);
5162 return VOS_STATUS_E_NOMEM;
5163 }
5164
5165 /* Store Init Req pointer, as this will be used for response */
5166 pWdaParams->pWdaContext = pWDA;
5167
5168 /* Take Get roam Rssi req backup as it stores the callback to be called after
5169 receiving the response */
5170 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5171 pWdaParams->wdaWdiApiMsgParam = NULL;
5172
5173 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5174 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5175 if(IS_WDI_STATUS_FAILURE(status))
5176 {
5177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5178 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5179 pGetRoamRssiRspParams =
5180 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5181 if(NULL == pGetRoamRssiRspParams)
5182 {
5183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5184 "%s: VOS MEM Alloc Failure", __func__);
5185 VOS_ASSERT(0);
5186 vos_mem_free(pGetRoamRssiParams);
5187 vos_mem_free(pWdaParams);
5188 return VOS_STATUS_E_NOMEM;
5189 }
5190 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5191 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5192 pGetRoamRssiRspParams->rssi = 0;
5193 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5194 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5195 (void *)pGetRoamRssiRspParams, 0) ;
5196 }
5197 return CONVERT_WDI2VOS_STATUS(status);
5198}
5199#endif
5200
5201
Jeff Johnson295189b2012-06-20 16:38:30 -07005202/*
5203 * FUNCTION: WDA_UpdateEDCAParamCallback
5204 * call back function for Update EDCA params from WDI
5205 */
5206void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5207{
5208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5209 tEdcaParams *pEdcaParams;
5210
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 if(NULL == pWdaParams)
5214 {
5215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 VOS_ASSERT(0) ;
5218 return ;
5219 }
5220 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5222 vos_mem_free(pWdaParams);
5223 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 return ;
5225}
Jeff Johnson295189b2012-06-20 16:38:30 -07005226/*
5227 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5228 * Request to WDI to Update the EDCA params.
5229 */
5230VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5231 tEdcaParams *pEdcaParams)
5232{
5233 WDI_Status status = WDI_STATUS_SUCCESS ;
5234 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5235 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5236 sizeof(WDI_UpdateEDCAParamsType)) ;
5237 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005239 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if(NULL == wdiEdcaParam)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005245 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 return VOS_STATUS_E_NOMEM;
5247 }
5248 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5249 if(NULL == pWdaParams)
5250 {
5251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 VOS_ASSERT(0);
5254 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005255 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 return VOS_STATUS_E_NOMEM;
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005259 /*
5260 Since firmware is not using highperformance flag, we have removed
5261 this flag from wdiEDCAInfo structure to match sizeof the structure
5262 between host and firmware.In future if we are planning to use
5263 highperformance flag then Please define this flag in wdiEDCAInfo
5264 structure, update it here and send it to firmware. i.e.
5265 Following is the original line which we removed as part of the fix
5266 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5267 pEdcaParams->highPerformance;
5268 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5270 &pEdcaParams->acbe);
5271 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5272 &pEdcaParams->acbk);
5273 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5274 &pEdcaParams->acvi);
5275 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5276 &pEdcaParams->acvo);
5277 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 pWdaParams->pWdaContext = pWDA;
5279 /* Store remove key pointer, as this will be used for response */
5280 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 /* store Params pass it to WDI */
5282 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5284 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 if(IS_WDI_STATUS_FAILURE(status))
5286 {
5287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5288 "Failure in Update EDCA Params WDI API, free all the memory " );
5289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5290 vos_mem_free(pWdaParams);
5291 vos_mem_free(pEdcaParams);
5292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 return CONVERT_WDI2VOS_STATUS(status) ;
5294}
Jeff Johnson295189b2012-06-20 16:38:30 -07005295/*
5296 * FUNCTION: WDA_AddBAReqCallback
5297 * send ADD BA RSP back to PE
5298 */
5299void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5300 void* pUserData)
5301{
5302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5303 tWDA_CbContext *pWDA;
5304 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005306 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 if(NULL == pWdaParams)
5308 {
5309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005310 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 VOS_ASSERT(0) ;
5312 return ;
5313 }
5314 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5315 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5317 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005318 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005319 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 return ;
5321}
5322
Jeff Johnson295189b2012-06-20 16:38:30 -07005323/*
5324 * FUNCTION: WDA_ProcessAddBAReq
5325 * Request to WDI to Update the ADDBA REQ params.
5326 */
5327VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5328 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5329{
Jeff Johnson43971f52012-07-17 12:26:56 -07005330 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5332 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5333 sizeof(WDI_AddBAReqParamsType)) ;
5334 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 if(NULL == wdiAddBAReqParam)
5338 {
5339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 VOS_ASSERT(0);
5342 return VOS_STATUS_E_NOMEM;
5343 }
5344 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5345 if(NULL == pWdaParams)
5346 {
5347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 VOS_ASSERT(0);
5350 vos_mem_free(wdiAddBAReqParam);
5351 return VOS_STATUS_E_NOMEM;
5352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 do
5354 {
5355 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 wdiAddBaInfo->ucSTAIdx = staIdx ;
5357 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5358 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 } while(0) ;
5360 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 pWdaParams->pWdaContext = pWDA;
5362 /* store Params pass it to WDI */
5363 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5364 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005365 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5366 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005367
Jeff Johnson43971f52012-07-17 12:26:56 -07005368 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 {
5370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005371 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5372 status = CONVERT_WDI2VOS_STATUS(wstatus);
5373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 vos_mem_free(pWdaParams);
5375 pAddBAReqParams->status = eSIR_FAILURE;
5376 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5377 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005378 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379}
Jeff Johnson295189b2012-06-20 16:38:30 -07005380/*
5381 * FUNCTION: WDA_AddBASessionReqCallback
5382 * send ADD BA SESSION RSP back to PE/(or TL)
5383 */
5384void WDA_AddBASessionReqCallback(
5385 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5386{
5387 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5389 tWDA_CbContext *pWDA;
5390 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 if(NULL == pWdaParams)
5394 {
5395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_ASSERT(0) ;
5398 return ;
5399 }
5400 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5401 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 if( NULL == pAddBAReqParams )
5403 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005405 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5408 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 return ;
5410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5412 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 /*
5414 * if WDA in update TL state, update TL with BA session parama and send
5415 * another request to HAL(/WDI) (ADD_BA_REQ)
5416 */
5417
5418 if((VOS_STATUS_SUCCESS ==
5419 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5420 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5421 {
5422 /* Update TL with BA info received from HAL/WDI */
5423 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5424 wdiAddBaSession->usBaSessionID,
5425 wdiAddBaSession->ucSTAIdx,
5426 wdiAddBaSession->ucBaTID,
5427 wdiAddBaSession->ucBaBufferSize,
5428 wdiAddBaSession->ucWinSize,
5429 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5431 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5432 }
5433 else
5434 {
5435 pAddBAReqParams->status =
5436 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5437
5438 /* Setting Flag to indicate that Set BA is success */
5439 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5440 {
5441 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5442 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5443 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 /*Reset the WDA state to READY */
5448 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 return ;
5450}
5451
Jeff Johnson295189b2012-06-20 16:38:30 -07005452/*
5453 * FUNCTION: WDA_ProcessAddBASessionReq
5454 * Request to WDI to Update the ADDBA REQ params.
5455 */
5456VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5457 tAddBAParams *pAddBAReqParams)
5458{
5459 WDI_Status status = WDI_STATUS_SUCCESS ;
5460 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5461 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5462 sizeof(WDI_AddBASessionReqParamsType)) ;
5463 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005464 WLANTL_STAStateType tlSTAState = 0;
5465
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 if(NULL == wdiAddBASessionReqParam)
5469 {
5470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005472 VOS_ASSERT(0);
5473 return VOS_STATUS_E_NOMEM;
5474 }
5475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5476 if(NULL == pWdaParams)
5477 {
5478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 VOS_ASSERT(0);
5481 vos_mem_free(wdiAddBASessionReqParam);
5482 return VOS_STATUS_E_NOMEM;
5483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 /*
5485 * Populate ADD BA parameters and pass these paarmeters to WDI.
5486 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5487 * the state to track if these is BA recipient case or BA initiator
5488 * case.
5489 */
5490 do
5491 {
5492 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5493 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5494 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5495 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5496 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5497 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5498 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5501 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5502 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5503 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5504 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 /* check the BA direction and update state accordingly */
5506 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5507 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5508 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5509
5510 }while(0) ;
5511 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 pWdaParams->pWdaContext = pWDA;
5513 /* Store ADD BA pointer, as this will be used for response */
5514 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5515 /* store Params pass it to WDI */
5516 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005517
5518 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5519 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5520 */
5521 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5522 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5523 {
5524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5525 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5526 status = WDI_STATUS_E_NOT_ALLOWED;
5527 pAddBAReqParams->status =
5528 CONVERT_WDI2SIR_STATUS(status) ;
5529 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5530 /*Reset the WDA state to READY */
5531 pWDA->wdaState = WDA_READY_STATE;
5532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5533 vos_mem_free(pWdaParams);
5534
5535 return CONVERT_WDI2VOS_STATUS(status) ;
5536 }
5537
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5539 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 if(IS_WDI_STATUS_FAILURE(status))
5541 {
5542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005543 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5545 "Send ADD BA failure response to PE\n");
5546 pAddBAReqParams->status =
5547 CONVERT_WDI2SIR_STATUS(status) ;
5548 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005549 /*Reset the WDA state to READY */
5550 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 vos_mem_free(pWdaParams);
5553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005555}
Jeff Johnson295189b2012-06-20 16:38:30 -07005556/*
5557 * FUNCTION: WDA_DelBANotifyTL
5558 * send DEL BA IND to TL
5559 */
5560void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5561 tDelBAParams *pDelBAReqParams)
5562{
5563 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5564 //tSirMsgQ msg;
5565 vos_msg_t vosMsg;
5566 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 if(NULL == pDelBAInd)
5568 {
5569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 VOS_ASSERT(0) ;
5572 return;
5573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5575 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5576 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5577 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005578
Jeff Johnson295189b2012-06-20 16:38:30 -07005579
5580 vosMsg.type = WDA_DELETEBA_IND;
5581 vosMsg.bodyptr = pDelBAInd;
5582 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5583 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5584 {
5585 vosStatus = VOS_STATUS_E_BADMSG;
5586 }
5587}
Jeff Johnson295189b2012-06-20 16:38:30 -07005588/*
5589 * FUNCTION: WDA_DelBAReqCallback
5590 * send DEL BA RSP back to PE
5591 */
5592void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5593{
5594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5595 tWDA_CbContext *pWDA;
5596 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005598 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 if(NULL == pWdaParams)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0) ;
5604 return ;
5605 }
5606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5607 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 /* Notify TL about DEL BA in case of recipinet */
5609 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5610 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5611 {
5612 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 /*
5615 * No respone required for WDA_DELBA_IND so just free the request
5616 * param here
5617 */
5618 vos_mem_free(pDelBAReqParams);
5619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5620 vos_mem_free(pWdaParams);
5621 return ;
5622}
5623
Jeff Johnson295189b2012-06-20 16:38:30 -07005624/*
5625 * FUNCTION: WDA_ProcessDelBAReq
5626 * Request to WDI to Update the DELBA REQ params.
5627 */
5628VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5629 tDelBAParams *pDelBAReqParams)
5630{
5631 WDI_Status status = WDI_STATUS_SUCCESS ;
5632 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5633 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5634 sizeof(WDI_DelBAReqParamsType)) ;
5635 tWDA_ReqParams *pWdaParams ;
5636 tANI_U16 staIdx = 0;
5637 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005639 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 if(NULL == wdiDelBAReqParam)
5641 {
5642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 VOS_ASSERT(0);
5645 return VOS_STATUS_E_NOMEM;
5646 }
5647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5648 if(NULL == pWdaParams)
5649 {
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 VOS_ASSERT(0);
5653 vos_mem_free(wdiDelBAReqParam);
5654 return VOS_STATUS_E_NOMEM;
5655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5657 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5658 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5659 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005660 pWdaParams->pWdaContext = pWDA;
5661 /* Store DEL BA pointer, as this will be used for response */
5662 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 /* store Params pass it to WDI */
5664 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5666 * maintained in WDA, so that WDA can retry for another BA session
5667 */
5668 staIdx = pDelBAReqParams->staIdx;
5669 tid = pDelBAReqParams->baTID;
5670 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 status = WDI_DelBAReq(wdiDelBAReqParam,
5672 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 if(IS_WDI_STATUS_FAILURE(status))
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5676 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5678 vos_mem_free(pWdaParams->wdaMsgParam);
5679 vos_mem_free(pWdaParams);
5680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005682}
Jeff Johnson295189b2012-06-20 16:38:30 -07005683/*
5684 * FUNCTION: WDA_AddTSReqCallback
5685 * send ADD TS RSP back to PE
5686 */
5687void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5688{
5689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5690 tWDA_CbContext *pWDA;
5691 tAddTsParams *pAddTsReqParams;
5692
5693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 if(NULL == pWdaParams)
5696 {
5697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005698 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 VOS_ASSERT(0) ;
5700 return ;
5701 }
5702 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5703 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5705 vos_mem_free(pWdaParams);
5706
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005707 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 return ;
5710}
5711
Jeff Johnson295189b2012-06-20 16:38:30 -07005712/*
5713 * FUNCTION: WDA_ProcessAddTSReq
5714 * Request to WDI to Update the ADD TS REQ params.
5715 */
5716VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5717 tAddTsParams *pAddTsReqParams)
5718{
5719 WDI_Status status = WDI_STATUS_SUCCESS ;
5720 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5721 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5722 sizeof(WDI_AddTSReqParamsType)) ;
5723 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 if(NULL == wdiAddTSReqParam)
5727 {
5728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 VOS_ASSERT(0);
5731 return VOS_STATUS_E_NOMEM;
5732 }
5733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5734 if(NULL == pWdaParams)
5735 {
5736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 VOS_ASSERT(0);
5739 vos_mem_free(wdiAddTSReqParam);
5740 return VOS_STATUS_E_NOMEM;
5741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5743 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 //TS IE
5745 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5746 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5747 pAddTsReqParams->tspec.length;
5748
5749 //TS IE : TS INFO : TRAFFIC
5750 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5751 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5752 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5753 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5754 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5755 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5756 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5757 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5758 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5759 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5760 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5761 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5762 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5763 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5764 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5765 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5766
5767 //TS IE : TS INFO : SCHEDULE
5768 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5769 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5770 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5771 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 //TS IE
5773 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5774 pAddTsReqParams->tspec.nomMsduSz;
5775 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5776 pAddTsReqParams->tspec.maxMsduSz;
5777 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5778 pAddTsReqParams->tspec.minSvcInterval;
5779 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5780 pAddTsReqParams->tspec.maxSvcInterval;
5781 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5782 pAddTsReqParams->tspec.inactInterval;
5783 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5784 pAddTsReqParams->tspec.suspendInterval;
5785 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5786 pAddTsReqParams->tspec.svcStartTime;
5787 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5788 pAddTsReqParams->tspec.minDataRate;
5789 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5790 pAddTsReqParams->tspec.meanDataRate;
5791 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5792 pAddTsReqParams->tspec.peakDataRate;
5793 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5794 pAddTsReqParams->tspec.maxBurstSz;
5795 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5796 pAddTsReqParams->tspec.delayBound;
5797 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5798 pAddTsReqParams->tspec.minPhyRate;
5799 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5800 pAddTsReqParams->tspec.surplusBw;
5801 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5802 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 /* TODO: tAddTsParams doesn't have the following fields */
5804#if 0
5805 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5806 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5807 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5808 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5809#endif
5810 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5811
5812 pWdaParams->pWdaContext = pWDA;
5813 /* Store ADD TS pointer, as this will be used for response */
5814 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 /* store Params pass it to WDI */
5816 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 status = WDI_AddTSReq(wdiAddTSReqParam,
5818 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 if(IS_WDI_STATUS_FAILURE(status))
5820 {
5821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5822 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5824 vos_mem_free(pWdaParams);
5825 pAddTsReqParams->status = eSIR_FAILURE ;
5826 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005829}
5830
Jeff Johnson295189b2012-06-20 16:38:30 -07005831/*
5832 * FUNCTION: WDA_DelTSReqCallback
5833 * send DEL TS RSP back to PE
5834 */
5835void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5836{
5837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005839 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5841 vos_mem_free(pWdaParams->wdaMsgParam) ;
5842 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 /*
5844 * No respone required for WDA_DEL_TS_REQ so just free the request
5845 * param here
5846 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 return ;
5848}
5849
Jeff Johnson295189b2012-06-20 16:38:30 -07005850/*
5851 * FUNCTION: WDA_ProcessDelTSReq
5852 * Request to WDI to Update the DELTS REQ params.
5853 */
5854VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5855 tDelTsParams *pDelTSReqParams)
5856{
5857 WDI_Status status = WDI_STATUS_SUCCESS ;
5858 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5859 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5860 sizeof(WDI_DelTSReqParamsType)) ;
5861 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 if(NULL == wdiDelTSReqParam)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 VOS_ASSERT(0);
5869 return VOS_STATUS_E_NOMEM;
5870 }
5871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5872 if(NULL == pWdaParams)
5873 {
5874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 VOS_ASSERT(0);
5877 vos_mem_free(wdiDelTSReqParam);
5878 return VOS_STATUS_E_NOMEM;
5879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5881 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5882 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5883 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5884 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 pWdaParams->pWdaContext = pWDA;
5886 /* Store DEL TS pointer, as this will be used for response */
5887 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 /* store Params pass it to WDI */
5889 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 status = WDI_DelTSReq(wdiDelTSReqParam,
5891 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 if(IS_WDI_STATUS_FAILURE(status))
5893 {
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5895 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5897 vos_mem_free(pWdaParams->wdaMsgParam);
5898 vos_mem_free(pWdaParams);
5899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005901}
Jeff Johnson295189b2012-06-20 16:38:30 -07005902/*
5903 * FUNCTION: WDA_UpdateBeaconParamsCallback
5904 * Free the memory. No need to send any response to PE in this case
5905 */
5906void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5907{
5908 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005910 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 if(NULL == pWdaParams)
5912 {
5913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005914 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 VOS_ASSERT(0) ;
5916 return ;
5917 }
5918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5919 vos_mem_free(pWdaParams->wdaMsgParam) ;
5920 vos_mem_free(pWdaParams);
5921 /*
5922 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5923 * param here
5924 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 return ;
5926}
Jeff Johnson295189b2012-06-20 16:38:30 -07005927/*
5928 * FUNCTION: WDA_ProcessUpdateBeaconParams
5929 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5930 */
5931VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5932 tUpdateBeaconParams *pUpdateBeaconParams)
5933{
5934 WDI_Status status = WDI_STATUS_SUCCESS ;
5935 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5936 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5937 sizeof(WDI_UpdateBeaconParamsType)) ;
5938 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 if(NULL == wdiUpdateBeaconParams)
5942 {
5943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 VOS_ASSERT(0);
5946 return VOS_STATUS_E_NOMEM;
5947 }
5948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5949 if(NULL == pWdaParams)
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 VOS_ASSERT(0);
5954 vos_mem_free(wdiUpdateBeaconParams);
5955 return VOS_STATUS_E_NOMEM;
5956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5958 pUpdateBeaconParams->bssIdx;
5959 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5960 pUpdateBeaconParams->fShortPreamble;
5961 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5962 pUpdateBeaconParams->fShortSlotTime;
5963 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5964 pUpdateBeaconParams->beaconInterval;
5965 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5966 pUpdateBeaconParams->llaCoexist;
5967 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5968 pUpdateBeaconParams->llbCoexist;
5969 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5970 pUpdateBeaconParams->llgCoexist;
5971 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5972 pUpdateBeaconParams->ht20MhzCoexist;
5973 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5974 pUpdateBeaconParams->llnNonGFCoexist;
5975 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5976 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5977 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5978 pUpdateBeaconParams->fRIFSMode;
5979 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5980 pUpdateBeaconParams->paramChangeBitmap;
5981 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5982
5983 pWdaParams->pWdaContext = pWDA;
5984 /* Store UpdateBeacon Req pointer, as this will be used for response */
5985 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 /* store Params pass it to WDI */
5987 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5989 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5990 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 if(IS_WDI_STATUS_FAILURE(status))
5992 {
5993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5994 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5996 vos_mem_free(pWdaParams->wdaMsgParam);
5997 vos_mem_free(pWdaParams);
5998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000}
Jeff Johnson295189b2012-06-20 16:38:30 -07006001#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006002/*
6003 * FUNCTION: WDA_TSMStatsReqCallback
6004 * send TSM Stats RSP back to PE
6005 */
6006void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6007{
6008 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6009 tWDA_CbContext *pWDA = NULL;
6010 tTSMStats *pTsmRspParams = NULL;
6011
6012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 if(NULL == pWdaParams)
6015 {
6016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_ASSERT(0) ;
6019 return ;
6020 }
6021 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6022 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 if( NULL == pTsmRspParams )
6024 {
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006026 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 VOS_ASSERT( 0 );
6028 return ;
6029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6031 vos_mem_free(pWdaParams);
6032
6033 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6034 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6035 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6036 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6037 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6038 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6039 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6040 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6041 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6042 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 return ;
6045}
6046
6047
Jeff Johnson295189b2012-06-20 16:38:30 -07006048/*
6049 * FUNCTION: WDA_ProcessTsmStatsReq
6050 * Request to WDI to get the TSM Stats params.
6051 */
6052VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
6053 tTSMStats *pTsmStats)
6054{
6055 WDI_Status status = WDI_STATUS_SUCCESS ;
6056 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
6057 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006059 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6061 sizeof(WDI_TSMStatsReqParamsType));
6062 if(NULL == wdiTSMReqParam)
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 return VOS_STATUS_E_NOMEM;
6068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6070 if(NULL == pWdaParams)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_ASSERT(0);
6075 vos_mem_free(wdiTSMReqParam);
6076 return VOS_STATUS_E_NOMEM;
6077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6079 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6080 pTsmStats->bssId,
6081 sizeof(wpt_macAddr));
6082 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6083
6084 pWdaParams->pWdaContext = pWDA;
6085 /* Store TSM Stats pointer, as this will be used for response */
6086 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 /* store Params pass it to WDI */
6088 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 status = WDI_TSMStatsReq(wdiTSMReqParam,
6090 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 if(IS_WDI_STATUS_FAILURE(status))
6092 {
6093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6094 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6096 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006097 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 return CONVERT_WDI2VOS_STATUS(status) ;
6100}
6101#endif
6102/*
6103 * FUNCTION: WDA_SendBeaconParamsCallback
6104 * No need to send any response to PE in this case
6105 */
6106void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6107{
6108
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 return ;
6112}
Jeff Johnson295189b2012-06-20 16:38:30 -07006113/*
6114 * FUNCTION: WDA_ProcessSendBeacon
6115 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6116 * start beacon trasmission
6117 */
6118VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6119 tSendbeaconParams *pSendbeaconParams)
6120{
6121 WDI_Status status = WDI_STATUS_SUCCESS ;
6122 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6126 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6127 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6128 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6130 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306131 /* p2pIeOffset should be atleast greater than timIeOffset */
6132 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6133 (pSendbeaconParams->p2pIeOffset <
6134 pSendbeaconParams->timIeOffset))
6135 {
6136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6137 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6138 VOS_ASSERT( 0 );
6139 return WDI_STATUS_E_FAILURE;
6140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006141 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6142 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 /* Copy the beacon template to local buffer */
6144 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6145 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6146 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6147
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6149 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 if(IS_WDI_STATUS_FAILURE(status))
6151 {
6152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6153 "Failure in SEND BEACON REQ Params WDI API" );
6154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 vos_mem_free(pSendbeaconParams);
6156 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006157}
Jeff Johnson295189b2012-06-20 16:38:30 -07006158/*
6159 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6160 * No need to send any response to PE in this case
6161 */
6162void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6163{
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 return ;
6167}
6168
Jeff Johnson295189b2012-06-20 16:38:30 -07006169/*
6170 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6171 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6172 * send probe response
6173 */
6174VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6175 tSendProbeRespParams *pSendProbeRspParams)
6176{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006177 WDI_Status status = WDI_STATUS_SUCCESS;
6178 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6179 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006181 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006182
6183 if (!wdiSendProbeRspParam)
6184 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6185
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006187 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006189 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 /* Copy the Probe Response template to local buffer */
6192 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006193 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 pSendProbeRspParams->pProbeRespTemplate,
6195 pSendProbeRspParams->probeRespTemplateLen);
6196 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006197 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6199 WDI_PROBE_REQ_BITMAP_IE_LEN);
6200
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006201 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006202
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006203 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(IS_WDI_STATUS_FAILURE(status))
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6208 "Failure in SEND Probe RSP Params WDI API" );
6209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006211 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213}
Jeff Johnson295189b2012-06-20 16:38:30 -07006214#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6215/*
6216 * FUNCTION: WDA_SetMaxTxPowerCallBack
6217 * send the response to PE with power value received from WDI
6218 */
6219void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6220 void* pUserData)
6221{
6222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6223 tWDA_CbContext *pWDA = NULL;
6224 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6225
6226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006227 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 if(NULL == pWdaParams)
6229 {
6230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006231 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 VOS_ASSERT(0) ;
6233 return ;
6234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6236 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 if( NULL == pMaxTxPowerParams )
6238 {
6239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006241 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6243 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 return ;
6245 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006246
Jeff Johnson295189b2012-06-20 16:38:30 -07006247
6248 /*need to free memory for the pointers used in the
6249 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6251 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006253
Jeff Johnson295189b2012-06-20 16:38:30 -07006254
6255 /* send response to UMAC*/
6256 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6257
6258 return;
6259}
Jeff Johnson295189b2012-06-20 16:38:30 -07006260/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006261 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 * Request to WDI to send set Max Tx Power Request
6263 */
6264 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6265 tMaxTxPowerParams *MaxTxPowerParams)
6266{
6267 WDI_Status status = WDI_STATUS_SUCCESS;
6268 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6269 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006270
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006272 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006273
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6275 sizeof(WDI_SetMaxTxPowerParamsType));
6276 if(NULL == wdiSetMaxTxPowerParams)
6277 {
6278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_ASSERT(0);
6281 return VOS_STATUS_E_NOMEM;
6282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6284 if(NULL == pWdaParams)
6285 {
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 vos_mem_free(wdiSetMaxTxPowerParams);
6289 VOS_ASSERT(0);
6290 return VOS_STATUS_E_NOMEM;
6291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 /* Copy.Max.Tx.Power Params to WDI structure */
6293 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6294 MaxTxPowerParams->bssId,
6295 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6297 MaxTxPowerParams->selfStaMacAddr,
6298 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6300 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 pWdaParams->pWdaContext = pWDA;
6303 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 /* store Params pass it to WDI */
6305 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6307 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 if(IS_WDI_STATUS_FAILURE(status))
6309 {
6310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6311 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6313 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006314 /* send response to UMAC*/
6315 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 }
6317 return CONVERT_WDI2VOS_STATUS(status);
6318
6319}
Jeff Johnson295189b2012-06-20 16:38:30 -07006320#endif
schang86c22c42013-03-13 18:41:24 -07006321
6322/*
6323 * FUNCTION: WDA_SetTxPowerCallBack
6324 * send the response to PE with power value received from WDI
6325 */
6326void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6327 void* pUserData)
6328{
6329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6330 tWDA_CbContext *pWDA = NULL;
6331 tSirSetTxPowerReq *pTxPowerParams = NULL;
6332
6333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6334 "<------ %s ", __func__);
6335 if(NULL == pWdaParams)
6336 {
6337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6338 "%s: pWdaParams received NULL", __func__);
6339 VOS_ASSERT(0) ;
6340 return ;
6341 }
6342 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6343 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6344 if(NULL == pTxPowerParams)
6345 {
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6347 "%s: pTxPowerParams received NULL " ,__func__);
6348 VOS_ASSERT(0);
6349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6350 vos_mem_free(pWdaParams);
6351 return ;
6352 }
6353
6354 /*need to free memory for the pointers used in the
6355 WDA Process.Set Max Tx Power Req function*/
6356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6357 vos_mem_free(pWdaParams);
6358
6359 /* send response to UMAC*/
6360 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6361 return;
6362}
6363
6364/*
6365 * FUNCTION: WDA_ProcessSetTxPowerReq
6366 * Request to WDI to send set Tx Power Request
6367 */
6368 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6369 tSirSetTxPowerReq *txPowerParams)
6370{
6371 WDI_Status status = WDI_STATUS_SUCCESS;
6372 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6373 tWDA_ReqParams *pWdaParams = NULL;
6374
6375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6376 "------> %s ", __func__);
6377
6378 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6379 sizeof(WDI_SetTxPowerParamsType));
6380 if(NULL == wdiSetTxPowerParams)
6381 {
6382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6383 "%s: VOS MEM Alloc Failure", __func__);
6384 VOS_ASSERT(0);
6385 return VOS_STATUS_E_NOMEM;
6386 }
6387 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6388 if(NULL == pWdaParams)
6389 {
6390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6391 "%s: VOS MEM Alloc Failure", __func__);
6392 vos_mem_free(wdiSetTxPowerParams);
6393 VOS_ASSERT(0);
6394 return VOS_STATUS_E_NOMEM;
6395 }
6396 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6397 txPowerParams->bssIdx;
6398 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6399 txPowerParams->mwPower;
6400 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6401 pWdaParams->pWdaContext = pWDA;
6402 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6403 /* store Params pass it to WDI */
6404 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6405 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6406 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6407 if(IS_WDI_STATUS_FAILURE(status))
6408 {
6409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6410 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6412 vos_mem_free(pWdaParams);
6413 /* send response to UMAC*/
6414 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6415 }
6416 return CONVERT_WDI2VOS_STATUS(status);
6417}
6418
Jeff Johnson295189b2012-06-20 16:38:30 -07006419/*
6420 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6421 * Free the memory. No need to send any response to PE in this case
6422 */
6423void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6424{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6426
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006428 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006429
6430 if(NULL == pWdaParams)
6431 {
6432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006433 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006434 VOS_ASSERT(0) ;
6435 return ;
6436 }
6437
6438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6439 vos_mem_free(pWdaParams->wdaMsgParam) ;
6440 vos_mem_free(pWdaParams);
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 /*
6443 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6444 * so just free the request param here
6445 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 return ;
6447}
6448
Jeff Johnson295189b2012-06-20 16:38:30 -07006449/*
6450 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6451 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6452 */
6453VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6454 tP2pPsParams *pP2pPsConfigParams)
6455{
6456 WDI_Status status = WDI_STATUS_SUCCESS ;
6457 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6458 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6459 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006460 tWDA_ReqParams *pWdaParams = NULL;
6461
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006463 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 if(NULL == wdiSetP2PGONOAReqParam)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 VOS_ASSERT(0);
6469 return VOS_STATUS_E_NOMEM;
6470 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006471
6472 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6473 if(NULL == pWdaParams)
6474 {
6475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006476 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006477 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006478 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006479 VOS_ASSERT(0);
6480 return VOS_STATUS_E_NOMEM;
6481 }
6482
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6484 pP2pPsConfigParams->opp_ps;
6485 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6486 pP2pPsConfigParams->ctWindow;
6487 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6488 pP2pPsConfigParams->count;
6489 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6490 pP2pPsConfigParams->duration;
6491 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6492 pP2pPsConfigParams->interval;
6493 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6494 pP2pPsConfigParams->single_noa_duration;
6495 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6496 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006497
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6499 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006500 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6501
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006503 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6504 pWdaParams->pWdaContext = pWDA;
6505
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006507 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6508
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 if(IS_WDI_STATUS_FAILURE(status))
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6514 vos_mem_free(pWdaParams->wdaMsgParam);
6515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 return CONVERT_WDI2VOS_STATUS(status);
6518
Jeff Johnson295189b2012-06-20 16:38:30 -07006519}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306520
6521#ifdef FEATURE_WLAN_TDLS
6522/*
6523 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6524 * Free the memory. No need to send any response to PE in this case
6525 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306526void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6527 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306528{
6529 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6530 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306531 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306532
6533
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6535 "<------ %s " ,__func__);
6536 if(NULL == pWdaParams)
6537 {
6538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6539 "%s: pWdaParams received NULL", __func__);
6540 VOS_ASSERT(0) ;
6541 return ;
6542 }
6543 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6544
6545 if(NULL == pWdaParams)
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6548 "%s: pWdaParams received NULL", __func__);
6549 VOS_ASSERT(0) ;
6550 return ;
6551 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306552 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6553 if( NULL == pTdlsLinkEstablishParams )
6554 {
6555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6556 "%s: pTdlsLinkEstablishParams "
6557 "received NULL " ,__func__);
6558 VOS_ASSERT(0);
6559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6560 vos_mem_free(pWdaParams);
6561 return ;
6562 }
6563 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6564 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306566 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306567 /* send response to UMAC*/
6568 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6569
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306570 return ;
6571}
6572
6573VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6574 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6575{
6576 WDI_Status status = WDI_STATUS_SUCCESS ;
6577 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6578 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6579 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6580 tWDA_ReqParams *pWdaParams = NULL;
6581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6582 "------> %s " ,__func__);
6583 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6584 {
6585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6586 "%s: VOS MEM Alloc Failure", __func__);
6587 VOS_ASSERT(0);
6588 return VOS_STATUS_E_NOMEM;
6589 }
6590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6591 if(NULL == pWdaParams)
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6594 "%s: VOS MEM Alloc Failure", __func__);
6595 vos_mem_free(pTdlsLinkEstablishParams);
6596 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6597 VOS_ASSERT(0);
6598 return VOS_STATUS_E_NOMEM;
6599 }
6600 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306601 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306602 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306603 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306604 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306605 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306606 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306607 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306608 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306609 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306610
6611 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6612 /* Store msg pointer from PE, as this will be used for response */
6613 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6614 /* store Params pass it to WDI */
6615 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6616 pWdaParams->pWdaContext = pWDA;
6617
6618 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6619 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6620 WDA_SetTDLSLinkEstablishReqParamsCallback,
6621 pWdaParams);
6622 if(IS_WDI_STATUS_FAILURE(status))
6623 {
6624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6625 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6627 vos_mem_free(pWdaParams->wdaMsgParam);
6628 vos_mem_free(pWdaParams);
6629 }
6630 return CONVERT_WDI2VOS_STATUS(status);
6631}
6632#endif
6633
6634
Jeff Johnson295189b2012-06-20 16:38:30 -07006635#ifdef WLAN_FEATURE_VOWIFI_11R
6636/*
6637 * FUNCTION: WDA_AggrAddTSReqCallback
6638 * send ADD AGGREGATED TS RSP back to PE
6639 */
6640void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6641{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6643 tWDA_CbContext *pWDA;
6644 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006647 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006648 if(NULL == pWdaParams)
6649 {
6650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006651 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006652 VOS_ASSERT(0) ;
6653 return ;
6654 }
6655
6656 pWDA = pWdaParams->pWdaContext;
6657 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006658
6659 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6660 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006661 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006664
6665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6666 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 return ;
6668}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006669/*
6670 * FUNCTION: WDA_ProcessAddTSReq
6671 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6672 */
6673VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6674 tAggrAddTsParams *pAggrAddTsReqParams)
6675{
6676 WDI_Status status = WDI_STATUS_SUCCESS ;
6677 int i;
6678 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006679 tWDA_ReqParams *pWdaParams = NULL;
6680
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6685 sizeof(WDI_AggrAddTSReqParamsType)) ;
6686 if(NULL == wdiAggrAddTSReqParam)
6687 {
6688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 VOS_ASSERT(0);
6691 return VOS_STATUS_E_NOMEM;
6692 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006693
6694
6695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6696 if(NULL == pWdaParams)
6697 {
6698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006699 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006700 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006701 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006702 VOS_ASSERT(0);
6703 return VOS_STATUS_E_NOMEM;
6704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6706 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6707 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6709 {
6710 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6711 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6712 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6714 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6715 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6716 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6717 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6718 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6719 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6720 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6721 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6722 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6723 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6724 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6725 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6726 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6727 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6728 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6730 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6732 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6733 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6734 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6735 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6736 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6737 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6738 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6739 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6740 pAggrAddTsReqParams->tspec[i].inactInterval;
6741 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6742 pAggrAddTsReqParams->tspec[i].suspendInterval;
6743 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6744 pAggrAddTsReqParams->tspec[i].svcStartTime;
6745 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6746 pAggrAddTsReqParams->tspec[i].minDataRate;
6747 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6748 pAggrAddTsReqParams->tspec[i].meanDataRate;
6749 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6750 pAggrAddTsReqParams->tspec[i].peakDataRate;
6751 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6752 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6753 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6754 pAggrAddTsReqParams->tspec[i].delayBound;
6755 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6756 pAggrAddTsReqParams->tspec[i].minPhyRate;
6757 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6758 pAggrAddTsReqParams->tspec[i].surplusBw;
6759 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6760 pAggrAddTsReqParams->tspec[i].mediumTime;
6761 }
6762
6763 /* TODO: tAggrAddTsParams doesn't have the following fields */
6764#if 0
6765 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6766 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6767 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6768 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6769#endif
6770 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6771
6772 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006773 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006775 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6776
6777 pWdaParams->pWdaContext = pWDA;
6778
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006780 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6781
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 if(IS_WDI_STATUS_FAILURE(status))
6783 {
6784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6785 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6787 vos_mem_free(pWdaParams);
6788
6789 /* send the failure response back to PE*/
6790 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6791 {
6792 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6793 }
6794
6795 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6796 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
6799}
6800#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006801/*
6802 * FUNCTION: WDA_EnterImpsReqCallback
6803 * send Enter IMPS RSP back to PE
6804 */
6805void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6806{
6807 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006809 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006810 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 return ;
6812}
Jeff Johnson295189b2012-06-20 16:38:30 -07006813/*
6814 * FUNCTION: WDA_ProcessEnterImpsReq
6815 * Request to WDI to Enter IMPS power state.
6816 */
6817VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6818{
6819 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006821 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 if(IS_WDI_STATUS_FAILURE(status))
6824 {
6825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6826 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006827 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 return CONVERT_WDI2VOS_STATUS(status) ;
6830}
Jeff Johnson295189b2012-06-20 16:38:30 -07006831/*
6832 * FUNCTION: WDA_ExitImpsReqCallback
6833 * send Exit IMPS RSP back to PE
6834 */
6835void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6836{
6837 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006840 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 return ;
6842}
Jeff Johnson295189b2012-06-20 16:38:30 -07006843/*
6844 * FUNCTION: WDA_ProcessExitImpsReq
6845 * Request to WDI to Exit IMPS power state.
6846 */
6847VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6848{
6849 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006851 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 if(IS_WDI_STATUS_FAILURE(status))
6854 {
6855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6856 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006857 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 return CONVERT_WDI2VOS_STATUS(status) ;
6860}
Jeff Johnson295189b2012-06-20 16:38:30 -07006861/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006862 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 * send Enter BMPS RSP back to PE
6864 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006865void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006866{
6867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6868 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006869 tEnterBmpsParams *pEnterBmpsRspParams;
6870
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006872 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if(NULL == pWdaParams)
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 VOS_ASSERT(0) ;
6878 return ;
6879 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006880
6881 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6882 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6883
6884 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006885 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006886
6887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006889 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6890
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 return ;
6892}
Jeff Johnson295189b2012-06-20 16:38:30 -07006893/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006894 * FUNCTION: WDA_EnterBmpsReqCallback
6895 * Free memory and send Enter BMPS RSP back to PE.
6896 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6897 */
6898void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6899{
6900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6901 tWDA_CbContext *pWDA;
6902 tEnterBmpsParams *pEnterBmpsRspParams;
6903
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6905 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6906
6907 if(NULL == pWdaParams)
6908 {
6909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6910 "%s: pWdaParams received NULL", __func__);
6911 VOS_ASSERT(0);
6912 return;
6913 }
6914
6915 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6916 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6917 pEnterBmpsRspParams->status = wdiStatus;
6918
6919 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6920 {
6921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6922 vos_mem_free(pWdaParams);
6923 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6924 }
6925
6926 return;
6927}
6928/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 * FUNCTION: WDA_ProcessEnterBmpsReq
6930 * Request to WDI to Enter BMPS power state.
6931 */
6932VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6933 tEnterBmpsParams *pEnterBmpsReqParams)
6934{
6935 WDI_Status status = WDI_STATUS_SUCCESS;
6936 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6937 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6941 {
6942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006943 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 VOS_ASSERT(0);
6945 return VOS_STATUS_E_FAILURE;
6946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6948 if (NULL == wdiEnterBmpsReqParams)
6949 {
6950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006953 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6954 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 return VOS_STATUS_E_NOMEM;
6956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6958 if (NULL == pWdaParams)
6959 {
6960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 VOS_ASSERT(0);
6963 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006964 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6965 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 return VOS_STATUS_E_NOMEM;
6967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006968 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6969 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6970 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6971 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 // For CCX and 11R Roaming
6973 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6974 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6975 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006976 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6977 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006978
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 /* Store param pointer as passed in by caller */
6980 /* store Params pass it to WDI */
6981 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006982 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006985 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 if (IS_WDI_STATUS_FAILURE(status))
6987 {
6988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6989 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006991 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006993 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 return CONVERT_WDI2VOS_STATUS(status);
6996}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006997
6998
6999static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7000 WDI_Status wdiStatus,
7001 tExitBmpsParams *pExitBmpsReqParams)
7002{
7003 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7004
7005 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7006}
7007
7008
Jeff Johnson295189b2012-06-20 16:38:30 -07007009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007010 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 * send Exit BMPS RSP back to PE
7012 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007013void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007014{
7015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7016 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007017 tExitBmpsParams *pExitBmpsRspParams;
7018
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007020 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 if(NULL == pWdaParams)
7022 {
7023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007024 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_ASSERT(0) ;
7026 return ;
7027 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007028
7029 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7030 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7031
7032 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007033 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7036 vos_mem_free(pWdaParams) ;
7037
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007038 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 return ;
7040}
Jeff Johnson295189b2012-06-20 16:38:30 -07007041/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007042 * FUNCTION: WDA_ExitBmpsReqCallback
7043 * Free memory and send Exit BMPS RSP back to PE.
7044 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7045 */
7046void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7047{
7048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7049 tWDA_CbContext *pWDA;
7050 tExitBmpsParams *pExitBmpsRspParams;
7051
7052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7053 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7054
7055 if(NULL == pWdaParams)
7056 {
7057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7058 "%s: pWdaParams received NULL", __func__);
7059 VOS_ASSERT(0);
7060 return;
7061 }
7062
7063 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7064 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7065 pExitBmpsRspParams->status = wdiStatus;
7066
7067 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7068 {
7069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7070 vos_mem_free(pWdaParams);
7071 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7072 }
7073
7074 return;
7075}
7076/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 * FUNCTION: WDA_ProcessExitBmpsReq
7078 * Request to WDI to Exit BMPS power state.
7079 */
7080VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7081 tExitBmpsParams *pExitBmpsReqParams)
7082{
7083 WDI_Status status = WDI_STATUS_SUCCESS ;
7084 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7085 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7086 sizeof(WDI_ExitBmpsReqParamsType)) ;
7087 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007089 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(NULL == wdiExitBmpsReqParams)
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007095 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 return VOS_STATUS_E_NOMEM;
7097 }
7098 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7099 if(NULL == pWdaParams)
7100 {
7101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 VOS_ASSERT(0);
7104 vos_mem_free(wdiExitBmpsReqParams);
7105 return VOS_STATUS_E_NOMEM;
7106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007108
7109 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7110
Yue Ma7f44bbe2013-04-12 11:47:39 -07007111 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7112 wdiExitBmpsReqParams->pUserData = pWdaParams;
7113
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 /* Store param pointer as passed in by caller */
7115 /* store Params pass it to WDI */
7116 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7117 pWdaParams->pWdaContext = pWDA;
7118 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007120 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 if(IS_WDI_STATUS_FAILURE(status))
7122 {
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7124 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7126 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007127 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 return CONVERT_WDI2VOS_STATUS(status) ;
7130}
Jeff Johnson295189b2012-06-20 16:38:30 -07007131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007132 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 * send Enter UAPSD RSP back to PE
7134 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007135void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007136{
7137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7138 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007139 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007141 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 if(NULL == pWdaParams)
7143 {
7144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 VOS_ASSERT(0) ;
7147 return ;
7148 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007149
7150 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7151 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7152
7153 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007154 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007155
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7157 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007158 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 return ;
7160}
Jeff Johnson295189b2012-06-20 16:38:30 -07007161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007162 * FUNCTION: WDA_EnterUapsdReqCallback
7163 * Free memory and send Enter UAPSD RSP back to PE.
7164 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7165 */
7166void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7167{
7168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7169 tWDA_CbContext *pWDA;
7170 tUapsdParams *pEnterUapsdRsqParams;
7171
7172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7173 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7174
7175 if(NULL == pWdaParams)
7176 {
7177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7178 "%s: pWdaParams received NULL", __func__);
7179 VOS_ASSERT(0);
7180 return;
7181 }
7182
7183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7184 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7185 pEnterUapsdRsqParams->status = wdiStatus;
7186
7187 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7188 {
7189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7190 vos_mem_free(pWdaParams);
7191 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7192 }
7193
7194 return;
7195}
7196/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 * FUNCTION: WDA_ProcessEnterUapsdReq
7198 * Request to WDI to Enter UAPSD power state.
7199 */
7200VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7201 tUapsdParams *pEnterUapsdReqParams)
7202{
7203 WDI_Status status = WDI_STATUS_SUCCESS ;
7204 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7205 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7206 sizeof(WDI_EnterUapsdReqParamsType)) ;
7207 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007209 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 if(NULL == wdiEnterUapsdReqParams)
7211 {
7212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007213 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 VOS_ASSERT(0);
7215 return VOS_STATUS_E_NOMEM;
7216 }
7217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7218 if(NULL == pWdaParams)
7219 {
7220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 VOS_ASSERT(0);
7223 vos_mem_free(wdiEnterUapsdReqParams);
7224 return VOS_STATUS_E_NOMEM;
7225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7227 pEnterUapsdReqParams->beDeliveryEnabled;
7228 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7229 pEnterUapsdReqParams->beTriggerEnabled;
7230 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7231 pEnterUapsdReqParams->bkDeliveryEnabled;
7232 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7233 pEnterUapsdReqParams->bkTriggerEnabled;
7234 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7235 pEnterUapsdReqParams->viDeliveryEnabled;
7236 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7237 pEnterUapsdReqParams->viTriggerEnabled;
7238 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7239 pEnterUapsdReqParams->voDeliveryEnabled;
7240 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7241 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007242 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007243
Yue Ma7f44bbe2013-04-12 11:47:39 -07007244 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7245 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007246
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 /* Store param pointer as passed in by caller */
7248 /* store Params pass it to WDI */
7249 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7250 pWdaParams->pWdaContext = pWDA;
7251 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007253 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 if(IS_WDI_STATUS_FAILURE(status))
7255 {
7256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7257 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7258 vos_mem_free(pWdaParams->wdaMsgParam) ;
7259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7260 vos_mem_free(pWdaParams) ;
7261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 return CONVERT_WDI2VOS_STATUS(status) ;
7263}
Jeff Johnson295189b2012-06-20 16:38:30 -07007264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007265 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 * send Exit UAPSD RSP back to PE
7267 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007268void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007269{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007270
7271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7272 tWDA_CbContext *pWDA;
7273 tExitUapsdParams *pExitUapsdRspParams;
7274
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007276 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007277 if(NULL == pWdaParams)
7278 {
7279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007280 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007281 VOS_ASSERT(0);
7282 return;
7283 }
7284
7285 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7286 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7287
7288 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007289 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007290
7291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7292 vos_mem_free(pWdaParams) ;
7293
7294 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 return ;
7296}
Jeff Johnson295189b2012-06-20 16:38:30 -07007297/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007298 * FUNCTION: WDA_ExitUapsdReqCallback
7299 * Free memory and send Exit UAPSD RSP back to PE.
7300 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7301 */
7302void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7303{
7304 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7305 tWDA_CbContext *pWDA;
7306 tExitUapsdParams *pExitUapsdRspParams;
7307
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7309 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7310
7311 if(NULL == pWdaParams)
7312 {
7313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7314 "%s: pWdaParams received NULL", __func__);
7315 VOS_ASSERT(0);
7316 return;
7317 }
7318
7319 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7320 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7321 pExitUapsdRspParams->status = wdiStatus;
7322
7323 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7324 {
7325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7326 vos_mem_free(pWdaParams);
7327 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7328 }
7329
7330 return;
7331}
7332/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 * FUNCTION: WDA_ProcessExitUapsdReq
7334 * Request to WDI to Exit UAPSD power state.
7335 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007336VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7337 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007338{
7339 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007340 tWDA_ReqParams *pWdaParams ;
7341 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7342 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7343 sizeof(WDI_ExitUapsdReqParamsType)) ;
7344
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007346 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007347
7348 if(NULL == wdiExitUapsdReqParams)
7349 {
7350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007351 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007352 VOS_ASSERT(0);
7353 return VOS_STATUS_E_NOMEM;
7354 }
7355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7356 if(NULL == pWdaParams)
7357 {
7358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007359 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007360 VOS_ASSERT(0);
7361 vos_mem_free(wdiExitUapsdReqParams);
7362 return VOS_STATUS_E_NOMEM;
7363 }
7364
7365 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007366 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7367 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007368
7369 /* Store param pointer as passed in by caller */
7370 /* store Params pass it to WDI */
7371 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7372 pWdaParams->pWdaContext = pWDA;
7373 pWdaParams->wdaMsgParam = pExitUapsdParams;
7374
Yue Ma7f44bbe2013-04-12 11:47:39 -07007375 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 if(IS_WDI_STATUS_FAILURE(status))
7377 {
7378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7379 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007380 vos_mem_free(pWdaParams->wdaMsgParam) ;
7381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7382 vos_mem_free(pWdaParams) ;
7383
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 return CONVERT_WDI2VOS_STATUS(status) ;
7386}
7387
Jeff Johnson295189b2012-06-20 16:38:30 -07007388/*
7389 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7390 *
7391 */
7392void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7393{
7394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007396 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 if(NULL == pWdaParams)
7398 {
7399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007400 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 VOS_ASSERT(0) ;
7402 return ;
7403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if( pWdaParams != NULL )
7405 {
7406 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7407 {
7408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7409 }
7410 if( pWdaParams->wdaMsgParam != NULL )
7411 {
7412 vos_mem_free(pWdaParams->wdaMsgParam) ;
7413 }
7414 vos_mem_free(pWdaParams) ;
7415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 return ;
7417}
Jeff Johnson295189b2012-06-20 16:38:30 -07007418/*
7419 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7420 * Request to WDI to set the power save params at start.
7421 */
7422VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7423 tSirPowerSaveCfg *pPowerSaveCfg)
7424{
7425 WDI_Status status = WDI_STATUS_SUCCESS ;
7426 tHalCfg *tlvStruct = NULL ;
7427 tANI_U8 *tlvStructStart = NULL ;
7428 v_PVOID_t *configParam;
7429 tANI_U32 configParamSize;
7430 tANI_U32 *configDataValue;
7431 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7432 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7436 {
7437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007438 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007440 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 return VOS_STATUS_E_FAILURE;
7442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7444 if (NULL == wdiPowerSaveCfg)
7445 {
7446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007449 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 return VOS_STATUS_E_NOMEM;
7451 }
7452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7453 if(NULL == pWdaParams)
7454 {
7455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 VOS_ASSERT(0);
7458 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007459 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 return VOS_STATUS_E_NOMEM;
7461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7463 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 if(NULL == configParam)
7465 {
7466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007468 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 vos_mem_free(pWdaParams);
7470 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007471 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 return VOS_STATUS_E_NOMEM;
7473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 vos_mem_set(configParam, configParamSize, 0);
7475 wdiPowerSaveCfg->pConfigBuffer = configParam;
7476 tlvStruct = (tHalCfg *)configParam;
7477 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7479 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7480 tlvStruct->length = sizeof(tANI_U32);
7481 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7482 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7484 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7486 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7487 tlvStruct->length = sizeof(tANI_U32);
7488 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7489 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7491 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7493 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7494 tlvStruct->length = sizeof(tANI_U32);
7495 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7496 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7498 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7500 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7501 tlvStruct->length = sizeof(tANI_U32);
7502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7503 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7505 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7507 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7508 tlvStruct->length = sizeof(tANI_U32);
7509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7510 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7512 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7514 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7515 tlvStruct->length = sizeof(tANI_U32);
7516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7517 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7519 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7521 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7522 tlvStruct->length = sizeof(tANI_U32);
7523 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7524 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7526 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7528 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7529 tlvStruct->length = sizeof(tANI_U32);
7530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7531 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7532 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7533 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7535 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7536 tlvStruct->length = sizeof(tANI_U32);
7537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7538 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7539 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7540 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7542 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7543 tlvStruct->length = sizeof(tANI_U32);
7544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7545 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7547 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7549 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7550 tlvStruct->length = sizeof(tANI_U32);
7551 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7552 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7554 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007557 /* store Params pass it to WDI */
7558 pWdaParams->wdaMsgParam = configParam;
7559 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7560 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7562 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 if(IS_WDI_STATUS_FAILURE(status))
7564 {
7565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7566 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7567 vos_mem_free(pWdaParams->wdaMsgParam);
7568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7569 vos_mem_free(pWdaParams);
7570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 return CONVERT_WDI2VOS_STATUS(status);
7573}
Jeff Johnson295189b2012-06-20 16:38:30 -07007574/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007575 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 *
7577 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007578void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007579{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7581
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007583 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007584
7585 if(NULL == pWdaParams)
7586 {
7587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7588 "%s: pWdaParams received NULL", __func__);
7589 VOS_ASSERT(0);
7590 return ;
7591 }
7592
7593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 vos_mem_free(pWdaParams);
7595
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 return ;
7597}
Jeff Johnson295189b2012-06-20 16:38:30 -07007598/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007599 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7600 * Free memory.
7601 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7602 */
7603void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7604{
7605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7606
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7608 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7609
7610 if(NULL == pWdaParams)
7611 {
7612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7613 "%s: pWdaParams received NULL", __func__);
7614 VOS_ASSERT(0);
7615 return;
7616 }
7617
7618 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7619 {
7620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7621 vos_mem_free(pWdaParams);
7622 }
7623
7624 return;
7625}
7626/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 * FUNCTION: WDA_SetUapsdAcParamsReq
7628 * Request to WDI to set the UAPSD params for an ac (sta mode).
7629 */
7630VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7631 tUapsdInfo *pUapsdInfo)
7632{
7633 WDI_Status status = WDI_STATUS_SUCCESS;
7634 tWDA_CbContext *pWDA = NULL ;
7635 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7636 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7637 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7638 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(NULL == wdiUapsdParams)
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 VOS_ASSERT(0);
7646 return VOS_STATUS_E_NOMEM;
7647 }
7648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7649 if(NULL == pWdaParams)
7650 {
7651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 VOS_ASSERT(0);
7654 vos_mem_free(wdiUapsdParams);
7655 return VOS_STATUS_E_NOMEM;
7656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7658 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7659 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7660 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7661 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7662 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007663 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7664 wdiUapsdParams->pUserData = pWdaParams;
7665
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 pWdaParams->pWdaContext = pWDA;
7668 /* Store param pointer as passed in by caller */
7669 pWdaParams->wdaMsgParam = pUapsdInfo;
7670 /* store Params pass it to WDI */
7671 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007673 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 if(IS_WDI_STATUS_FAILURE(status))
7676 {
7677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7678 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7680 vos_mem_free(pWdaParams);
7681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7683 return VOS_STATUS_SUCCESS;
7684 else
7685 return VOS_STATUS_E_FAILURE;
7686
Jeff Johnson295189b2012-06-20 16:38:30 -07007687}
7688/*
7689 * FUNCTION: WDA_ClearUapsdAcParamsReq
7690 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7691 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7692 * and again enter the UPASD with the modified params. Hence the disable
7693 * function was kept empty.
7694 *
7695 */
7696VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7697{
7698 /* do nothing */
7699 return VOS_STATUS_SUCCESS;
7700}
Jeff Johnson295189b2012-06-20 16:38:30 -07007701/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007702 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 *
7704 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007705void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007706{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7708
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007710 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007711
7712 if(NULL == pWdaParams)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007715 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007716 VOS_ASSERT(0) ;
7717 return ;
7718 }
7719
7720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7721 vos_mem_free(pWdaParams->wdaMsgParam);
7722 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007723
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 //print a msg, nothing else to do
7725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007726 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 return ;
7728}
Jeff Johnson295189b2012-06-20 16:38:30 -07007729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007730 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7731 * Free memory.
7732 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7733 */
7734void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7735{
7736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7737
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7739 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7740
7741 if(NULL == pWdaParams)
7742 {
7743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7744 "%s: pWdaParams received NULL", __func__);
7745 VOS_ASSERT(0);
7746 return;
7747 }
7748
7749 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7750 {
7751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7752 vos_mem_free(pWdaParams->wdaMsgParam);
7753 vos_mem_free(pWdaParams);
7754 }
7755
7756 return;
7757}
7758/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 * FUNCTION: WDA_UpdateUapsdParamsReq
7760 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7761 */
7762VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7763 tUpdateUapsdParams* pUpdateUapsdInfo)
7764{
7765 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007766 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7768 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7769 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007770 tWDA_ReqParams *pWdaParams = NULL;
7771
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007773 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 if(NULL == wdiUpdateUapsdParams)
7775 {
7776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 VOS_ASSERT(0);
7779 return VOS_STATUS_E_NOMEM;
7780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7782 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7783 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007784 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7785 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007786
7787 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7788 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 {
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007793 vos_mem_free(pUpdateUapsdInfo);
7794 vos_mem_free(wdiUpdateUapsdParams);
7795 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007798 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7801 pWdaParams->pWdaContext = pWDA;
7802
Jeff Johnson43971f52012-07-17 12:26:56 -07007803 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007804 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007805 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007806
Jeff Johnson43971f52012-07-17 12:26:56 -07007807 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 {
7809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7810 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007811 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7813 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007814 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007816 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817}
Jeff Johnson295189b2012-06-20 16:38:30 -07007818/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007819 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 *
7821 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007822void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007823{
7824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 if(WDI_STATUS_SUCCESS != wdiStatus)
7828 {
7829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007830 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 if(NULL == pWdaParams)
7833 {
7834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007835 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 VOS_ASSERT(0) ;
7837 return ;
7838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7840 vos_mem_free(pWdaParams->wdaMsgParam);
7841 vos_mem_free(pWdaParams);
7842 return ;
7843}
Jeff Johnson295189b2012-06-20 16:38:30 -07007844/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007845 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7846 * Free memory.
7847 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7848 */
7849void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7850{
7851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7852
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7854 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7855
7856 if(NULL == pWdaParams)
7857 {
7858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7859 "%s: pWdaParams received NULL", __func__);
7860 VOS_ASSERT(0);
7861 return;
7862 }
7863
7864 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7865 {
7866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7867 vos_mem_free(pWdaParams->wdaMsgParam);
7868 vos_mem_free(pWdaParams);
7869 }
7870
7871 return;
7872}
7873/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7875 *
7876 */
7877VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7878 tSirWlanSetRxpFilters *pWlanSuspendParam)
7879{
Jeff Johnson295189b2012-06-20 16:38:30 -07007880 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007881 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7883 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7884 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7885 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007887 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 if(NULL == wdiRxpFilterParams)
7889 {
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 VOS_ASSERT(0);
7893 vos_mem_free(pWlanSuspendParam);
7894 return VOS_STATUS_E_NOMEM;
7895 }
7896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7897 if(NULL == pWdaParams)
7898 {
7899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 VOS_ASSERT(0);
7902 vos_mem_free(wdiRxpFilterParams);
7903 vos_mem_free(pWlanSuspendParam);
7904 return VOS_STATUS_E_NOMEM;
7905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7907 pWlanSuspendParam->setMcstBcstFilter;
7908 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7909 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7910
Yue Ma7f44bbe2013-04-12 11:47:39 -07007911 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7912 wdiRxpFilterParams->pUserData = pWdaParams;
7913
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 pWdaParams->pWdaContext = pWDA;
7915 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7916 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007917 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007918 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007920 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 {
7922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7923 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007924 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7926 vos_mem_free(pWdaParams->wdaMsgParam);
7927 vos_mem_free(pWdaParams);
7928 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007929 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007930}
Jeff Johnson295189b2012-06-20 16:38:30 -07007931/*
7932 * FUNCTION: WDA_WdiIndicationCallback
7933 *
7934 */
7935void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7936 void* pUserData)
7937{
7938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007939 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007940}
Jeff Johnson295189b2012-06-20 16:38:30 -07007941/*
7942 * FUNCTION: WDA_ProcessWlanSuspendInd
7943 *
7944 */
7945VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7946 tSirWlanSuspendParam *pWlanSuspendParam)
7947{
7948 WDI_Status wdiStatus;
7949 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007951 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7953 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7954 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7955 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7958 if(WDI_STATUS_PENDING == wdiStatus)
7959 {
7960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007961 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 }
7963 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7964 {
7965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007966 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 vos_mem_free(pWlanSuspendParam);
7969 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7970}
7971
Chet Lanctot186b5732013-03-18 10:26:30 -07007972#ifdef WLAN_FEATURE_11W
7973/*
7974 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7975 *
7976 */
7977VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7978 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7979{
7980 WDI_Status wdiStatus;
7981 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7983 "------> %s ", __func__);
7984
7985 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7986 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7987 sizeof(tSirMacAddr));
7988
7989 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7990 wdiExclUnencryptParams.pUserData = pWDA;
7991
7992 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7993 if(WDI_STATUS_PENDING == wdiStatus)
7994 {
7995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7996 "Pending received for %s:%d ", __func__, __LINE__ );
7997 }
7998 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7999 {
8000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8001 "Failure in %s:%d ", __func__, __LINE__ );
8002 }
8003 vos_mem_free(pExclUnencryptParam);
8004 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8005}
8006#endif
8007
Jeff Johnson295189b2012-06-20 16:38:30 -07008008/*
8009 * FUNCTION: WDA_ProcessWlanResumeCallback
8010 *
8011 */
8012void WDA_ProcessWlanResumeCallback(
8013 WDI_SuspendResumeRspParamsType *resumeRspParams,
8014 void* pUserData)
8015{
8016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 if(NULL == pWdaParams)
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_ASSERT(0) ;
8024 return ;
8025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8027 {
8028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8032 vos_mem_free(pWdaParams->wdaMsgParam);
8033 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 return ;
8035}
Jeff Johnson295189b2012-06-20 16:38:30 -07008036/*
8037 * FUNCTION: WDA_ProcessWlanResumeReq
8038 *
8039 */
8040VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8041 tSirWlanResumeParam *pWlanResumeParam)
8042{
8043 WDI_Status wdiStatus;
8044 WDI_ResumeParamsType *wdiResumeParams =
8045 (WDI_ResumeParamsType *)vos_mem_malloc(
8046 sizeof(WDI_ResumeParamsType) ) ;
8047 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 if(NULL == wdiResumeParams)
8051 {
8052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 VOS_ASSERT(0);
8055 return VOS_STATUS_E_NOMEM;
8056 }
8057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8058 if(NULL == pWdaParams)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0);
8063 vos_mem_free(wdiResumeParams);
8064 return VOS_STATUS_E_NOMEM;
8065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8067 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 wdiResumeParams->wdiReqStatusCB = NULL;
8070 pWdaParams->wdaMsgParam = pWlanResumeParam;
8071 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8072 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8074 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8075 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8077 {
8078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8079 "Failure in Host Resume REQ WDI API, free all the memory " );
8080 VOS_ASSERT(0);
8081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8082 vos_mem_free(pWdaParams->wdaMsgParam);
8083 vos_mem_free(pWdaParams);
8084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8086}
8087
Jeff Johnson295189b2012-06-20 16:38:30 -07008088/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008089 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 *
8091 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008092void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008093{
8094 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 if(NULL == pWdaParams)
8098 {
8099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 VOS_ASSERT(0) ;
8102 return ;
8103 }
8104
8105 vos_mem_free(pWdaParams->wdaMsgParam) ;
8106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8107 vos_mem_free(pWdaParams) ;
8108 /*
8109 * No respone required for SetBeaconFilter req so just free the request
8110 * param here
8111 */
8112
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 return ;
8114}
Jeff Johnson295189b2012-06-20 16:38:30 -07008115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008116 * FUNCTION: WDA_SetBeaconFilterReqCallback
8117 * Free memory.
8118 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8119 */
8120void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8121{
8122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8123
8124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8125 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8126
8127 if(NULL == pWdaParams)
8128 {
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8130 "%s: pWdaParams received NULL", __func__);
8131 VOS_ASSERT(0);
8132 return;
8133 }
8134
8135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8136 {
8137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8138 vos_mem_free(pWdaParams->wdaMsgParam);
8139 vos_mem_free(pWdaParams);
8140 }
8141
8142 return;
8143}
8144/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 * FUNCTION: WDA_SetBeaconFilterReq
8146 * Request to WDI to send the beacon filtering related information.
8147 */
8148VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8149 tBeaconFilterMsg* pBeaconFilterInfo)
8150{
8151 WDI_Status status = WDI_STATUS_SUCCESS;
8152 tANI_U8 *dstPtr, *srcPtr;
8153 tANI_U8 filterLength;
8154 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8155 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8156 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 if(NULL == wdiBeaconFilterInfo)
8161 {
8162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 VOS_ASSERT(0);
8165 return VOS_STATUS_E_NOMEM;
8166 }
8167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8168 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 VOS_ASSERT(0);
8173 vos_mem_free(wdiBeaconFilterInfo);
8174 return VOS_STATUS_E_NOMEM;
8175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8177 pBeaconFilterInfo->beaconInterval;
8178 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8179 pBeaconFilterInfo->capabilityInfo;
8180 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8181 pBeaconFilterInfo->capabilityMask;
8182 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008183
8184 //Fill the BssIdx
8185 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8186
Jeff Johnson295189b2012-06-20 16:38:30 -07008187 //Fill structure with info contained in the beaconFilterTable
8188 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8189 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8190 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8191 if(WDI_BEACON_FILTER_LEN < filterLength)
8192 {
8193 filterLength = WDI_BEACON_FILTER_LEN;
8194 }
8195 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008196 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8197 wdiBeaconFilterInfo->pUserData = pWdaParams;
8198
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 /* Store param pointer as passed in by caller */
8200 /* store Params pass it to WDI */
8201 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8202 pWdaParams->pWdaContext = pWDA;
8203 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8204
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008206 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 if(IS_WDI_STATUS_FAILURE(status))
8208 {
8209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8210 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8211 vos_mem_free(pWdaParams->wdaMsgParam) ;
8212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8213 vos_mem_free(pWdaParams) ;
8214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 return CONVERT_WDI2VOS_STATUS(status) ;
8216}
Jeff Johnson295189b2012-06-20 16:38:30 -07008217/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008218 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 *
8220 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008221void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008222{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8224
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008226 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008227
8228 if(NULL == pWdaParams)
8229 {
8230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008231 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008232 VOS_ASSERT(0) ;
8233 return ;
8234 }
8235
8236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8237 vos_mem_free(pWdaParams->wdaMsgParam);
8238 vos_mem_free(pWdaParams);
8239
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 //print a msg, nothing else to do
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008242 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 return ;
8244}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008245/*
8246 * FUNCTION: WDA_RemBeaconFilterReqCallback
8247 * Free memory.
8248 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8249 */
8250void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8251{
8252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8253
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8255 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8256
8257 if(NULL == pWdaParams)
8258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8260 "%s: pWdaParams received NULL", __func__);
8261 VOS_ASSERT(0);
8262 return;
8263 }
8264
8265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8266 {
8267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8268 vos_mem_free(pWdaParams->wdaMsgParam);
8269 vos_mem_free(pWdaParams);
8270 }
8271
8272 return;
8273}
Jeff Johnson295189b2012-06-20 16:38:30 -07008274 // TODO: PE does not have this feature for now implemented,
8275 // but the support for removing beacon filter exists between
8276 // HAL and FW. This function can be called whenever PE defines
8277 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008278/*
8279 * FUNCTION: WDA_RemBeaconFilterReq
8280 * Request to WDI to send the removal of beacon filtering related information.
8281 */
8282VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8283 tRemBeaconFilterMsg* pBeaconFilterInfo)
8284{
8285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008286 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8288 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8289 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008290 tWDA_ReqParams *pWdaParams ;
8291
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008293 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 if(NULL == wdiBeaconFilterInfo)
8295 {
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 VOS_ASSERT(0);
8299 return VOS_STATUS_E_NOMEM;
8300 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8302 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 {
8304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008307 vos_mem_free(wdiBeaconFilterInfo);
8308 vos_mem_free(pBeaconFilterInfo);
8309 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008311
8312 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8313 pBeaconFilterInfo->ucIeCount;
8314 //Fill structure with info contained in the ucRemIeId
8315 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8316 pBeaconFilterInfo->ucRemIeId,
8317 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8318 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8319 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008320
8321 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008322 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008324 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8325
8326 pWdaParams->pWdaContext = pWDA;
8327
Jeff Johnson43971f52012-07-17 12:26:56 -07008328 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008329 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008330 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 {
8332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8333 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008334 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8336 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008337 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008339 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008340}
Jeff Johnson295189b2012-06-20 16:38:30 -07008341/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008342 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 *
8344 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008345void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008346{
8347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008349 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 if(NULL == pWdaParams)
8351 {
8352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008353 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 VOS_ASSERT(0) ;
8355 return ;
8356 }
8357
8358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8359 vos_mem_free(pWdaParams) ;
8360
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 return ;
8362}
Jeff Johnson295189b2012-06-20 16:38:30 -07008363/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008364 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8365 * Free memory.
8366 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8367 */
8368void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8369{
8370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8371
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8373 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8374
8375 if(NULL == pWdaParams)
8376 {
8377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8378 "%s: pWdaParams received NULL", __func__);
8379 VOS_ASSERT(0);
8380 return;
8381 }
8382
8383 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8384 {
8385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8386 vos_mem_free(pWdaParams);
8387 }
8388
8389 return;
8390}
8391/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 * FUNCTION: WDA_SetRSSIThresholdsReq
8393 * Request to WDI to set the RSSI thresholds (sta mode).
8394 */
8395VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8396{
8397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008398 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 tWDA_CbContext *pWDA = NULL ;
8400 v_PVOID_t pVosContext = NULL;
8401 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8402 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8403 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8404 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 if(NULL == wdiRSSIThresholdsInfo)
8408 {
8409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 VOS_ASSERT(0);
8412 return VOS_STATUS_E_NOMEM;
8413 }
8414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8415 if(NULL == pWdaParams)
8416 {
8417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 VOS_ASSERT(0);
8420 vos_mem_free(wdiRSSIThresholdsInfo);
8421 return VOS_STATUS_E_NOMEM;
8422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8425 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8426 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8428 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8429 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8431 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8432 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008433 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8434 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8436 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8437
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 /* Store param pointer as passed in by caller */
8439 /* store Params pass it to WDI */
8440 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8441 pWdaParams->pWdaContext = pWDA;
8442 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008443 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008444 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008445 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 {
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8448 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008449 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8451 vos_mem_free(pWdaParams) ;
8452 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008453 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008454
8455}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008456/*
Yue Madb90ac12013-04-04 13:39:13 -07008457 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 *
8459 */
Yue Madb90ac12013-04-04 13:39:13 -07008460void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008461{
8462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8463
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008465 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 if(NULL == pWdaParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008469 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 VOS_ASSERT(0) ;
8471 return ;
8472 }
8473
8474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8475 vos_mem_free(pWdaParams->wdaMsgParam);
8476 vos_mem_free(pWdaParams) ;
8477
8478 //print a msg, nothing else to do
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008480 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 return ;
8482}
Jeff Johnson295189b2012-06-20 16:38:30 -07008483/*
Yue Madb90ac12013-04-04 13:39:13 -07008484 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008485 * Free memory.
8486 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008487 */
8488void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8489{
8490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8491
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8493 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8494
8495 if(NULL == pWdaParams)
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "%s: Invalid pWdaParams pointer", __func__);
8499 VOS_ASSERT(0);
8500 return;
8501 }
8502
8503 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8504 {
8505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8506 vos_mem_free(pWdaParams->wdaMsgParam);
8507 vos_mem_free(pWdaParams);
8508 }
8509
8510 return;
8511}
8512/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 * FUNCTION: WDA_ProcessHostOffloadReq
8514 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8515 * to broadcast traffic (sta mode).
8516 */
8517VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8518 tSirHostOffloadReq *pHostOffloadParams)
8519{
8520 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008521 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8523 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8524 sizeof(WDI_HostOffloadReqParamsType)) ;
8525 tWDA_ReqParams *pWdaParams ;
8526
8527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008528 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008529
8530 if(NULL == wdiHostOffloadInfo)
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 VOS_ASSERT(0);
8535 return VOS_STATUS_E_NOMEM;
8536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8538 if(NULL == pWdaParams)
8539 {
8540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008542 VOS_ASSERT(0);
8543 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008544 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008545 return VOS_STATUS_E_NOMEM;
8546 }
8547
8548 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8549 pHostOffloadParams->offloadType;
8550 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8551 pHostOffloadParams->enableOrDisable;
8552
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008553 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8554 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8555
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8557 {
8558 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8559 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8560 pHostOffloadParams->params.hostIpv4Addr,
8561 4);
8562 break;
8563 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8564 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8565 pHostOffloadParams->params.hostIpv6Addr,
8566 16);
8567 break;
8568 case SIR_IPV6_NS_OFFLOAD:
8569 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8570 pHostOffloadParams->params.hostIpv6Addr,
8571 16);
8572
8573#ifdef WLAN_NS_OFFLOAD
8574 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8575 {
8576 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8577 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8578 16);
8579 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8580 }
8581 else
8582 {
8583 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8584 }
8585
8586 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8587 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8588 16);
8589 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8590 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8591 6);
8592
8593 //Only two are supported so let's go through them without a loop
8594 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8595 {
8596 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8597 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8598 16);
8599 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8600 }
8601 else
8602 {
8603 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8604 }
8605
8606 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8607 {
8608 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8609 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8610 16);
8611 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8612 }
8613 else
8614 {
8615 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8616 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308617 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8618 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 break;
8620#endif //WLAN_NS_OFFLOAD
8621 default:
8622 {
8623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8624 "No Handling for Offload Type %x in WDA "
8625 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8626 //WDA_VOS_ASSERT(0) ;
8627 }
8628 }
Yue Madb90ac12013-04-04 13:39:13 -07008629 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8630 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008631
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008633 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 /* store Params pass it to WDI */
8635 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8636 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008637
Jeff Johnson295189b2012-06-20 16:38:30 -07008638
Jeff Johnson43971f52012-07-17 12:26:56 -07008639 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008640 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641
Jeff Johnson43971f52012-07-17 12:26:56 -07008642 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 {
8644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8645 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008646 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8648 vos_mem_free(pWdaParams->wdaMsgParam);
8649 vos_mem_free(pWdaParams) ;
8650 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008651 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008652
8653}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008654/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008655 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 *
8657 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008658void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008659{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008660 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8661
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008663 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008664
8665 if(NULL == pWdaParams)
8666 {
8667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008668 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008669 VOS_ASSERT(0) ;
8670 return ;
8671 }
8672
8673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8674 vos_mem_free(pWdaParams->wdaMsgParam);
8675 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008676
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 //print a msg, nothing else to do
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008679 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 return ;
8681}
Jeff Johnson295189b2012-06-20 16:38:30 -07008682/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008683 * FUNCTION: WDA_KeepAliveReqCallback
8684 * Free memory.
8685 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8686 */
8687void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8688{
8689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8690
8691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8692 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8693
8694 if(NULL == pWdaParams)
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8697 "%s: pWdaParams received NULL", __func__);
8698 VOS_ASSERT(0);
8699 return;
8700 }
8701
8702 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8703 {
8704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8705 vos_mem_free(pWdaParams->wdaMsgParam);
8706 vos_mem_free(pWdaParams);
8707 }
8708
8709 return;
8710}
8711/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 * FUNCTION: WDA_ProcessKeepAliveReq
8713 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8714 * wakeup due to broadcast traffic (sta mode).
8715 */
8716VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8717 tSirKeepAliveReq *pKeepAliveParams)
8718{
8719 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008720 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8722 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8723 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008724 tWDA_ReqParams *pWdaParams;
8725
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 if(NULL == wdiKeepAliveInfo)
8729 {
8730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008733 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 return VOS_STATUS_E_NOMEM;
8735 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008736
8737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8738 if(NULL == pWdaParams)
8739 {
8740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008741 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008742 VOS_ASSERT(0);
8743 vos_mem_free(wdiKeepAliveInfo);
8744 vos_mem_free(pKeepAliveParams);
8745 return VOS_STATUS_E_NOMEM;
8746 }
8747
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8749 pKeepAliveParams->packetType;
8750 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8751 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008752
8753 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8754 pKeepAliveParams->bssId,
8755 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008756
8757 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8758 {
8759 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8760 pKeepAliveParams->hostIpv4Addr,
8761 SIR_IPV4_ADDR_LEN);
8762 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8763 pKeepAliveParams->destIpv4Addr,
8764 SIR_IPV4_ADDR_LEN);
8765 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8766 pKeepAliveParams->destMacAddr,
8767 SIR_MAC_ADDR_LEN);
8768 }
8769 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8770 {
8771 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8772 SIR_IPV4_ADDR_LEN,
8773 0);
8774 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8775 SIR_IPV4_ADDR_LEN,
8776 0);
8777 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8778 SIR_MAC_ADDR_LEN,
8779 0);
8780 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008781 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8782 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008783
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008785 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008787 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8788 pWdaParams->pWdaContext = pWDA;
8789
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8791 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8792 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8793 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8794 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8796 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8797 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8798 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8799 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8801 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8802 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8803 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8804 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8805 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8806 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8807 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8809 "TimePeriod %d PacketType %d",
8810 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8811 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008812 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008813 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008814
Jeff Johnson43971f52012-07-17 12:26:56 -07008815 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 {
8817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8818 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008819 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8821 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008822 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008824 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008825
8826}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008827/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008828 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 *
8830 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008831void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008832 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8833 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008834{
8835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008837 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 if(NULL == pWdaParams)
8839 {
8840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008841 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 VOS_ASSERT(0) ;
8843 return ;
8844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8846 vos_mem_free(pWdaParams->wdaMsgParam);
8847 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 return ;
8849}
Jeff Johnson295189b2012-06-20 16:38:30 -07008850/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008851 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8852 * Free memory.
8853 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8854 */
8855void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8856{
8857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8858
8859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8860 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8861
8862 if(NULL == pWdaParams)
8863 {
8864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8865 "%s: pWdaParams received NULL", __func__);
8866 VOS_ASSERT(0);
8867 return;
8868 }
8869
8870 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8871 {
8872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8873 vos_mem_free(pWdaParams->wdaMsgParam);
8874 vos_mem_free(pWdaParams);
8875 }
8876
8877 return;
8878}
8879
8880/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8882 * Request to WDI to add WOWL Bcast pattern
8883 */
8884VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8885 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8886{
8887 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008888 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008889 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8890 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8891 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8892 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 if(NULL == wdiWowlAddBcPtrnInfo)
8896 {
8897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 VOS_ASSERT(0);
8900 return VOS_STATUS_E_NOMEM;
8901 }
8902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8903 if(NULL == pWdaParams)
8904 {
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 VOS_ASSERT(0);
8908 vos_mem_free(wdiWowlAddBcPtrnInfo);
8909 return VOS_STATUS_E_NOMEM;
8910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8912 pWowlAddBcPtrnParams->ucPatternId;
8913 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8914 pWowlAddBcPtrnParams->ucPatternByteOffset;
8915 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8916 pWowlAddBcPtrnParams->ucPatternMaskSize;
8917 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8918 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8920 {
8921 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8922 pWowlAddBcPtrnParams->ucPattern,
8923 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8924 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8925 pWowlAddBcPtrnParams->ucPatternMask,
8926 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8927 }
8928 else
8929 {
8930 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8931 pWowlAddBcPtrnParams->ucPattern,
8932 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8933 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8934 pWowlAddBcPtrnParams->ucPatternMask,
8935 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8936
8937 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8938 pWowlAddBcPtrnParams->ucPatternExt,
8939 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8940 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8941 pWowlAddBcPtrnParams->ucPatternMaskExt,
8942 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8943 }
8944
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008945 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8946 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8947
Yue Ma7f44bbe2013-04-12 11:47:39 -07008948 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8949 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 /* Store param pointer as passed in by caller */
8951 /* store Params pass it to WDI */
8952 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8953 pWdaParams->pWdaContext = pWDA;
8954 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008955 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008956 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008957 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8960 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008961 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 vos_mem_free(pWdaParams->wdaMsgParam) ;
8963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8964 vos_mem_free(pWdaParams) ;
8965 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008966 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967
8968}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008969/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008970 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 *
8972 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008973void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008974 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8975 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008976{
8977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 if(NULL == pWdaParams)
8981 {
8982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008983 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 VOS_ASSERT(0) ;
8985 return ;
8986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8988 vos_mem_free(pWdaParams->wdaMsgParam);
8989 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 return ;
8991}
Jeff Johnson295189b2012-06-20 16:38:30 -07008992/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008993 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8994 * Free memory.
8995 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8996 */
8997void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8998{
8999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9000
9001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9002 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9003
9004 if(NULL == pWdaParams)
9005 {
9006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9007 "%s: pWdaParams received NULL", __func__);
9008 VOS_ASSERT(0);
9009 return;
9010 }
9011
9012 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9013 {
9014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9015 vos_mem_free(pWdaParams->wdaMsgParam);
9016 vos_mem_free(pWdaParams);
9017 }
9018
9019 return;
9020}
9021/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9023 * Request to WDI to delete WOWL Bcast pattern
9024 */
9025VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9026 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9027{
9028 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009029 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009030 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9031 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9032 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9033 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 if(NULL == wdiWowlDelBcPtrnInfo)
9037 {
9038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009040 VOS_ASSERT(0);
9041 return VOS_STATUS_E_NOMEM;
9042 }
9043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9044 if(NULL == pWdaParams)
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 VOS_ASSERT(0);
9049 vos_mem_free(wdiWowlDelBcPtrnInfo);
9050 return VOS_STATUS_E_NOMEM;
9051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9053 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009054
9055 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9056 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9057
Yue Ma7f44bbe2013-04-12 11:47:39 -07009058 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9059 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 /* Store param pointer as passed in by caller */
9061 /* store Params pass it to WDI */
9062 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9063 pWdaParams->pWdaContext = pWDA;
9064 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009065 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009066 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009067 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 {
9069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9070 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009071 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009072 vos_mem_free(pWdaParams->wdaMsgParam) ;
9073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9074 vos_mem_free(pWdaParams) ;
9075 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009076 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009077
9078}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009080 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 *
9082 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009083void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009084{
9085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9086 tWDA_CbContext *pWDA;
9087 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009089 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 if(NULL == pWdaParams)
9091 {
9092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009093 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 VOS_ASSERT(0) ;
9095 return ;
9096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9098 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9099
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009100 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9101
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9103 vos_mem_free(pWdaParams) ;
9104
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009105 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009106 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 return ;
9109}
Jeff Johnson295189b2012-06-20 16:38:30 -07009110/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009111 * FUNCTION: WDA_WowlEnterReqCallback
9112 * Free memory and send WOWL Enter RSP back to PE.
9113 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9114 */
9115void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9116{
9117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9118 tWDA_CbContext *pWDA;
9119 tSirHalWowlEnterParams *pWowlEnterParams;
9120
9121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9122 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9123
9124 if(NULL == pWdaParams)
9125 {
9126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9127 "%s: pWdaParams received NULL", __func__);
9128 VOS_ASSERT(0);
9129 return;
9130 }
9131
9132 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9133 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9134 pWowlEnterParams->status = wdiStatus;
9135
9136 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9137 {
9138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9139 vos_mem_free(pWdaParams);
9140 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9141 }
9142
9143 return;
9144}
9145/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 * FUNCTION: WDA_ProcessWowlEnterReq
9147 * Request to WDI to enter WOWL
9148 */
9149VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9150 tSirHalWowlEnterParams *pWowlEnterParams)
9151{
9152 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009153 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9155 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9156 sizeof(WDI_WowlEnterReqParamsType)) ;
9157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 if(NULL == wdiWowlEnterInfo)
9161 {
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 VOS_ASSERT(0);
9165 return VOS_STATUS_E_NOMEM;
9166 }
9167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9168 if(NULL == pWdaParams)
9169 {
9170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 VOS_ASSERT(0);
9173 vos_mem_free(wdiWowlEnterInfo);
9174 return VOS_STATUS_E_NOMEM;
9175 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009176
9177 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9178
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9180 pWowlEnterParams->magicPtrn,
9181 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9183 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9185 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9187 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9189 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9191 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9193 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9195 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9197 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009198#ifdef WLAN_WAKEUP_EVENTS
9199 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9200 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9201
9202 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9203 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9204
9205 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9206 pWowlEnterParams->ucWowNetScanOffloadMatch;
9207
9208 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9209 pWowlEnterParams->ucWowGTKRekeyError;
9210
9211 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9212 pWowlEnterParams->ucWoWBSSConnLoss;
9213#endif // WLAN_WAKEUP_EVENTS
9214
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009215 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9216 pWowlEnterParams->bssIdx;
9217
Yue Ma7f44bbe2013-04-12 11:47:39 -07009218 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9219 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 /* Store param pointer as passed in by caller */
9221 /* store Params pass it to WDI */
9222 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9223 pWdaParams->pWdaContext = pWDA;
9224 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009225 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009226 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009227 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 {
9229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9230 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009231 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009232 vos_mem_free(pWdaParams->wdaMsgParam) ;
9233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9234 vos_mem_free(pWdaParams) ;
9235 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009236 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009237
9238}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009239/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009240 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 *
9242 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009243void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009244{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9246 tWDA_CbContext *pWDA;
9247 tSirHalWowlExitParams *pWowlExitParams;
9248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009249 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009250 if(NULL == pWdaParams)
9251 {
9252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009253 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009254 VOS_ASSERT(0) ;
9255 return ;
9256 }
9257 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9258 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9259
9260 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009261 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009262
9263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9264 vos_mem_free(pWdaParams) ;
9265
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009267 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009268 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 return ;
9270}
Jeff Johnson295189b2012-06-20 16:38:30 -07009271/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009272 * FUNCTION: WDA_WowlExitReqCallback
9273 * Free memory and send WOWL Exit RSP back to PE.
9274 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9275 */
9276void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9277{
9278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9279 tWDA_CbContext *pWDA;
9280 tSirHalWowlExitParams *pWowlExitParams;
9281
9282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9283 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9284
9285 if(NULL == pWdaParams)
9286 {
9287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9288 "%s: pWdaParams received NULL", __func__);
9289 VOS_ASSERT(0);
9290 return;
9291 }
9292
9293 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9294 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9295 pWowlExitParams->status = wdiStatus;
9296
9297 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9298 {
9299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9300 vos_mem_free(pWdaParams);
9301 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9302 }
9303
9304 return;
9305}
9306/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 * FUNCTION: WDA_ProcessWowlExitReq
9308 * Request to WDI to add WOWL Bcast pattern
9309 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009310VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9311 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009312{
9313 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009314 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009315 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9316 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9317 sizeof(WDI_WowlExitReqParamsType)) ;
9318 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009320 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009321 if(NULL == wdiWowlExitInfo)
9322 {
9323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009324 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009325 VOS_ASSERT(0);
9326 return VOS_STATUS_E_NOMEM;
9327 }
9328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9329 if(NULL == pWdaParams)
9330 {
9331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009332 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009333 VOS_ASSERT(0);
9334 vos_mem_free(wdiWowlExitInfo);
9335 return VOS_STATUS_E_NOMEM;
9336 }
9337
9338 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9339 pWowlExitParams->bssIdx;
9340
Yue Ma7f44bbe2013-04-12 11:47:39 -07009341 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9342 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009343
9344 /* Store param pointer as passed in by caller */
9345 /* store Params pass it to WDI */
9346 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9347 pWdaParams->pWdaContext = pWDA;
9348 pWdaParams->wdaMsgParam = pWowlExitParams;
9349
9350 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009351 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009352
Jeff Johnson43971f52012-07-17 12:26:56 -07009353 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9356 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009357 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9359 vos_mem_free(pWdaParams->wdaMsgParam);
9360 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009361 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009362 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009363}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009364/*
9365 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9366 * Request to WDI to determine whether a given station is capable of
9367 * using HW-based frame translation
9368 */
9369v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9370 tANI_U8 staIdx)
9371{
9372 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9373}
Jeff Johnson295189b2012-06-20 16:38:30 -07009374/*
9375 * FUNCTION: WDA_NvDownloadReqCallback
9376 * send NV Download RSP back to PE
9377 */
9378void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9379 void* pUserData)
9380{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009381
9382 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9383 tWDA_CbContext *pWDA;
9384
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009386 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009387
9388 if(NULL == pWdaParams)
9389 {
9390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009391 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009392 VOS_ASSERT(0) ;
9393 return ;
9394 }
9395
9396 pWDA = pWdaParams->pWdaContext;
9397
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9400 vos_mem_free(pWdaParams);
9401
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 return ;
9404}
Jeff Johnson295189b2012-06-20 16:38:30 -07009405/*
9406 * FUNCTION: WDA_ProcessNvDownloadReq
9407 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9408 */
9409VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9410{
9411 /* Initialize the local Variables*/
9412 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9413 v_VOID_t *pNvBuffer=NULL;
9414 v_SIZE_t bufferSize = 0;
9415 WDI_Status status = WDI_STATUS_E_FAILURE;
9416 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009417 tWDA_ReqParams *pWdaParams ;
9418
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009420 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 if(NULL == pWDA)
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009424 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009425 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 return VOS_STATUS_E_FAILURE;
9427 }
9428
9429 /* Get the NV structure base address and size from VOS */
9430 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9432 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 if(NULL == wdiNvDownloadReqParam)
9434 {
9435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 VOS_ASSERT(0);
9438 return VOS_STATUS_E_NOMEM;
9439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 /* Copy Params to wdiNvDownloadReqParam*/
9441 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9442 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009443
9444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9445 if(NULL == pWdaParams)
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009448 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009449 VOS_ASSERT(0);
9450 vos_mem_free(wdiNvDownloadReqParam);
9451 return VOS_STATUS_E_NOMEM;
9452 }
9453
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009455 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9456 pWdaParams->wdaMsgParam = NULL;
9457 pWdaParams->pWdaContext = pWDA;
9458
9459
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009461
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009463 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9464
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 if(IS_WDI_STATUS_FAILURE(status))
9466 {
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9468 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9470 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009473}
9474/*
9475 * FUNCTION: WDA_FlushAcReqCallback
9476 * send Flush AC RSP back to TL
9477 */
9478void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9479{
9480 vos_msg_t wdaMsg = {0} ;
9481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9482 tFlushACReq *pFlushACReqParams;
9483 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009485 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 if(NULL == pWdaParams)
9487 {
9488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009489 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 VOS_ASSERT(0) ;
9491 return ;
9492 }
9493
9494 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9495 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9496 if(NULL == pFlushACRspParams)
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);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 return ;
9503 }
9504 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9505 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9506 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9507 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9508 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009509 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 vos_mem_free(pWdaParams->wdaMsgParam) ;
9511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9514 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9515 // POST message to TL
9516 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9517
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 return ;
9519}
Jeff Johnson295189b2012-06-20 16:38:30 -07009520/*
9521 * FUNCTION: WDA_ProcessFlushAcReq
9522 * Request to WDI to Update the DELBA REQ params.
9523 */
9524VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9525 tFlushACReq *pFlushAcReqParams)
9526{
9527 WDI_Status status = WDI_STATUS_SUCCESS ;
9528 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9529 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9530 sizeof(WDI_FlushAcReqParamsType)) ;
9531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 if(NULL == wdiFlushAcReqParam)
9533 {
9534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 VOS_ASSERT(0);
9537 return VOS_STATUS_E_NOMEM;
9538 }
9539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9540 if(NULL == pWdaParams)
9541 {
9542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 VOS_ASSERT(0);
9545 vos_mem_free(wdiFlushAcReqParam);
9546 return VOS_STATUS_E_NOMEM;
9547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9551 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9552 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9553 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 /* Store Flush AC pointer, as this will be used for response */
9555 /* store Params pass it to WDI */
9556 pWdaParams->pWdaContext = pWDA;
9557 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9558 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9560 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 if(IS_WDI_STATUS_FAILURE(status))
9562 {
9563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9564 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9565 vos_mem_free(pWdaParams->wdaMsgParam) ;
9566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9567 vos_mem_free(pWdaParams) ;
9568 //TODO: respond to TL with failure
9569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009571}
Jeff Johnson295189b2012-06-20 16:38:30 -07009572/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009573 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 *
9575 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009577{
9578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9579 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009580 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009581
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 if(NULL == pWdaParams)
9585 {
9586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009587 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 VOS_ASSERT(0) ;
9589 return ;
9590 }
9591 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9592 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9593 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9594 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9595 {
9596 pWDA->wdaAmpSessionOn = VOS_FALSE;
9597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 vos_mem_free(pWdaParams->wdaMsgParam) ;
9599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9600 vos_mem_free(pWdaParams) ;
9601 /*
9602 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9603 * param here
9604 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 return ;
9606}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009607/*
9608 * FUNCTION: WDA_BtAmpEventReqCallback
9609 * Free memory.
9610 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9611 */
9612void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9613{
9614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9615 tWDA_CbContext *pWDA;
9616 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009617
Yue Ma7f44bbe2013-04-12 11:47:39 -07009618 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 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9631
9632 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9633 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9634 {
9635 pWDA->wdaAmpSessionOn = VOS_FALSE;
9636 }
9637
9638 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9639 {
9640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9641 vos_mem_free(pWdaParams->wdaMsgParam);
9642 vos_mem_free(pWdaParams);
9643 }
9644
9645 return;
9646}
Jeff Johnson295189b2012-06-20 16:38:30 -07009647/*
9648 * FUNCTION: WDA_ProcessBtAmpEventReq
9649 * Request to WDI to Update with BT AMP events.
9650 */
9651VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9652 tSmeBtAmpEvent *pBtAmpEventParams)
9653{
9654 WDI_Status status = WDI_STATUS_SUCCESS ;
9655 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9656 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9657 sizeof(WDI_BtAmpEventParamsType)) ;
9658 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 if(NULL == wdiBtAmpEventParam)
9662 {
9663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 VOS_ASSERT(0);
9666 return VOS_STATUS_E_NOMEM;
9667 }
9668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9669 if(NULL == pWdaParams)
9670 {
9671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009673 VOS_ASSERT(0);
9674 vos_mem_free(wdiBtAmpEventParam);
9675 return VOS_STATUS_E_NOMEM;
9676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9678 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009679 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9680 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009681 /* Store BT AMP event pointer, as this will be used for response */
9682 /* store Params pass it to WDI */
9683 pWdaParams->pWdaContext = pWDA;
9684 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9685 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009687 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 if(IS_WDI_STATUS_FAILURE(status))
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9691 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9692 vos_mem_free(pWdaParams->wdaMsgParam) ;
9693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9694 vos_mem_free(pWdaParams) ;
9695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9697 {
9698 pWDA->wdaAmpSessionOn = VOS_TRUE;
9699 }
9700 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701}
9702
Jeff Johnson295189b2012-06-20 16:38:30 -07009703/*
9704 * FUNCTION: WDA_FTMCommandReqCallback
9705 * Handle FTM CMD response came from HAL
9706 * Route responce to HDD FTM
9707 */
9708void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9709 void *usrData)
9710{
9711 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009712 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9713 {
9714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309715 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 return;
9717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 /* Release Current FTM Command Request */
9719 vos_mem_free(pWDA->wdaFTMCmdReq);
9720 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 /* Post FTM Responce to HDD FTM */
9722 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 return;
9724}
Jeff Johnson295189b2012-06-20 16:38:30 -07009725/*
9726 * FUNCTION: WDA_ProcessFTMCommand
9727 * Send FTM command to WDI
9728 */
9729VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9730 tPttMsgbuffer *pPTTFtmCmd)
9731{
9732 WDI_Status status = WDI_STATUS_SUCCESS;
9733 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 ftmCMDReq = (WDI_FTMCommandReqType *)
9735 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9736 if(NULL == ftmCMDReq)
9737 {
9738 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9739 "WDA FTM Command buffer alloc fail");
9740 return VOS_STATUS_E_NOMEM;
9741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9743 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009744 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 /* Send command to WDI */
9746 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 return status;
9748}
Jeff Johnsone7245742012-09-05 17:12:55 -07009749#ifdef FEATURE_OEM_DATA_SUPPORT
9750/*
9751 * FUNCTION: WDA_StartOemDataReqCallback
9752 *
9753 */
9754void WDA_StartOemDataReqCallback(
9755 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9756 void* pUserData)
9757{
9758 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9760 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009761 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009762
Jeff Johnsone7245742012-09-05 17:12:55 -07009763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009764 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009765
9766 if(NULL == pWdaParams)
9767 {
9768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009769 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009770 VOS_ASSERT(0) ;
9771 return ;
9772 }
9773 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9774
Jeff Johnsone7245742012-09-05 17:12:55 -07009775 if(NULL == pWDA)
9776 {
9777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009778 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009779 VOS_ASSERT(0);
9780 return ;
9781 }
9782
9783 /*
9784 * Allocate memory for response params sent to PE
9785 */
9786 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9787
9788 // Check if memory is allocated for OemdataMeasRsp Params.
9789 if(NULL == pOemDataRspParams)
9790 {
9791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9792 "OEM DATA WDA callback alloc fail");
9793 VOS_ASSERT(0) ;
9794 return;
9795 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009796
Jeff Johnsone7245742012-09-05 17:12:55 -07009797 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9799 vos_mem_free(pWdaParams->wdaMsgParam);
9800 vos_mem_free(pWdaParams) ;
9801
Jeff Johnsone7245742012-09-05 17:12:55 -07009802 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009803 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009804 * Also, here success always means that we have atleast one BSSID.
9805 */
9806 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9807
9808 //enable Tx
9809 status = WDA_ResumeDataTx(pWDA);
9810 if(status != VOS_STATUS_SUCCESS)
9811 {
9812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9813 }
9814 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9815 return ;
9816}
9817/*
9818 * FUNCTION: WDA_ProcessStartOemDataReq
9819 * Send Start Oem Data Req to WDI
9820 */
9821VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9822 tStartOemDataReq *pOemDataReqParams)
9823{
9824 WDI_Status status = WDI_STATUS_SUCCESS;
9825 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009826 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009827
9828 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9829
9830 if(NULL == wdiOemDataReqParams)
9831 {
9832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009834 VOS_ASSERT(0);
9835 return VOS_STATUS_E_NOMEM;
9836 }
9837
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009838 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9839 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9840 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9841 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009842
9843 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9844
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9846 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009847 {
9848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009850 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009851 vos_mem_free(pOemDataReqParams);
9852 VOS_ASSERT(0);
9853 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009854 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009855
Bernald44a1ae2013-01-09 08:30:39 -08009856 pWdaParams->pWdaContext = (void*)pWDA;
9857 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9858 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009859
9860 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9861 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009862
9863 if(IS_WDI_STATUS_FAILURE(status))
9864 {
9865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9866 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9868 vos_mem_free(pWdaParams->wdaMsgParam);
9869 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009870 }
9871 return CONVERT_WDI2VOS_STATUS(status) ;
9872}
9873#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009874/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009875 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 *
9877 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009878void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009879{
9880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009882 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 if(NULL == pWdaParams)
9884 {
9885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009886 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 VOS_ASSERT(0) ;
9888 return ;
9889 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009890
9891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9892 vos_mem_free(pWdaParams->wdaMsgParam);
9893 vos_mem_free(pWdaParams);
9894
9895 return ;
9896}
9897/*
9898 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9899 * Free memory.
9900 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9901 */
9902void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9903{
9904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9905
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9907 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9908
9909 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9912 "%s: pWdaParams received NULL", __func__);
9913 VOS_ASSERT(0);
9914 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009916
9917 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 {
9919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009920 vos_mem_free(pWdaParams->wdaMsgParam);
9921 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009923
9924 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009925}
Jeff Johnson295189b2012-06-20 16:38:30 -07009926#ifdef WLAN_FEATURE_GTK_OFFLOAD
9927/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009928 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 *
9930 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009931void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009932 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009933{
9934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9935
9936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009937 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009938
9939 VOS_ASSERT(NULL != pWdaParams);
9940
9941 vos_mem_free(pWdaParams->wdaMsgParam) ;
9942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9943 vos_mem_free(pWdaParams) ;
9944
9945 //print a msg, nothing else to do
9946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009947 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009948
9949 return ;
9950}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009951/*
9952 * FUNCTION: WDA_GTKOffloadReqCallback
9953 * Free memory.
9954 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9955 */
9956void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9957{
9958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009959
Yue Ma7f44bbe2013-04-12 11:47:39 -07009960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9961 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9962
9963 if(NULL == pWdaParams)
9964 {
9965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9966 "%s: pWdaParams received NULL", __func__);
9967 VOS_ASSERT(0);
9968 return;
9969 }
9970
9971 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9972 {
9973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9974 vos_mem_free(pWdaParams->wdaMsgParam);
9975 vos_mem_free(pWdaParams);
9976 }
9977
9978 return;
9979}
Jeff Johnson295189b2012-06-20 16:38:30 -07009980/*
9981 * FUNCTION: WDA_ProcessGTKOffloadReq
9982 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9983 * to broadcast traffic (sta mode).
9984 */
9985VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9986 tpSirGtkOffloadParams pGtkOffloadParams)
9987{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309988 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9990 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9991 sizeof(WDI_GtkOffloadReqMsg)) ;
9992 tWDA_ReqParams *pWdaParams ;
9993
9994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009996
9997 if(NULL == wdiGtkOffloadReqMsg)
9998 {
9999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 VOS_ASSERT(0);
10002 return VOS_STATUS_E_NOMEM;
10003 }
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(wdiGtkOffloadReqMsg);
10012 return VOS_STATUS_E_NOMEM;
10013 }
10014
10015 //
10016 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10017 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010018
10019 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010020 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010021
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10023 // Copy KCK
10024 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10025 // Copy KEK
10026 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10027 // Copy KeyReplayCounter
10028 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10029 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10030
Yue Ma7f44bbe2013-04-12 11:47:39 -070010031 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10032 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033
Jeff Johnson295189b2012-06-20 16:38:30 -070010034
10035 /* Store Params pass it to WDI */
10036 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10037 pWdaParams->pWdaContext = pWDA;
10038 /* Store param pointer as passed in by caller */
10039 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10040
Yue Ma7f44bbe2013-04-12 11:47:39 -070010041 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042
10043 if(IS_WDI_STATUS_FAILURE(status))
10044 {
10045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10046 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10048 vos_mem_free(pWdaParams->wdaMsgParam);
10049 vos_mem_free(pWdaParams);
10050 }
10051
10052 return CONVERT_WDI2VOS_STATUS(status) ;
10053}
10054
10055/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010056 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 *
10058 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010059void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010060 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010061{
10062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10063 tWDA_CbContext *pWDA;
10064 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010065 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 vos_msg_t vosMsg;
10067
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010070
10071 VOS_ASSERT(NULL != pWdaParams);
10072
10073 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10074 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10075
10076 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10077 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10078
10079 /* Message Header */
10080 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010081 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010082
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010083 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10084 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10085 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10086 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10087 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010089 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10090 pwdiGtkOffloadGetInfoRsparams->bssId,
10091 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 /* VOS message wrapper */
10093 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10094 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10095 vosMsg.bodyval = 0;
10096
10097 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10098 {
10099 /* free the mem and return */
10100 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10101 }
10102
10103 vos_mem_free(pWdaParams->wdaMsgParam) ;
10104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10105 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010106
10107 return;
10108}
10109/*
10110 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10111 * Free memory and send RSP back to SME.
10112 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10113 */
10114void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10115{
10116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10117 vos_msg_t vosMsg;
10118
10119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10120 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10121
10122 if(NULL == pWdaParams)
10123 {
10124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10125 "%s: pWdaParams received NULL", __func__);
10126 VOS_ASSERT(0);
10127 return;
10128 }
10129
10130 /* VOS message wrapper */
10131 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10132 vosMsg.bodyptr = NULL;
10133 vosMsg.bodyval = 0;
10134
10135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10136 {
10137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10138 vos_mem_free(pWdaParams->wdaMsgParam);
10139 vos_mem_free(pWdaParams);
10140 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10141 }
10142
10143 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010144}
10145#endif
10146
10147/*
10148 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10149 * Request to WDI to set Tx Per Tracking configurations
10150 */
10151VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10152{
10153 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010154 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10156 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10157 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10158 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010160 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 if(NULL == pwdiSetTxPerTrackingReqParams)
10162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010165 vos_mem_free(pTxPerTrackingParams);
10166 VOS_ASSERT(0);
10167 return VOS_STATUS_E_NOMEM;
10168 }
10169 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10170 if(NULL == pWdaParams)
10171 {
10172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10175 vos_mem_free(pTxPerTrackingParams);
10176 VOS_ASSERT(0);
10177 return VOS_STATUS_E_NOMEM;
10178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10180 pTxPerTrackingParams->ucTxPerTrackingEnable;
10181 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10182 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10183 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10184 pTxPerTrackingParams->ucTxPerTrackingRatio;
10185 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10186 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010187 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10188 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 /* Store param pointer as passed in by caller */
10190 /* store Params pass it to WDI
10191 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10192 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10193 pWdaParams->pWdaContext = pWDA;
10194 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010195 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010196 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010197 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 {
10199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10200 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010201 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 vos_mem_free(pWdaParams->wdaMsgParam) ;
10203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10204 vos_mem_free(pWdaParams) ;
10205 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010206 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010207
10208}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010209/*
10210 * FUNCTION: WDA_HALDumpCmdCallback
10211 * Send the VOS complete .
10212 */
10213void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10214 void* pUserData)
10215{
10216 tANI_U8 *buffer = NULL;
10217 tWDA_CbContext *pWDA = NULL;
10218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 if(NULL == pWdaParams)
10220 {
10221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010222 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 VOS_ASSERT(0) ;
10224 return ;
10225 }
10226
10227 pWDA = pWdaParams->pWdaContext;
10228 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if(wdiRspParams->usBufferLen > 0)
10230 {
10231 /*Copy the Resp data to UMAC supplied buffer*/
10232 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10235 vos_mem_free(pWdaParams);
10236
10237 /* Indicate VOSS about the start complete */
10238 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 return ;
10240}
10241
Jeff Johnson295189b2012-06-20 16:38:30 -070010242/*
10243 * FUNCTION: WDA_ProcessHALDumpCmdReq
10244 * Send Dump command to WDI
10245 */
10246VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10247 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10248 tANI_U32 arg4, tANI_U8 *pBuffer)
10249{
10250 WDI_Status status = WDI_STATUS_SUCCESS;
10251 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10252 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10253 tWDA_ReqParams *pWdaParams ;
10254 pVosContextType pVosContext = NULL;
10255 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10257 (void *)pMac);
10258
10259 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10260 if(NULL == pWdaParams)
10261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 return VOS_STATUS_E_NOMEM;
10265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 /* Allocate memory WDI request structure*/
10267 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10268 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10269 if(NULL == wdiHALDumpCmdReqParam)
10270 {
10271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10272 "WDA HAL DUMP Command buffer alloc fail");
10273 vos_mem_free(pWdaParams);
10274 return WDI_STATUS_E_FAILURE;
10275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 /* Extract the arguments */
10278 wdiHalDumpCmdInfo->command = cmd;
10279 wdiHalDumpCmdInfo->argument1 = arg1;
10280 wdiHalDumpCmdInfo->argument2 = arg2;
10281 wdiHalDumpCmdInfo->argument3 = arg3;
10282 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10285
10286 /* Response message will be passed through the buffer */
10287 pWdaParams->wdaMsgParam = (void *)pBuffer;
10288
10289 /* store Params pass it to WDI */
10290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 /* Send command to WDI */
10292 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010293 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 if ( vStatus != VOS_STATUS_SUCCESS )
10295 {
10296 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10297 {
10298 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010299 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 }
10301 else
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 }
10306 VOS_ASSERT(0);
10307 }
10308 return status;
10309}
Jeff Johnson295189b2012-06-20 16:38:30 -070010310#ifdef WLAN_FEATURE_GTK_OFFLOAD
10311/*
10312 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10313 * Request to WDI to get GTK Offload Information
10314 */
10315VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10316 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10317{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010318 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10320 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10321 tWDA_ReqParams *pWdaParams ;
10322
10323 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10324 {
10325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 VOS_ASSERT(0);
10328 return VOS_STATUS_E_NOMEM;
10329 }
10330
10331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10332 if(NULL == pWdaParams)
10333 {
10334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 VOS_ASSERT(0);
10337 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10338 return VOS_STATUS_E_NOMEM;
10339 }
10340
Yue Ma7f44bbe2013-04-12 11:47:39 -070010341 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10342 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010343
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 /* Store Params pass it to WDI */
10345 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10346 pWdaParams->pWdaContext = pWDA;
10347 /* Store param pointer as passed in by caller */
10348 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10349
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010350 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010351 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010352
Yue Ma7f44bbe2013-04-12 11:47:39 -070010353 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354
10355 if(IS_WDI_STATUS_FAILURE(status))
10356 {
10357 /* failure returned by WDI API */
10358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10359 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10361 vos_mem_free(pWdaParams) ;
10362 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10363 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10364 }
10365
10366 return CONVERT_WDI2VOS_STATUS(status) ;
10367}
10368#endif // WLAN_FEATURE_GTK_OFFLOAD
10369
10370/*
Yue Mab9c86f42013-08-14 15:59:08 -070010371 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10372 *
10373 */
10374VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10375 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10376{
10377 WDI_Status wdiStatus;
10378 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10379
10380 addPeriodicTxPtrnParams =
10381 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10382
10383 if (NULL == addPeriodicTxPtrnParams)
10384 {
10385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10386 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10387 __func__);
10388
10389 return VOS_STATUS_E_NOMEM;
10390 }
10391
10392 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10393 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10394
10395 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10396 addPeriodicTxPtrnParams->pUserData = pWDA;
10397
10398 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10399
10400 if (WDI_STATUS_PENDING == wdiStatus)
10401 {
10402 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10403 "Pending received for %s:%d", __func__, __LINE__ );
10404 }
10405 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10406 {
10407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10408 "Failure in %s:%d", __func__, __LINE__ );
10409 }
10410
10411 vos_mem_free(addPeriodicTxPtrnParams);
10412
10413 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10414}
10415
10416/*
10417 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10418 *
10419 */
10420VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10421 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10422{
10423 WDI_Status wdiStatus;
10424 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10425
10426 delPeriodicTxPtrnParams =
10427 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10428
10429 if (NULL == delPeriodicTxPtrnParams)
10430 {
10431 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10432 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10433 __func__);
10434
10435 return VOS_STATUS_E_NOMEM;
10436 }
10437
10438 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10439 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10440
10441 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10442 delPeriodicTxPtrnParams->pUserData = pWDA;
10443
10444 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10445
10446 if (WDI_STATUS_PENDING == wdiStatus)
10447 {
10448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10449 "Pending received for %s:%d", __func__, __LINE__ );
10450 }
10451 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10452 {
10453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10454 "Failure in %s:%d", __func__, __LINE__ );
10455 }
10456
10457 vos_mem_free(delPeriodicTxPtrnParams);
10458
10459 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10460}
10461
10462/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 * -------------------------------------------------------------------------
10464 * DATA interface with WDI for Mgmt Frames
10465 * -------------------------------------------------------------------------
10466 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010467/*
10468 * FUNCTION: WDA_TxComplete
10469 * Callback function for the WDA_TxPacket
10470 */
10471VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10472 VOS_STATUS status )
10473{
10474
10475 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10476 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010477 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010478
10479 if(NULL == wdaContext)
10480 {
10481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10482 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010483 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 VOS_ASSERT(0);
10485 return VOS_STATUS_E_FAILURE;
10486 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010487
10488 /*Check if frame was timed out or not*/
10489 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10490 (v_PVOID_t)&uUserData);
10491
10492 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10493 {
10494 /*Discard frame - no further processing is needed*/
10495 vos_pkt_return_packet(pData);
10496 return VOS_STATUS_SUCCESS;
10497 }
10498
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10500 if( NULL!=wdaContext->pTxCbFunc)
10501 {
10502 /*check if packet is freed already*/
10503 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10504 {
10505 wdaContext->pTxCbFunc(pMac, pData);
10506 }
10507 else
10508 {
10509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010510 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010511 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 //Return from here since we reaching here because the packet already timeout
10513 return status;
10514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 }
10516
10517 /*
10518 * Trigger the event to bring the HAL TL Tx complete function to come
10519 * out of wait
10520 * Let the coe above to complete the packet first. When this event is set,
10521 * the thread waiting for the event may run and set Vospacket_freed causing the original
10522 * packet not being freed.
10523 */
10524 status = vos_event_set(&wdaContext->txFrameEvent);
10525 if(!VOS_IS_STATUS_SUCCESS(status))
10526 {
10527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10528 "NEW VOS Event Set failed - status = %d \n", status);
10529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 return status;
10531}
Jeff Johnson295189b2012-06-20 16:38:30 -070010532/*
10533 * FUNCTION: WDA_TxPacket
10534 * Forward TX management frame to WDI
10535 */
10536VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10537 void *pFrmBuf,
10538 tANI_U16 frmLen,
10539 eFrameType frmType,
10540 eFrameTxDir txDir,
10541 tANI_U8 tid,
10542 pWDATxRxCompFunc pCompFunc,
10543 void *pData,
10544 pWDAAckFnTxComp pAckTxComp,
10545 tANI_U8 txFlag)
10546{
10547 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10548 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10549 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10550 tANI_U8 eventIdx = 0;
10551 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10552 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010553 if((NULL == pWDA)||(NULL == pFrmBuf))
10554 {
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010556 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010557 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 VOS_ASSERT(0);
10559 return VOS_STATUS_E_FAILURE;
10560 }
10561
10562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010563 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010564 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10565 if(NULL == pMac)
10566 {
10567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010568 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 VOS_ASSERT(0);
10570 return VOS_STATUS_E_FAILURE;
10571 }
10572
10573
10574
10575 /* store the call back function in WDA context */
10576 pWDA->pTxCbFunc = pCompFunc;
10577 /* store the call back for the function of ackTxComplete */
10578 if( pAckTxComp )
10579 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010580 if( NULL != pWDA->pAckTxCbFunc )
10581 {
10582 /* Already TxComp is active no need to active again */
10583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10584 "There is already one request pending for tx complete\n");
10585 pWDA->pAckTxCbFunc( pMac, 0);
10586 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010587
Jeff Johnsone7245742012-09-05 17:12:55 -070010588 if( VOS_STATUS_SUCCESS !=
10589 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10590 {
10591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10592 "Tx Complete timeout Timer Stop Failed ");
10593 }
10594 else
10595 {
10596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010597 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010598 }
10599 }
10600
10601 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10602 pWDA->pAckTxCbFunc = pAckTxComp;
10603 if( VOS_STATUS_SUCCESS !=
10604 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10607 "Tx Complete Timer Start Failed ");
10608 pWDA->pAckTxCbFunc = NULL;
10609 return eHAL_STATUS_FAILURE;
10610 }
10611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 /* Reset the event to be not signalled */
10613 status = vos_event_reset(&pWDA->txFrameEvent);
10614 if(!VOS_IS_STATUS_SUCCESS(status))
10615 {
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10617 "VOS Event reset failed - status = %d\n",status);
10618 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10619 if( pAckTxComp )
10620 {
10621 pWDA->pAckTxCbFunc = NULL;
10622 if( VOS_STATUS_SUCCESS !=
10623 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10626 "Tx Complete timeout Timer Stop Failed ");
10627 }
10628 }
10629 return VOS_STATUS_E_FAILURE;
10630 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010631
10632 /* If Peer Sta mask is set don't overwrite to self sta */
10633 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010635 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010636 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010637 else
10638 {
Ganesh K08bce952012-12-13 15:04:41 -080010639 /* Get system role, use the self station if in unknown role or STA role */
10640 systemRole = wdaGetGlobalSystemRole(pMac);
10641 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10642 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010643#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010644 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010645#endif
Ganesh K08bce952012-12-13 15:04:41 -080010646 ))
10647 {
10648 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10649 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010650 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010651
Jeff Johnsone7245742012-09-05 17:12:55 -070010652 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10653 disassoc frame reaches the HW, HAL has already deleted the peer station */
10654 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010656 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010657 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 /*Send Probe request frames on self sta idx*/
10660 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010661 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 /* Since we donot want probe responses to be retried, send probe responses
10663 through the NO_ACK queues */
10664 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10665 {
10666 //probe response is sent out using self station and no retries options.
10667 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10668 }
10669 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10670 {
10671 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10672 }
10673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10675
10676 /*Set frame tag to 0
10677 We will use the WDA user data in order to tag a frame as expired*/
10678 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10679 (v_PVOID_t)0);
10680
10681
10682 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10683 frmLen, ucTypeSubType, tid,
10684 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10685 {
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10687 "Sending Mgmt Frame failed - status = %d\n", status);
10688 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10689 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10690 if( pAckTxComp )
10691 {
10692 pWDA->pAckTxCbFunc = NULL;
10693 if( VOS_STATUS_SUCCESS !=
10694 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10695 {
10696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10697 "Tx Complete timeout Timer Stop Failed ");
10698 }
10699 }
10700 return VOS_STATUS_E_FAILURE;
10701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 /*
10703 * Wait for the event to be set by the TL, to get the response of TX
10704 * complete, this event should be set by the Callback function called by TL
10705 */
10706 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10707 &eventIdx);
10708 if(!VOS_IS_STATUS_SUCCESS(status))
10709 {
10710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10711 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010712 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10714 after the packet gets completed(packet freed once)*/
10715
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010716 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010717 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010718
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010719 /*Tag Frame as timed out for later deletion*/
10720 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10721 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10722
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 /* check whether the packet was freed already,so need not free again when
10724 * TL calls the WDA_Txcomplete routine
10725 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010726 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10727 /*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 -070010728 {
10729 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010730 } */
10731
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 if( pAckTxComp )
10733 {
10734 pWDA->pAckTxCbFunc = NULL;
10735 if( VOS_STATUS_SUCCESS !=
10736 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10737 {
10738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10739 "Tx Complete timeout Timer Stop Failed ");
10740 }
10741 }
10742 status = VOS_STATUS_E_FAILURE;
10743 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053010744#ifdef WLAN_DUMP_MGMTFRAMES
10745 if (VOS_IS_STATUS_SUCCESS(status))
10746 {
10747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10748 "%s() TX packet : SubType %d", __func__,pFc->subType);
10749 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10750 pData, frmLen);
10751 }
10752#endif
10753
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 return status;
10755}
Jeff Johnson295189b2012-06-20 16:38:30 -070010756/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010757 * FUNCTION: WDA_ProcessDHCPStartInd
10758 * Forward DHCP Start to WDI
10759 */
10760static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10761 tAniDHCPInd *dhcpStartInd)
10762{
10763 WDI_Status status;
10764 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10765 if (NULL == wdiDHCPInd)
10766 {
10767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10768 "%s: VOS MEM Alloc Failure", __func__);
10769 VOS_ASSERT(0);
10770 vos_mem_free(dhcpStartInd);
10771 return VOS_STATUS_E_NOMEM;
10772 }
10773
10774 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10775 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10776 sizeof(tSirMacAddr));
10777
10778 status = WDI_dhcpStartInd(wdiDHCPInd);
10779
10780 if (IS_WDI_STATUS_FAILURE(status))
10781 {
10782 vos_mem_free(wdiDHCPInd);
10783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10784 "DHCP Start Indication failed");
10785 }
10786 vos_mem_free(dhcpStartInd);
10787 return CONVERT_WDI2VOS_STATUS(status) ;
10788}
10789
10790 /*
10791 * FUNCTION: WDA_ProcessDHCPStopInd
10792 * Forward DHCP Stop to WDI
10793 */
10794 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10795 tAniDHCPInd *dhcpStopInd)
10796 {
10797 WDI_Status status;
10798 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10799 if (NULL == wdiDHCPInd)
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10802 "%s: VOS MEM Alloc Failure", __func__);
10803 VOS_ASSERT(0);
10804 vos_mem_free(dhcpStopInd);
10805 return VOS_STATUS_E_NOMEM;
10806 }
10807 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10808 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10809 status = WDI_dhcpStopInd(wdiDHCPInd);
10810 if (IS_WDI_STATUS_FAILURE(status))
10811 {
10812 vos_mem_free(wdiDHCPInd);
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10814 "DHCP Start Indication failed");
10815 }
10816 vos_mem_free(dhcpStopInd);
10817 return CONVERT_WDI2VOS_STATUS(status) ;
10818 }
10819
10820/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 * FUNCTION: WDA_McProcessMsg
10822 * Trigger DAL-AL to start CFG download
10823 */
10824VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10825{
10826 VOS_STATUS status = VOS_STATUS_SUCCESS;
10827 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 if(NULL == pMsg)
10829 {
10830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010831 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 VOS_ASSERT(0);
10833 return VOS_STATUS_E_FAILURE;
10834 }
10835
10836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010837 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010838
10839 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10840 if(NULL == pWDA )
10841 {
10842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010845 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 return VOS_STATUS_E_FAILURE;
10847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 /* Process all the WDA messages.. */
10849 switch( pMsg->type )
10850 {
10851 case WNI_CFG_DNLD_REQ:
10852 {
10853 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010854 /* call WDA complete event if config download success */
10855 if( VOS_IS_STATUS_SUCCESS(status) )
10856 {
10857 vos_WDAComplete_cback(pVosContext);
10858 }
10859 else
10860 {
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10862 "WDA Config Download failure" );
10863 }
10864 break ;
10865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010866 /*
10867 * Init SCAN request from PE, convert it into DAL format
10868 * and send it to DAL
10869 */
10870 case WDA_INIT_SCAN_REQ:
10871 {
10872 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10873 break ;
10874 }
10875 /* start SCAN request from PE */
10876 case WDA_START_SCAN_REQ:
10877 {
10878 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10879 break ;
10880 }
10881 /* end SCAN request from PE */
10882 case WDA_END_SCAN_REQ:
10883 {
10884 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10885 break ;
10886 }
10887 /* end SCAN request from PE */
10888 case WDA_FINISH_SCAN_REQ:
10889 {
10890 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10891 break ;
10892 }
10893 /* join request from PE */
10894 case WDA_CHNL_SWITCH_REQ:
10895 {
10896 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10897 {
10898 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10899 }
10900 else
10901 {
10902 WDA_ProcessChannelSwitchReq(pWDA,
10903 (tSwitchChannelParams*)pMsg->bodyptr) ;
10904 }
10905 break ;
10906 }
10907 /* ADD BSS request from PE */
10908 case WDA_ADD_BSS_REQ:
10909 {
10910 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10911 break ;
10912 }
10913 case WDA_ADD_STA_REQ:
10914 {
10915 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10916 break ;
10917 }
10918 case WDA_DELETE_BSS_REQ:
10919 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10921 break ;
10922 }
10923 case WDA_DELETE_STA_REQ:
10924 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10926 break ;
10927 }
10928 case WDA_CONFIG_PARAM_UPDATE_REQ:
10929 {
10930 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10931 break ;
10932 }
10933 case WDA_SET_BSSKEY_REQ:
10934 {
10935 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10936 break ;
10937 }
10938 case WDA_SET_STAKEY_REQ:
10939 {
10940 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10941 break ;
10942 }
10943 case WDA_SET_STA_BCASTKEY_REQ:
10944 {
10945 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10946 break ;
10947 }
10948 case WDA_REMOVE_BSSKEY_REQ:
10949 {
10950 WDA_ProcessRemoveBssKeyReq(pWDA,
10951 (tRemoveBssKeyParams *)pMsg->bodyptr);
10952 break ;
10953 }
10954 case WDA_REMOVE_STAKEY_REQ:
10955 {
10956 WDA_ProcessRemoveStaKeyReq(pWDA,
10957 (tRemoveStaKeyParams *)pMsg->bodyptr);
10958 break ;
10959 }
10960 case WDA_REMOVE_STA_BCASTKEY_REQ:
10961 {
10962 /* TODO: currently UMAC is not sending this request, Add the code for
10963 handling this request when UMAC supports */
10964 break;
10965 }
10966#ifdef FEATURE_WLAN_CCX
10967 case WDA_TSM_STATS_REQ:
10968 {
10969 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10970 break;
10971 }
10972#endif
10973 case WDA_UPDATE_EDCA_PROFILE_IND:
10974 {
10975 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10976 break;
10977 }
10978 case WDA_ADD_TS_REQ:
10979 {
10980 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10981 break;
10982 }
10983 case WDA_DEL_TS_REQ:
10984 {
10985 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10986 break;
10987 }
10988 case WDA_ADDBA_REQ:
10989 {
10990 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10991 break;
10992 }
10993 case WDA_DELBA_IND:
10994 {
10995 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10996 break;
10997 }
10998 case WDA_SET_LINK_STATE:
10999 {
11000 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11001 break;
11002 }
11003 case WDA_GET_STATISTICS_REQ:
11004 {
11005 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11006 break;
11007 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011008#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11009 case WDA_GET_ROAM_RSSI_REQ:
11010 {
11011 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11012 break;
11013 }
11014#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 case WDA_PWR_SAVE_CFG:
11016 {
11017 if(pWDA->wdaState == WDA_READY_STATE)
11018 {
11019 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11020 }
11021 else
11022 {
11023 if(NULL != pMsg->bodyptr)
11024 {
11025 vos_mem_free(pMsg->bodyptr);
11026 }
11027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11028 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11029 }
11030 break;
11031 }
11032 case WDA_ENTER_IMPS_REQ:
11033 {
11034 if(pWDA->wdaState == WDA_READY_STATE)
11035 {
11036 WDA_ProcessEnterImpsReq(pWDA);
11037 }
11038 else
11039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11041 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11042 }
11043 break;
11044 }
11045 case WDA_EXIT_IMPS_REQ:
11046 {
11047 if(pWDA->wdaState == WDA_READY_STATE)
11048 {
11049 WDA_ProcessExitImpsReq(pWDA);
11050 }
11051 else
11052 {
11053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11054 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11055 }
11056 break;
11057 }
11058 case WDA_ENTER_BMPS_REQ:
11059 {
11060 if(pWDA->wdaState == WDA_READY_STATE)
11061 {
11062 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11063 }
11064 else
11065 {
11066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11067 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11068 }
11069 break;
11070 }
11071 case WDA_EXIT_BMPS_REQ:
11072 {
11073 if(pWDA->wdaState == WDA_READY_STATE)
11074 {
11075 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11076 }
11077 else
11078 {
11079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11080 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11081 }
11082 break;
11083 }
11084 case WDA_ENTER_UAPSD_REQ:
11085 {
11086 if(pWDA->wdaState == WDA_READY_STATE)
11087 {
11088 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11089 }
11090 else
11091 {
11092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11093 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11094 }
11095 break;
11096 }
11097 case WDA_EXIT_UAPSD_REQ:
11098 {
11099 if(pWDA->wdaState == WDA_READY_STATE)
11100 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011101 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 }
11103 else
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11106 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11107 }
11108 break;
11109 }
11110 case WDA_UPDATE_UAPSD_IND:
11111 {
11112 if(pWDA->wdaState == WDA_READY_STATE)
11113 {
11114 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11115 }
11116 else
11117 {
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11119 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11120 }
11121 break;
11122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011123 case WDA_REGISTER_PE_CALLBACK :
11124 {
11125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11126 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11127 /*TODO: store the PE callback */
11128 /* Do Nothing? MSG Body should be freed at here */
11129 if(NULL != pMsg->bodyptr)
11130 {
11131 vos_mem_free(pMsg->bodyptr);
11132 }
11133 break;
11134 }
11135 case WDA_SYS_READY_IND :
11136 {
11137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11138 "Handling msg type WDA_SYS_READY_IND " );
11139 pWDA->wdaState = WDA_READY_STATE;
11140 if(NULL != pMsg->bodyptr)
11141 {
11142 vos_mem_free(pMsg->bodyptr);
11143 }
11144 break;
11145 }
11146 case WDA_BEACON_FILTER_IND :
11147 {
11148 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11149 break;
11150 }
11151 case WDA_BTC_SET_CFG:
11152 {
11153 /*TODO: handle this while dealing with BTC */
11154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11155 "Handling msg type WDA_BTC_SET_CFG " );
11156 /* Do Nothing? MSG Body should be freed at here */
11157 if(NULL != pMsg->bodyptr)
11158 {
11159 vos_mem_free(pMsg->bodyptr);
11160 }
11161 break;
11162 }
11163 case WDA_SIGNAL_BT_EVENT:
11164 {
11165 /*TODO: handle this while dealing with BTC */
11166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11167 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11168 /* Do Nothing? MSG Body should be freed at here */
11169 if(NULL != pMsg->bodyptr)
11170 {
11171 vos_mem_free(pMsg->bodyptr);
11172 }
11173 break;
11174 }
11175 case WDA_CFG_RXP_FILTER_REQ:
11176 {
11177 WDA_ProcessConfigureRxpFilterReq(pWDA,
11178 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11179 break;
11180 }
11181 case WDA_SET_HOST_OFFLOAD:
11182 {
11183 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11184 break;
11185 }
11186 case WDA_SET_KEEP_ALIVE:
11187 {
11188 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11189 break;
11190 }
11191#ifdef WLAN_NS_OFFLOAD
11192 case WDA_SET_NS_OFFLOAD:
11193 {
11194 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11195 break;
11196 }
11197#endif //WLAN_NS_OFFLOAD
11198 case WDA_ADD_STA_SELF_REQ:
11199 {
11200 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11201 break;
11202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 case WDA_DEL_STA_SELF_REQ:
11204 {
11205 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11206 break;
11207 }
11208 case WDA_WOWL_ADD_BCAST_PTRN:
11209 {
11210 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11211 break;
11212 }
11213 case WDA_WOWL_DEL_BCAST_PTRN:
11214 {
11215 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11216 break;
11217 }
11218 case WDA_WOWL_ENTER_REQ:
11219 {
11220 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11221 break;
11222 }
11223 case WDA_WOWL_EXIT_REQ:
11224 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011225 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 break;
11227 }
11228 case WDA_TL_FLUSH_AC_REQ:
11229 {
11230 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11231 break;
11232 }
11233 case WDA_SIGNAL_BTAMP_EVENT:
11234 {
11235 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11236 break;
11237 }
11238#ifdef WDA_UT
11239 case WDA_WDI_EVENT_MSG:
11240 {
11241 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11242 break ;
11243 }
11244#endif
11245 case WDA_UPDATE_BEACON_IND:
11246 {
11247 WDA_ProcessUpdateBeaconParams(pWDA,
11248 (tUpdateBeaconParams *)pMsg->bodyptr);
11249 break;
11250 }
11251 case WDA_SEND_BEACON_REQ:
11252 {
11253 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11254 break;
11255 }
11256 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11257 {
11258 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11259 (tSendProbeRespParams *)pMsg->bodyptr);
11260 break;
11261 }
11262#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11263 case WDA_SET_MAX_TX_POWER_REQ:
11264 {
11265 WDA_ProcessSetMaxTxPowerReq(pWDA,
11266 (tMaxTxPowerParams *)pMsg->bodyptr);
11267 break;
11268 }
11269#endif
schang86c22c42013-03-13 18:41:24 -070011270 case WDA_SET_TX_POWER_REQ:
11271 {
11272 WDA_ProcessSetTxPowerReq(pWDA,
11273 (tSirSetTxPowerReq *)pMsg->bodyptr);
11274 break;
11275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 case WDA_SET_P2P_GO_NOA_REQ:
11277 {
11278 WDA_ProcessSetP2PGONOAReq(pWDA,
11279 (tP2pPsParams *)pMsg->bodyptr);
11280 break;
11281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 /* timer related messages */
11283 case WDA_TIMER_BA_ACTIVITY_REQ:
11284 {
11285 WDA_BaCheckActivity(pWDA) ;
11286 break ;
11287 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011288
11289 /* timer related messages */
11290 case WDA_TIMER_TRAFFIC_STATS_IND:
11291 {
11292 WDA_TimerTrafficStatsInd(pWDA);
11293 break;
11294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011295#ifdef WLAN_FEATURE_VOWIFI_11R
11296 case WDA_AGGR_QOS_REQ:
11297 {
11298 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11299 break;
11300 }
11301#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 case WDA_FTM_CMD_REQ:
11303 {
11304 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11305 break ;
11306 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011307#ifdef FEATURE_OEM_DATA_SUPPORT
11308 case WDA_START_OEM_DATA_REQ:
11309 {
11310 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11311 break;
11312 }
11313#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 /* Tx Complete Time out Indication */
11315 case WDA_TX_COMPLETE_TIMEOUT_IND:
11316 {
11317 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11318 break;
11319 }
11320 case WDA_WLAN_SUSPEND_IND:
11321 {
11322 WDA_ProcessWlanSuspendInd(pWDA,
11323 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11324 break;
11325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 case WDA_WLAN_RESUME_REQ:
11327 {
11328 WDA_ProcessWlanResumeReq(pWDA,
11329 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11330 break;
11331 }
11332
11333 case WDA_UPDATE_CF_IND:
11334 {
11335 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11336 pMsg->bodyptr = NULL;
11337 break;
11338 }
11339#ifdef FEATURE_WLAN_SCAN_PNO
11340 case WDA_SET_PNO_REQ:
11341 {
11342 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11343 break;
11344 }
11345 case WDA_UPDATE_SCAN_PARAMS_REQ:
11346 {
11347 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11348 break;
11349 }
11350 case WDA_SET_RSSI_FILTER_REQ:
11351 {
11352 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11353 break;
11354 }
11355#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011356#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011357 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011358 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011359 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011360 break;
11361 }
11362#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 case WDA_SET_TX_PER_TRACKING_REQ:
11364 {
11365 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11366 break;
11367 }
11368
11369#ifdef WLAN_FEATURE_PACKET_FILTERING
11370 case WDA_8023_MULTICAST_LIST_REQ:
11371 {
11372 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11373 break;
11374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11376 {
11377 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11378 break;
11379 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11381 {
11382 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11383 break;
11384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011385 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11386 {
11387 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11388 break;
11389 }
11390#endif // WLAN_FEATURE_PACKET_FILTERING
11391
11392
11393 case WDA_TRANSMISSION_CONTROL_IND:
11394 {
11395 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11396 break;
11397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 case WDA_SET_POWER_PARAMS_REQ:
11399 {
11400 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11401 break;
11402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011403#ifdef WLAN_FEATURE_GTK_OFFLOAD
11404 case WDA_GTK_OFFLOAD_REQ:
11405 {
11406 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11407 break;
11408 }
11409
11410 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11411 {
11412 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11413 break;
11414 }
11415#endif //WLAN_FEATURE_GTK_OFFLOAD
11416
11417 case WDA_SET_TM_LEVEL_REQ:
11418 {
11419 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11420 break;
11421 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011422#ifdef WLAN_FEATURE_11AC
11423 case WDA_UPDATE_OP_MODE:
11424 {
11425 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11426 {
11427 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11428 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11429 else
11430 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11431 " VHT OpMode Feature is Not Supported \n");
11432 }
11433 else
11434 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11435 " 11AC Feature is Not Supported \n");
11436 break;
11437 }
11438#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011439#ifdef WLAN_FEATURE_11W
11440 case WDA_EXCLUDE_UNENCRYPTED_IND:
11441 {
11442 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11443 break;
11444 }
11445#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011446#ifdef FEATURE_WLAN_TDLS
11447 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11448 {
11449 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11450 break;
11451 }
11452#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011453 case WDA_DHCP_START_IND:
11454 {
11455 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11456 break;
11457 }
11458 case WDA_DHCP_STOP_IND:
11459 {
11460 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11461 break;
11462 }
Leo Chang9056f462013-08-01 19:21:11 -070011463#ifdef FEATURE_WLAN_LPHB
11464 case WDA_LPHB_CONF_REQ:
11465 {
11466 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11467 break;
11468 }
11469#endif
Yue Mab9c86f42013-08-14 15:59:08 -070011470 case WDA_ADD_PERIODIC_TX_PTRN_IND:
11471 {
11472 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
11473 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
11474 break;
11475 }
11476 case WDA_DEL_PERIODIC_TX_PTRN_IND:
11477 {
11478 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
11479 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
11480 break;
11481 }
11482
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 default:
11484 {
11485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11486 "No Handling for msg type %x in WDA "
11487 ,pMsg->type);
11488 /* Do Nothing? MSG Body should be freed at here */
11489 if(NULL != pMsg->bodyptr)
11490 {
11491 vos_mem_free(pMsg->bodyptr);
11492 }
11493 //WDA_VOS_ASSERT(0) ;
11494 }
11495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 return status ;
11497}
11498
Jeff Johnson295189b2012-06-20 16:38:30 -070011499/*
11500 * FUNCTION: WDA_LowLevelIndCallback
11501 * IND API callback from WDI, send Ind to PE
11502 */
11503void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11504 void* pUserData )
11505{
11506 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11507#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11508 tSirRSSINotification rssiNotification;
11509#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 if(NULL == pWDA)
11511 {
11512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011513 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 VOS_ASSERT(0);
11515 return ;
11516 }
11517
11518 switch(wdiLowLevelInd->wdiIndicationType)
11519 {
11520 case WDI_RSSI_NOTIFICATION_IND:
11521 {
11522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11523 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011524#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11525 rssiNotification.bReserved =
11526 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11527 rssiNotification.bRssiThres1NegCross =
11528 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11529 rssiNotification.bRssiThres1PosCross =
11530 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11531 rssiNotification.bRssiThres2NegCross =
11532 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11533 rssiNotification.bRssiThres2PosCross =
11534 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11535 rssiNotification.bRssiThres3NegCross =
11536 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11537 rssiNotification.bRssiThres3PosCross =
11538 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011539 rssiNotification.avgRssi = (v_S7_t)
11540 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 WLANTL_BMPSRSSIRegionChangedNotification(
11542 pWDA->pVosContext,
11543 &rssiNotification);
11544#endif
11545 break ;
11546 }
11547 case WDI_MISSED_BEACON_IND:
11548 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011549 tpSirSmeMissedBeaconInd pMissBeacInd =
11550 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11552 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011554 if(NULL == pMissBeacInd)
11555 {
11556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11557 "%s: VOS MEM Alloc Failure", __func__);
11558 break;
11559 }
11560 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11561 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11562 pMissBeacInd->bssIdx =
11563 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11564 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 break ;
11566 }
11567 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11568 {
11569 /* TODO: Decode Ind and send Ind to PE */
11570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11571 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11572 break ;
11573 }
11574
11575 case WDI_MIC_FAILURE_IND:
11576 {
11577 tpSirSmeMicFailureInd pMicInd =
11578 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11579
11580 if(NULL == pMicInd)
11581 {
11582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 break;
11585 }
11586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11587 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11589 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11590 vos_mem_copy(pMicInd->bssId,
11591 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11592 sizeof(tSirMacAddr));
11593 vos_mem_copy(pMicInd->info.srcMacAddr,
11594 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11595 sizeof(tSirMacAddr));
11596 vos_mem_copy(pMicInd->info.taMacAddr,
11597 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11598 sizeof(tSirMacAddr));
11599 vos_mem_copy(pMicInd->info.dstMacAddr,
11600 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11601 sizeof(tSirMacAddr));
11602 vos_mem_copy(pMicInd->info.rxMacAddr,
11603 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11604 sizeof(tSirMacAddr));
11605 pMicInd->info.multicast =
11606 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11607 pMicInd->info.keyId=
11608 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11609 pMicInd->info.IV1=
11610 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11611 vos_mem_copy(pMicInd->info.TSC,
11612 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11614 (void *)pMicInd , 0) ;
11615 break ;
11616 }
11617 case WDI_FATAL_ERROR_IND:
11618 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011619 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 /* TODO: Decode Ind and send Ind to PE */
11621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11622 "Received WDI_FATAL_ERROR_IND from WDI ");
11623 break ;
11624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 case WDI_DEL_STA_IND:
11626 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011627 tpDeleteStaContext pDelSTACtx =
11628 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11629
11630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11631 "Received WDI_DEL_STA_IND from WDI ");
11632 if(NULL == pDelSTACtx)
11633 {
11634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011636 break;
11637 }
11638 vos_mem_copy(pDelSTACtx->addr2,
11639 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11640 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 vos_mem_copy(pDelSTACtx->bssId,
11642 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11643 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011644 pDelSTACtx->assocId =
11645 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11646 pDelSTACtx->reasonCode =
11647 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11648 pDelSTACtx->staId =
11649 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11651 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011652 break ;
11653 }
11654 case WDI_COEX_IND:
11655 {
11656 tANI_U32 index;
11657 vos_msg_t vosMsg;
11658 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11659 if(NULL == pSmeCoexInd)
11660 {
11661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011662 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 break;
11664 }
11665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11666 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 /* Message Header */
11668 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11669 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 /* Info from WDI Indication */
11671 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11672 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11673 {
11674 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 /* VOS message wrapper */
11677 vosMsg.type = eWNI_SME_COEX_IND;
11678 vosMsg.bodyptr = (void *)pSmeCoexInd;
11679 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 /* Send message to SME */
11681 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11682 {
11683 /* free the mem and return */
11684 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11685 }
11686 else
11687 {
11688 /* DEBUG */
11689 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11690 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11691 pSmeCoexInd->coexIndType,
11692 pSmeCoexInd->coexIndData[0],
11693 pSmeCoexInd->coexIndData[1],
11694 pSmeCoexInd->coexIndData[2],
11695 pSmeCoexInd->coexIndData[3]);
11696 }
11697 break;
11698 }
11699 case WDI_TX_COMPLETE_IND:
11700 {
11701 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11702 /* Calling TxCompleteAck Indication from wda context*/
11703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11704 "Complete Indication received from HAL");
11705 if( pWDA->pAckTxCbFunc )
11706 {
11707 if( VOS_STATUS_SUCCESS !=
11708 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11709 {
11710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11711 "Tx Complete timeout Timer Stop Failed ");
11712 }
11713 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11714 pWDA->pAckTxCbFunc = NULL;
11715 }
11716 else
11717 {
11718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11719 "Tx Complete Indication is received after timeout ");
11720 }
11721 break;
11722 }
Viral Modid86bde22012-12-10 13:09:21 -080011723 case WDI_P2P_NOA_START_IND :
11724 {
11725 tSirP2PNoaStart *pP2pNoaStart =
11726 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11727
11728 if (NULL == pP2pNoaStart)
11729 {
11730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11731 "Memory allocation failure, "
11732 "WDI_P2P_NOA_START_IND not forwarded");
11733 break;
11734 }
11735 pP2pNoaStart->status =
11736 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11737 pP2pNoaStart->bssIdx =
11738 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11739 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11740 (void *)pP2pNoaStart , 0) ;
11741 break;
11742 }
11743
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011744#ifdef FEATURE_WLAN_TDLS
11745 case WDI_TDLS_IND :
11746 {
11747 tSirTdlsInd *pTdlsInd =
11748 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11749
11750 if (NULL == pTdlsInd)
11751 {
11752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11753 "Memory allocation failure, "
11754 "WDI_TDLS_IND not forwarded");
11755 break;
11756 }
11757 pTdlsInd->status =
11758 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11759 pTdlsInd->assocId =
11760 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11761 pTdlsInd->staIdx =
11762 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11763 pTdlsInd->reasonCode =
11764 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11765 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11766 (void *)pTdlsInd , 0) ;
11767 break;
11768 }
11769#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 case WDI_P2P_NOA_ATTR_IND :
11771 {
11772 tSirP2PNoaAttr *pP2pNoaAttr =
11773 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11775 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 if (NULL == pP2pNoaAttr)
11777 {
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11779 "Memory allocation failure, "
11780 "WDI_P2P_NOA_ATTR_IND not forwarded");
11781 break;
11782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011783 pP2pNoaAttr->index =
11784 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11785 pP2pNoaAttr->oppPsFlag =
11786 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11787 pP2pNoaAttr->ctWin =
11788 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11789
11790 pP2pNoaAttr->uNoa1IntervalCnt =
11791 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11792 pP2pNoaAttr->uNoa1Duration =
11793 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11794 pP2pNoaAttr->uNoa1Interval =
11795 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11796 pP2pNoaAttr->uNoa1StartTime =
11797 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 pP2pNoaAttr->uNoa2IntervalCnt =
11799 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11800 pP2pNoaAttr->uNoa2Duration =
11801 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11802 pP2pNoaAttr->uNoa2Interval =
11803 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11804 pP2pNoaAttr->uNoa2StartTime =
11805 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11807 (void *)pP2pNoaAttr , 0) ;
11808 break;
11809 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011810#ifdef FEATURE_WLAN_SCAN_PNO
11811 case WDI_PREF_NETWORK_FOUND_IND:
11812 {
11813 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011814 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11815 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11816 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11817 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11818
Jeff Johnson295189b2012-06-20 16:38:30 -070011819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11820 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 if (NULL == pPrefNetworkFoundInd)
11822 {
11823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11824 "Memory allocation failure, "
11825 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11826 break;
11827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011828 /* Message Header */
11829 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011830 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011831
11832 /* Info from WDI Indication */
11833 pPrefNetworkFoundInd->ssId.length =
11834 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011836 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11837 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11838 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011839 if (NULL !=
11840 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11841 {
11842 pPrefNetworkFoundInd->frameLength =
11843 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11844 vos_mem_copy( pPrefNetworkFoundInd->data,
11845 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11846 pPrefNetworkFoundInd->frameLength);
11847 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11848 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11849 }
11850 else
11851 {
11852 pPrefNetworkFoundInd->frameLength = 0;
11853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 /* VOS message wrapper */
11856 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11857 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11858 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011859 /* Send message to SME */
11860 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11861 {
11862 /* free the mem and return */
11863 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 break;
11866 }
11867#endif // FEATURE_WLAN_SCAN_PNO
11868
11869#ifdef WLAN_WAKEUP_EVENTS
11870 case WDI_WAKE_REASON_IND:
11871 {
11872 vos_msg_t vosMsg;
11873 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11874 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11875 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11876
11877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11878 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11879 wdiLowLevelInd->wdiIndicationType,
11880 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11881 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11882 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11883
11884 if (NULL == pWakeReasonInd)
11885 {
11886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11887 "Memory allocation failure, "
11888 "WDI_WAKE_REASON_IND not forwarded");
11889 break;
11890 }
11891
11892 vos_mem_zero(pWakeReasonInd, allocSize);
11893
11894 /* Message Header */
11895 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11896 pWakeReasonInd->mesgLen = allocSize;
11897
11898 /* Info from WDI Indication */
11899 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11900 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11901 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11902 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11903 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11904 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11905 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11906 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11907
11908 /* VOS message wrapper */
11909 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11910 vosMsg.bodyptr = (void *) pWakeReasonInd;
11911 vosMsg.bodyval = 0;
11912
11913 /* Send message to SME */
11914 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11915 {
11916 /* free the mem and return */
11917 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11918 }
11919
11920 break;
11921 }
11922#endif // WLAN_WAKEUP_EVENTS
11923
11924 case WDI_TX_PER_HIT_IND:
11925 {
11926 vos_msg_t vosMsg;
11927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11928 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11929 /* VOS message wrapper */
11930 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11931 vosMsg.bodyptr = NULL;
11932 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011933 /* Send message to SME */
11934 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11935 {
11936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11937 }
11938 break;
11939 }
11940
Leo Chang9056f462013-08-01 19:21:11 -070011941#ifdef FEATURE_WLAN_LPHB
11942 case WDI_LPHB_WAIT_TIMEOUT_IND:
11943 {
11944 vos_msg_t vosMsg;
11945 tSirLPHBTimeoutInd *lphbTimeoutInd;
11946
11947 lphbTimeoutInd =
11948 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11949 if (NULL == lphbTimeoutInd)
11950 {
11951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11952 "%s: LPHB IND buffer alloc Fail", __func__);
11953 return ;
11954 }
11955
11956 lphbTimeoutInd->sessionIdx =
11957 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11958 lphbTimeoutInd->protocolType =
11959 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11960 lphbTimeoutInd->eventReason =
11961 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11962
11963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11964 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11965 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11966
11967 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11968 vosMsg.bodyptr = lphbTimeoutInd;
11969 vosMsg.bodyval = 0;
11970 /* Send message to SME */
11971 if (VOS_STATUS_SUCCESS !=
11972 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11973 {
11974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11975 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11976 vos_mem_free(lphbTimeoutInd);
11977 }
11978 break;
11979 }
11980#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070011981 case WDI_PERIODIC_TX_PTRN_FW_IND:
11982 {
11983 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11984 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
11985 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
11986 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
11987 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
11988 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
11989 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
11990
11991 break;
11992 }
Leo Chang9056f462013-08-01 19:21:11 -070011993
Ravi Joshid2ca7c42013-07-23 08:37:49 -070011994 case WDI_IBSS_PEER_INACTIVITY_IND:
11995 {
11996 tSirIbssPeerInactivityInd *pIbssInd =
11997 (tSirIbssPeerInactivityInd *)
11998 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
11999
12000 if (NULL == pIbssInd)
12001 {
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12003 "Memory allocation failure, "
12004 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12005 break;
12006 }
12007
12008 pIbssInd->bssIdx =
12009 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12010 pIbssInd->staIdx =
12011 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12012 vos_mem_copy(pIbssInd->peerAddr,
12013 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12014 sizeof(tSirMacAddr));
12015 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12016 break;
12017 }
12018
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 default:
12020 {
12021 /* TODO error */
12022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12023 "Received UNKNOWN Indication from WDI ");
12024 }
12025 }
12026 return ;
12027}
12028
Jeff Johnson295189b2012-06-20 16:38:30 -070012029/*
12030 * BA related processing in WDA.
12031 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012032void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12033 void* pUserData)
12034{
12035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12036 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 if(NULL == pWdaParams)
12038 {
12039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012040 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 VOS_ASSERT(0) ;
12042 return ;
12043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 vos_mem_free(pWdaParams->wdaMsgParam) ;
12046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12047 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012049 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12051 {
12052 tANI_U8 i = 0 ;
12053 tBaActivityInd *baActivityInd = NULL ;
12054 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12055 tANI_U8 allocSize = sizeof(tBaActivityInd)
12056 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12057 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12058 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 if(NULL == baActivityInd)
12061 {
12062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 VOS_ASSERT(0) ;
12065 return;
12066 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12068 sizeof(tSirMacAddr)) ;
12069 baActivityInd->baCandidateCnt = baCandidateCount ;
12070
12071 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12072 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12073
12074 for(i = 0 ; i < baCandidateCount ; i++)
12075 {
12076 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12078 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12080 {
12081 baCandidate->baInfo[tid].fBaEnable =
12082 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12083 baCandidate->baInfo[tid].startingSeqNum =
12084 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12085 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012086 wdiBaCandidate++ ;
12087 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12090 }
12091 else
12092 {
12093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12094 "BA Trigger RSP with Failure received ");
12095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012097}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012098
12099
12100/*
12101 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12102 * during MCC
12103 */
12104void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12105{
12106 wpt_uint32 enabled;
12107 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12108 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12109 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12110
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012111 if (NULL == pMac )
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "%s: Invoked with invalid MAC context ", __func__ );
12115 VOS_ASSERT(0);
12116 return;
12117 }
12118
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012119 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12120 != eSIR_SUCCESS)
12121 {
12122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12123 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12124 return;
12125 }
12126
12127 if(!enabled)
12128 {
12129 return;
12130 }
12131
12132 if(NULL == pWDA)
12133 {
12134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12135 "%s:WDA context is NULL", __func__);
12136 VOS_ASSERT(0);
12137 return;
12138 }
12139
12140 if(activate)
12141 {
12142 if( VOS_STATUS_SUCCESS !=
12143 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12144 {
12145 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12146 "Traffic Stats Timer Start Failed ");
12147 return;
12148 }
12149 WDI_DS_ActivateTrafficStats();
12150 }
12151 else
12152 {
12153 WDI_DS_DeactivateTrafficStats();
12154 WDI_DS_ClearTrafficStats();
12155
12156 if( VOS_STATUS_SUCCESS !=
12157 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12158 {
12159 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12160 "Traffic Stats Timer Stop Failed ");
12161 return;
12162 }
12163 }
12164}
12165
12166/*
12167 * Traffic Stats Timer handler
12168 */
12169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12170{
12171 WDI_Status wdiStatus;
12172 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12173 WDI_TrafficStatsIndType trafficStatsIndParams;
12174 wpt_uint32 length, enabled;
12175 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12176
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012177 if (NULL == pMac )
12178 {
12179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12180 "%s: Invoked with invalid MAC context ", __func__ );
12181 VOS_ASSERT(0);
12182 return;
12183 }
12184
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012185 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12186 != eSIR_SUCCESS)
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12190 return;
12191 }
12192
12193 if(!enabled)
12194 {
12195 WDI_DS_DeactivateTrafficStats();
12196 return;
12197 }
12198
12199 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12200
12201 if(pWdiTrafficStats != NULL)
12202 {
12203 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12204 trafficStatsIndParams.length = length;
12205 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012206 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012207 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12208 trafficStatsIndParams.pUserData = pWDA;
12209
12210 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12211
12212 if(WDI_STATUS_PENDING == wdiStatus)
12213 {
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12215 "Pending received for %s:%d ",__func__,__LINE__ );
12216 }
12217 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12218 {
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12220 "Failure in %s:%d ",__func__,__LINE__ );
12221 }
12222
12223 WDI_DS_ClearTrafficStats();
12224 }
12225 else
12226 {
12227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12228 "pWdiTrafficStats is Null");
12229 }
12230
12231 if( VOS_STATUS_SUCCESS !=
12232 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12233 {
12234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12235 "Traffic Stats Timer Start Failed ");
12236 return;
12237 }
12238}
12239
Jeff Johnson295189b2012-06-20 16:38:30 -070012240/*
12241 * BA Activity check timer handler
12242 */
12243void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12244{
12245 tANI_U8 curSta = 0 ;
12246 tANI_U8 tid = 0 ;
12247 tANI_U8 size = 0 ;
12248 tANI_U8 baCandidateCount = 0 ;
12249 tANI_U8 newBaCandidate = 0 ;
12250 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12251
12252 if(NULL == pWDA)
12253 {
12254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012255 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012256 VOS_ASSERT(0);
12257 return ;
12258 }
12259 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12260 {
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12262 "Inconsistent STA entries in WDA");
12263 VOS_ASSERT(0) ;
12264 }
12265 /* walk through all STA entries and find out TX packet count */
12266 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12267 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012268#ifdef WLAN_SOFTAP_VSTA_FEATURE
12269 // We can only do BA on "hard" STAs.
12270 if (!(IS_HWSTA_IDX(curSta)))
12271 {
12272 continue;
12273 }
12274#endif //WLAN_SOFTAP_VSTA_FEATURE
12275 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12276 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012277 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 tANI_U32 txPktCount = 0 ;
12279 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012281 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12282 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12284 curSta, tid, &txPktCount)))
12285 {
12286#if 0
12287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12288 "************* %d:%d, %d ",curSta, txPktCount,
12289 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12290#endif
12291 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012292 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12294 curSta, tid)))
12295 {
12296 /* get prepare for sending message to HAL */
12297 //baCandidate[baCandidateCount].staIdx = curSta ;
12298 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12299 newBaCandidate = WDA_ENABLE_BA ;
12300 }
12301 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12302 }
12303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 /* fill the entry for all the sta with given TID's */
12305 if(WDA_ENABLE_BA == newBaCandidate)
12306 {
12307 /* move to next BA candidate */
12308 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12309 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12310 baCandidateCount++ ;
12311 newBaCandidate = WDA_DISABLE_BA ;
12312 }
12313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 /* prepare and send message to hal */
12315 if( 0 < baCandidateCount)
12316 {
12317 WDI_Status status = WDI_STATUS_SUCCESS ;
12318 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12319 tWDA_ReqParams *pWdaParams =
12320 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 if(NULL == pWdaParams)
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", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 VOS_ASSERT(0) ;
12326 return;
12327 }
12328 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12329 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12330 if(NULL == wdiTriggerBaReq)
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 VOS_ASSERT(0) ;
12335 vos_mem_free(pWdaParams);
12336 return;
12337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 do
12339 {
12340 WDI_TriggerBAReqinfoType *triggerBaInfo =
12341 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12342 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12343 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12344 * for each request */
12345 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12346 triggerBaInfo->ucBASessionID = 0;
12347 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12348 } while(0) ;
12349 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012351 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 pWdaParams->pWdaContext = pWDA;
12353 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12354 pWdaParams->wdaMsgParam = NULL;
12355 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12356 WDA_TriggerBaReqCallback, pWdaParams) ;
12357 if(IS_WDI_STATUS_FAILURE(status))
12358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12360 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12361 vos_mem_free(pWdaParams->wdaMsgParam) ;
12362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12363 vos_mem_free(pWdaParams) ;
12364 }
12365 }
12366 else
12367 {
12368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12369 "There is no TID for initiating BA");
12370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 if( VOS_STATUS_SUCCESS !=
12372 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12375 "BA Activity Timer Stop Failed ");
12376 return ;
12377 }
12378 if( VOS_STATUS_SUCCESS !=
12379 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12380 {
12381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12382 "BA Activity Timer Start Failed ");
12383 return;
12384 }
12385 return ;
12386}
Jeff Johnson295189b2012-06-20 16:38:30 -070012387/*
12388 * WDA common routine to create timer used by WDA.
12389 */
12390static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12391{
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12393 tANI_U32 val = 0 ;
12394 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12395
12396 if(NULL == pMac)
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012399 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 VOS_ASSERT(0);
12401 return VOS_STATUS_E_FAILURE;
12402 }
12403 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12404 != eSIR_SUCCESS)
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12407 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12408 return VOS_STATUS_E_FAILURE;
12409 }
12410 val = SYS_MS_TO_TICKS(val) ;
12411
12412 /* BA activity check timer */
12413 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12414 "BA Activity Check timer", WDA_TimerHandler,
12415 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12416 if(status != TX_SUCCESS)
12417 {
12418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12419 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012420 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012421 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 /* Tx Complete Timeout timer */
12424 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12425 "Tx Complete Check timer", WDA_TimerHandler,
12426 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 if(status != TX_SUCCESS)
12428 {
12429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12430 "Unable to create Tx Complete Timeout timer");
12431 /* Destroy timer of BA activity check timer */
12432 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12433 if(status != TX_SUCCESS)
12434 {
12435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12436 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012437 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012439 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012440 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012441
12442 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12443
12444 /* Traffic Stats timer */
12445 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12446 "Traffic Stats timer", WDA_TimerHandler,
12447 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12448 if(status != TX_SUCCESS)
12449 {
12450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12451 "Unable to create traffic stats timer");
12452 /* Destroy timer of BA activity check timer */
12453 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12454 if(status != TX_SUCCESS)
12455 {
12456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12457 "Unable to Destroy BA activity timer");
12458 }
12459 /* Destroy timer of tx complete timer */
12460 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12461 if(status != TX_SUCCESS)
12462 {
12463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12464 "Unable to Tx complete timer");
12465 }
12466 return VOS_STATUS_E_FAILURE ;
12467 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012468 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012469}
Jeff Johnson295189b2012-06-20 16:38:30 -070012470/*
12471 * WDA common routine to destroy timer used by WDA.
12472 */
12473static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12474{
12475 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12477 if(status != TX_SUCCESS)
12478 {
12479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12480 "Unable to Destroy Tx Complete Timeout timer");
12481 return eSIR_FAILURE ;
12482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12484 if(status != TX_SUCCESS)
12485 {
12486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12487 "Unable to Destroy BA activity timer");
12488 return eSIR_FAILURE ;
12489 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012490 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12491 if(status != TX_SUCCESS)
12492 {
12493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12494 "Unable to Destroy traffic stats timer");
12495 return eSIR_FAILURE ;
12496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012497 return eSIR_SUCCESS ;
12498}
Jeff Johnson295189b2012-06-20 16:38:30 -070012499/*
12500 * WDA timer handler.
12501 */
12502void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12503{
12504 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12505 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 /*
12507 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12508 */
12509 wdaMsg.type = timerInfo ;
12510 wdaMsg.bodyptr = NULL;
12511 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 /* post the message.. */
12513 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12514 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12515 {
12516 vosStatus = VOS_STATUS_E_BADMSG;
12517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012518}
Jeff Johnson295189b2012-06-20 16:38:30 -070012519/*
12520 * WDA Tx Complete timeout Indication.
12521 */
12522void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12523{
12524 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 if( pWDA->pAckTxCbFunc )
12526 {
12527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12528 "TxComplete timer expired\n");
12529 pWDA->pAckTxCbFunc( pMac, 0);
12530 pWDA->pAckTxCbFunc = NULL;
12531 }
12532 else
12533 {
12534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12535 "There is no request pending for TxComplete and wait timer expired\n");
12536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012537}
Jeff Johnson295189b2012-06-20 16:38:30 -070012538/*
12539 * WDA Set REG Domain to VOS NV
12540 */
12541eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12542{
12543 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12544 {
12545 return eHAL_STATUS_INVALID_PARAMETER;
12546 }
12547 return eHAL_STATUS_SUCCESS;
12548}
Jeff Johnson295189b2012-06-20 16:38:30 -070012549
Jeff Johnson295189b2012-06-20 16:38:30 -070012550#ifdef FEATURE_WLAN_SCAN_PNO
12551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012552 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 *
12554 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012555void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012556{
12557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012559 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012560 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012561 {
12562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012563 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012564 VOS_ASSERT(0) ;
12565 return ;
12566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012567
Yue Ma7f44bbe2013-04-12 11:47:39 -070012568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12569 vos_mem_free(pWdaParams->wdaMsgParam);
12570 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012571
12572 return ;
12573}
Jeff Johnson295189b2012-06-20 16:38:30 -070012574/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012575 * FUNCTION: WDA_PNOScanReqCallback
12576 * Free memory.
12577 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12578 */
12579void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012580{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12582
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12585
12586 if(NULL == pWdaParams)
12587 {
12588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12589 "%s: pWdaParams received NULL", __func__);
12590 VOS_ASSERT(0);
12591 return;
12592 }
12593
12594 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12595 {
12596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12597 vos_mem_free(pWdaParams->wdaMsgParam);
12598 vos_mem_free(pWdaParams);
12599 }
12600
12601 return;
12602}
12603/*
12604 * FUNCTION: WDA_UpdateScanParamsRespCallback
12605 *
12606 */
12607void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12608{
12609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012611 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012612 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012613 {
12614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012615 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 VOS_ASSERT(0) ;
12617 return ;
12618 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012619
12620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12621 vos_mem_free(pWdaParams->wdaMsgParam);
12622 vos_mem_free(pWdaParams);
12623
Jeff Johnson295189b2012-06-20 16:38:30 -070012624 return ;
12625}
Jeff Johnson295189b2012-06-20 16:38:30 -070012626/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012627 * FUNCTION: WDA_UpdateScanParamsReqCallback
12628 * Free memory.
12629 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12630 */
12631void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12632{
12633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12634
12635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12636 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12637
12638 if(NULL == pWdaParams)
12639 {
12640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12641 "%s: pWdaParams received NULL", __func__);
12642 VOS_ASSERT(0);
12643 return;
12644 }
12645
12646 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12647 {
12648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12649 vos_mem_free(pWdaParams->wdaMsgParam);
12650 vos_mem_free(pWdaParams);
12651 }
12652
12653 return;
12654}
12655/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12657 * Request to WDI to set Preferred Network List.Offload
12658 */
12659VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12660 tSirPNOScanReq *pPNOScanReqParams)
12661{
Jeff Johnson43971f52012-07-17 12:26:56 -070012662 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12664 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12665 tWDA_ReqParams *pWdaParams ;
12666 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012668 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 if(NULL == pwdiPNOScanReqInfo)
12670 {
12671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 VOS_ASSERT(0);
12674 return VOS_STATUS_E_NOMEM;
12675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12677 if(NULL == pWdaParams)
12678 {
12679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012681 VOS_ASSERT(0);
12682 vos_mem_free(pwdiPNOScanReqInfo);
12683 return VOS_STATUS_E_NOMEM;
12684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012685 //
12686 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12687 //
12688 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12689 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012690 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12691 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12692 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12694 {
12695 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12696 &pPNOScanReqParams->aNetworks[i],
12697 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012699 /*Scan timer intervals*/
12700 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12701 &pPNOScanReqParams->scanTimers,
12702 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 /*Probe template for 2.4GHz band*/
12704 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12705 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12706 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12708 pPNOScanReqParams->p24GProbeTemplate,
12709 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012710 /*Probe template for 5GHz band*/
12711 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12712 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12713 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12715 pPNOScanReqParams->p5GProbeTemplate,
12716 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012717 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12718 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012719
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 /* Store Params pass it to WDI */
12721 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12722 pWdaParams->pWdaContext = pWDA;
12723 /* Store param pointer as passed in by caller */
12724 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012726 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 if(IS_WDI_STATUS_FAILURE(status))
12728 {
12729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12730 "Failure in Set PNO REQ WDI API, free all the memory " );
12731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12732 vos_mem_free(pWdaParams->wdaMsgParam);
12733 pWdaParams->wdaWdiApiMsgParam = NULL;
12734 pWdaParams->wdaMsgParam = NULL;
12735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012736 return CONVERT_WDI2VOS_STATUS(status) ;
12737}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012738
12739#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12740
12741void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12742{
12743 /*Convert the CSR Auth types to WDI Auth types */
12744 switch (csrAuthType)
12745 {
12746 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12747 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12748 break;
12749#ifdef FEATURE_WLAN_CCX
12750 case eCSR_AUTH_TYPE_CCKM_WPA:
12751 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12752 break;
12753#endif
12754 case eCSR_AUTH_TYPE_WPA:
12755 *AuthType = eWDA_AUTH_TYPE_WPA;
12756 break;
12757 case eCSR_AUTH_TYPE_WPA_PSK:
12758 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12759 break;
12760#ifdef FEATURE_WLAN_CCX
12761 case eCSR_AUTH_TYPE_CCKM_RSN:
12762 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12763 break;
12764#endif
12765 case eCSR_AUTH_TYPE_RSN:
12766 *AuthType = eWDA_AUTH_TYPE_RSN;
12767 break;
12768 case eCSR_AUTH_TYPE_RSN_PSK:
12769 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12770 break;
12771#if defined WLAN_FEATURE_VOWIFI_11R
12772 case eCSR_AUTH_TYPE_FT_RSN:
12773 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12774 break;
12775 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12776 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12777 break;
12778#endif
12779#ifdef FEATURE_WLAN_WAPI
12780 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12781 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12782 break;
12783 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12784 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12785 break;
12786#endif /* FEATURE_WLAN_WAPI */
12787 case eCSR_AUTH_TYPE_SHARED_KEY:
12788 case eCSR_AUTH_TYPE_AUTOSWITCH:
12789 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12790 break;
12791#if 0
12792 case eCSR_AUTH_TYPE_SHARED_KEY:
12793 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12794 break;
12795 case eCSR_AUTH_TYPE_AUTOSWITCH:
12796 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12797#endif
12798 default:
12799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12800 "%s: Unknown Auth Type", __func__);
12801 break;
12802 }
12803}
12804void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12805{
12806 switch (csrEncrType)
12807 {
12808 case eCSR_ENCRYPT_TYPE_NONE:
12809 *EncrType = WDI_ED_NONE;
12810 break;
12811 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12812 case eCSR_ENCRYPT_TYPE_WEP40:
12813 *EncrType = WDI_ED_WEP40;
12814 break;
12815 case eCSR_ENCRYPT_TYPE_WEP104:
12816 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12817 *EncrType = WDI_ED_WEP104;
12818 break;
12819 case eCSR_ENCRYPT_TYPE_TKIP:
12820 *EncrType = WDI_ED_TKIP;
12821 break;
12822 case eCSR_ENCRYPT_TYPE_AES:
12823 *EncrType = WDI_ED_CCMP;
12824 break;
12825#ifdef WLAN_FEATURE_11W
12826 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12827 *EncrType = WDI_ED_AES_128_CMAC;
12828 break;
12829#endif
12830#ifdef FEATURE_WLAN_WAPI
12831 case eCSR_ENCRYPT_TYPE_WPI:
12832 *EncrType = WDI_ED_WPI;
12833 break;
12834#endif
12835 case eCSR_ENCRYPT_TYPE_ANY:
12836 *EncrType = WDI_ED_ANY;
12837 break;
12838
12839 default:
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12841 "%s: Unknown Encryption Type", __func__);
12842 break;
12843 }
12844}
12845
12846/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012847 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012848 * Request to WDI to set Roam Offload Scan
12849 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012850VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012851 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12852{
12853 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012854 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12855 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012856 tWDA_ReqParams *pWdaParams ;
12857 v_U8_t csrAuthType;
12858 WDI_RoamNetworkType *pwdiRoamNetworkType;
12859 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12861 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012862 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012863 {
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12865 "%s: VOS MEM Alloc Failure", __func__);
12866 VOS_ASSERT(0);
12867 return VOS_STATUS_E_NOMEM;
12868 }
12869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12870 if (NULL == pWdaParams)
12871 {
12872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12873 "%s: VOS MEM Alloc Failure", __func__);
12874 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012875 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012876 return VOS_STATUS_E_NOMEM;
12877 }
12878
12879 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012880 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012881 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012882 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12883 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012884 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12885 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12886 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12887 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12888 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12889 sizeof(pwdiRoamNetworkType->currAPbssid));
12890 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12891 csrAuthType);
12892 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12893 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12894 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12895 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12896 pwdiRoamOffloadScanInfo->LookupThreshold =
12897 pRoamOffloadScanReqParams->LookupThreshold ;
12898 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12899 pRoamOffloadScanReqParams->RoamRssiDiff ;
12900 pwdiRoamOffloadScanInfo->Command =
12901 pRoamOffloadScanReqParams->Command ;
12902 pwdiRoamOffloadScanInfo->StartScanReason =
12903 pRoamOffloadScanReqParams->StartScanReason ;
12904 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12905 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12906 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12907 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12908 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12909 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12910 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12911 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12912 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12913 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12914 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12915 pRoamOffloadScanReqParams->IsCCXEnabled ;
12916 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12917 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12918 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12919 pwdiRoamNetworkType->ssId.ucLength =
12920 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12921 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12922 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12923 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12924 pwdiRoamNetworkType->ChannelCount =
12925 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12926 pwdiRoamOffloadScanInfo->ChannelCacheType =
12927 pRoamOffloadScanReqParams->ChannelCacheType;
12928 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12929 pRoamOffloadScanReqParams->ValidChannelList,
12930 pRoamOffloadScanReqParams->ValidChannelCount);
12931 pwdiRoamOffloadScanInfo->ValidChannelCount =
12932 pRoamOffloadScanReqParams->ValidChannelCount;
12933 pwdiRoamOffloadScanInfo->us24GProbeSize =
12934 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12935 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12936 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12937 pRoamOffloadScanReqParams->p24GProbeTemplate,
12938 pwdiRoamOffloadScanInfo->us24GProbeSize);
12939 pwdiRoamOffloadScanInfo->us5GProbeSize =
12940 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12941 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12942 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12943 pRoamOffloadScanReqParams->p5GProbeTemplate,
12944 pwdiRoamOffloadScanInfo->us5GProbeSize);
12945 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12946 pRoamOffloadScanReqParams->MDID.mdiePresent;
12947 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12948 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012949 pwdiRoamOffloadScanInfo->nProbes =
12950 pRoamOffloadScanReqParams->nProbes;
12951 pwdiRoamOffloadScanInfo->HomeAwayTime =
12952 pRoamOffloadScanReqParams->HomeAwayTime;
12953 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012954 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012955 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012956 pWdaParams->pWdaContext = pWDA;
12957 /* Store param pointer as passed in by caller */
12958 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012959 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012960 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12961 if(IS_WDI_STATUS_FAILURE(status))
12962 {
12963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12964 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12966 vos_mem_free(pWdaParams->wdaMsgParam);
12967 pWdaParams->wdaWdiApiMsgParam = NULL;
12968 pWdaParams->wdaMsgParam = NULL;
12969 }
12970 return CONVERT_WDI2VOS_STATUS(status) ;
12971}
12972#endif
12973
Jeff Johnson295189b2012-06-20 16:38:30 -070012974/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012975 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 *
12977 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012978void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012979{
12980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12981
12982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012984
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012985 if(NULL == pWdaParams)
12986 {
12987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012988 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012989 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012990 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012991 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012992
Jeff Johnson295189b2012-06-20 16:38:30 -070012993 vos_mem_free(pWdaParams->wdaMsgParam) ;
12994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12995 vos_mem_free(pWdaParams) ;
12996
12997 return ;
12998}
12999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013000 * FUNCTION: WDA_RssiFilterReqCallback
13001 * Free memory.
13002 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13003 */
13004void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13005{
13006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13007
13008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13010
13011 if(NULL == pWdaParams)
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "%s: pWdaParams received NULL", __func__);
13015 VOS_ASSERT(0);
13016 return;
13017 }
13018
13019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13020 {
13021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13022 vos_mem_free(pWdaParams->wdaMsgParam);
13023 vos_mem_free(pWdaParams);
13024 }
13025
13026 return;
13027}
13028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13030 * Request to WDI to set Preferred Network List.Offload
13031 */
13032VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13033 tSirSetRSSIFilterReq* pRssiFilterParams)
13034{
Jeff Johnson43971f52012-07-17 12:26:56 -070013035 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013036 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13037 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013041 if(NULL == pwdiSetRssiFilterReqInfo)
13042 {
13043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 VOS_ASSERT(0);
13046 return VOS_STATUS_E_NOMEM;
13047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13049 if(NULL == pWdaParams)
13050 {
13051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013053 VOS_ASSERT(0);
13054 vos_mem_free(pwdiSetRssiFilterReqInfo);
13055 return VOS_STATUS_E_NOMEM;
13056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013058 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13059 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013060
Jeff Johnson295189b2012-06-20 16:38:30 -070013061 /* Store Params pass it to WDI */
13062 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13063 pWdaParams->pWdaContext = pWDA;
13064 /* Store param pointer as passed in by caller */
13065 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013066 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013067 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 if(IS_WDI_STATUS_FAILURE(status))
13070 {
13071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13072 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13074 vos_mem_free(pWdaParams->wdaMsgParam);
13075 pWdaParams->wdaWdiApiMsgParam = NULL;
13076 pWdaParams->wdaMsgParam = NULL;
13077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013078 return CONVERT_WDI2VOS_STATUS(status) ;
13079}
13080
Jeff Johnson295189b2012-06-20 16:38:30 -070013081/*
13082 * FUNCTION: WDA_ProcessUpdateScanParams
13083 * Request to WDI to update Scan Parameters
13084 */
13085VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13086 tSirUpdateScanParams *pUpdateScanParams)
13087{
Jeff Johnson43971f52012-07-17 12:26:56 -070013088 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13090 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13091 sizeof(WDI_UpdateScanParamsInfoType)) ;
13092 tWDA_ReqParams *pWdaParams ;
13093 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013095 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 if(NULL == wdiUpdateScanParamsInfoType)
13097 {
13098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013100 VOS_ASSERT(0);
13101 return VOS_STATUS_E_NOMEM;
13102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13104 if ( NULL == pWdaParams )
13105 {
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 VOS_ASSERT(0);
13109 vos_mem_free(wdiUpdateScanParamsInfoType);
13110 return VOS_STATUS_E_NOMEM;
13111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013112 //
13113 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13114 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13116 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13117 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13118 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
13119 "sir struct %d wdi struct %d",
13120 pUpdateScanParams->b11dEnabled,
13121 pUpdateScanParams->b11dResolved,
13122 pUpdateScanParams->ucChannelCount,
13123 pUpdateScanParams->usPassiveMinChTime,
13124 pUpdateScanParams->usPassiveMaxChTime,
13125 pUpdateScanParams->usActiveMinChTime,
13126 pUpdateScanParams->usActiveMaxChTime,
13127 sizeof(tSirUpdateScanParams),
13128 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13129
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13131 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13133 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13135 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13137 pUpdateScanParams->usActiveMaxChTime;
13138 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13139 pUpdateScanParams->usActiveMinChTime;
13140 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13141 pUpdateScanParams->usPassiveMaxChTime;
13142 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13143 pUpdateScanParams->usPassiveMinChTime;
13144
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013146 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13147 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013148
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 for ( i = 0; i <
13150 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13151 i++)
13152 {
13153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13154 "Update Scan Parameters channel: %d",
13155 pUpdateScanParams->aChannels[i]);
13156
13157 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13158 pUpdateScanParams->aChannels[i];
13159 }
13160
Yue Ma7f44bbe2013-04-12 11:47:39 -070013161 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13162 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013163
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 /* Store Params pass it to WDI */
13165 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13166 pWdaParams->pWdaContext = pWDA;
13167 /* Store param pointer as passed in by caller */
13168 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013169
Jeff Johnson295189b2012-06-20 16:38:30 -070013170
13171
13172 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013173 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 if(IS_WDI_STATUS_FAILURE(status))
13176 {
13177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13178 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13180 vos_mem_free(pWdaParams->wdaMsgParam);
13181 vos_mem_free(pWdaParams);
13182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013183 return CONVERT_WDI2VOS_STATUS(status) ;
13184}
13185#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013186
13187#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13188/*
13189 * FUNCTION: WDA_RoamOffloadScanReqCallback
13190 *
13191 */
13192void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13193{
13194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013195 vos_msg_t vosMsg;
13196 wpt_uint8 reason = 0;
13197
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013199 "<------ %s " ,__func__);
13200 if (NULL == pWdaParams)
13201 {
13202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13203 "%s: pWdaParams received NULL", __func__);
13204 VOS_ASSERT(0) ;
13205 return ;
13206 }
13207 if ( pWdaParams != NULL )
13208 {
13209 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13210 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013211 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13213 }
13214 if ( pWdaParams->wdaMsgParam != NULL)
13215 {
13216 vos_mem_free(pWdaParams->wdaMsgParam);
13217 }
13218
13219 vos_mem_free(pWdaParams) ;
13220 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013221 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13222 vosMsg.bodyptr = NULL;
13223 if (WDI_STATUS_SUCCESS != status)
13224 {
13225 reason = 0;
13226 }
13227 vosMsg.bodyval = reason;
13228 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13229 {
13230 /* free the mem and return */
13231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13232 "Failed to post the rsp to UMAC" ,__func__);
13233 }
13234
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013235 return ;
13236}
13237#endif
13238
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013239/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013240 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013241 *
13242 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013243void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013244{
13245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13246
13247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13248 "<------ %s " ,__func__);
13249
13250 if(NULL == pWdaParams)
13251 {
13252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13253 "%s: pWdaParams received NULL", __func__);
13254 VOS_ASSERT(0);
13255 return;
13256 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013257
13258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13259 vos_mem_free(pWdaParams->wdaMsgParam);
13260 vos_mem_free(pWdaParams);
13261
13262 return;
13263}
13264/*
13265 * FUNCTION: WDA_SetPowerParamsReqCallback
13266 * Free memory.
13267 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13268 */
13269void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13270{
13271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13272
13273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13274 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13275
13276 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013277 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13279 "%s: pWdaParams received NULL", __func__);
13280 VOS_ASSERT(0);
13281 return;
13282 }
13283
13284 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13285 {
13286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13287 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013288 vos_mem_free(pWdaParams);
13289 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013290
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013291 return;
13292}
13293
Jeff Johnson295189b2012-06-20 16:38:30 -070013294#ifdef WLAN_FEATURE_PACKET_FILTERING
13295/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013296 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 *
13298 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013299void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013300 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13301 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013302{
13303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013305 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 if(NULL == pWdaParams)
13307 {
13308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013309 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 VOS_ASSERT(0) ;
13311 return ;
13312 }
13313
13314 vos_mem_free(pWdaParams->wdaMsgParam) ;
13315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13316 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 //print a msg, nothing else to do
13318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013319 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013320 return ;
13321}
Jeff Johnson295189b2012-06-20 16:38:30 -070013322/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013323 * FUNCTION: WDA_8023MulticastListReqCallback
13324 * Free memory.
13325 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13326 */
13327void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13328{
13329 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13330
13331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13332 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13333
13334 if(NULL == pWdaParams)
13335 {
13336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13337 "%s: pWdaParams received NULL", __func__);
13338 VOS_ASSERT(0);
13339 return;
13340 }
13341
13342 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13343 {
13344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13345 vos_mem_free(pWdaParams->wdaMsgParam);
13346 vos_mem_free(pWdaParams);
13347 }
13348
13349 return;
13350}
13351/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 * FUNCTION: WDA_Process8023MulticastListReq
13353 * Request to WDI to add 8023 Multicast List
13354 */
13355VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13356 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13357{
Jeff Johnson43971f52012-07-17 12:26:56 -070013358 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013359 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13360 tWDA_ReqParams *pWdaParams ;
13361 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 pwdiFltPktSetMcListReqParamsType =
13365 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13366 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13367 ) ;
13368 if(NULL == pwdiFltPktSetMcListReqParamsType)
13369 {
13370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013371 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 return VOS_STATUS_E_NOMEM;
13373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13375 if(NULL == pWdaParams)
13376 {
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13380 return VOS_STATUS_E_NOMEM;
13381 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013382
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 //
13384 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13385 //
13386 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013387 pRcvFltMcAddrList->ulMulticastAddrCnt;
13388
13389 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13390 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13391 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13392 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13393
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13395 {
13396 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13397 &(pRcvFltMcAddrList->multicastAddr[i]),
13398 sizeof(tSirMacAddr));
13399 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013400 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13401 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013402
Jeff Johnson295189b2012-06-20 16:38:30 -070013403 /* Store Params pass it to WDI */
13404 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13405 pWdaParams->pWdaContext = pWDA;
13406 /* Store param pointer as passed in by caller */
13407 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 status = WDI_8023MulticastListReq(
13409 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013410 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013411 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013412 if(IS_WDI_STATUS_FAILURE(status))
13413 {
13414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13415 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13417 vos_mem_free(pWdaParams->wdaMsgParam);
13418 vos_mem_free(pWdaParams);
13419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013420 return CONVERT_WDI2VOS_STATUS(status) ;
13421}
Jeff Johnson295189b2012-06-20 16:38:30 -070013422/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013423 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013424 *
13425 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013426void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013427 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13428 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013429{
13430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013432 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013433 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 if(NULL == pWdaParams)
13435 {
13436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 VOS_ASSERT(0) ;
13439 return ;
13440 }
13441
13442 vos_mem_free(pWdaParams->wdaMsgParam) ;
13443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13444 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013445 //print a msg, nothing else to do
13446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013447 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013448 return ;
13449}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013450
13451/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013452 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13453 * Free memory.
13454 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013455 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013456void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013457 void* pUserData)
13458{
13459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13460
13461 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13462 "<------ %s, wdiStatus: %d",
13463 __func__, wdiStatus);
13464
13465 if (NULL == pWdaParams)
13466 {
13467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13468 "%s: Invalid pWdaParams pointer", __func__);
13469 VOS_ASSERT(0);
13470 return;
13471 }
13472
13473 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13474 {
13475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13476 vos_mem_free(pWdaParams->wdaMsgParam);
13477 vos_mem_free(pWdaParams);
13478 }
13479
13480 return;
13481}
13482
Jeff Johnson295189b2012-06-20 16:38:30 -070013483/*
13484 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13485 * Request to WDI to set Receive Filters
13486 */
13487VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13488 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13489{
Jeff Johnson43971f52012-07-17 12:26:56 -070013490 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013491 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13492 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13493 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13494 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13495 tWDA_ReqParams *pWdaParams ;
13496 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013498 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13500 {
13501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013503 VOS_ASSERT(0);
13504 return VOS_STATUS_E_NOMEM;
13505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13507 if(NULL == pWdaParams)
13508 {
13509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 VOS_ASSERT(0);
13512 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13513 return VOS_STATUS_E_NOMEM;
13514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13516 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13517 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13518 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013519 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13520 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13521
13522 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13523 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013524
13525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13526 "FID %d FT %d NParams %d CT %d",
13527 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13528 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13529 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13530 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013531 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13532 {
13533 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13534 &pRcvPktFilterCfg->paramsData[i],
13535 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13537 "Proto %d Comp Flag %d \n",
13538 pwdiSetRcvPktFilterReqParamsType->
13539 wdiPktFilterCfg.paramsData[i].protocolLayer,
13540 pwdiSetRcvPktFilterReqParamsType->
13541 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13543 "Data Offset %d Data Len %d\n",
13544 pwdiSetRcvPktFilterReqParamsType->
13545 wdiPktFilterCfg.paramsData[i].dataOffset,
13546 pwdiSetRcvPktFilterReqParamsType->
13547 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13549 "CData: %d:%d:%d:%d:%d:%d\n",
13550 pwdiSetRcvPktFilterReqParamsType->
13551 wdiPktFilterCfg.paramsData[i].compareData[0],
13552 pwdiSetRcvPktFilterReqParamsType->
13553 wdiPktFilterCfg.paramsData[i].compareData[1],
13554 pwdiSetRcvPktFilterReqParamsType->
13555 wdiPktFilterCfg.paramsData[i].compareData[2],
13556 pwdiSetRcvPktFilterReqParamsType->
13557 wdiPktFilterCfg.paramsData[i].compareData[3],
13558 pwdiSetRcvPktFilterReqParamsType->
13559 wdiPktFilterCfg.paramsData[i].compareData[4],
13560 pwdiSetRcvPktFilterReqParamsType->
13561 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13563 "MData: %d:%d:%d:%d:%d:%d\n",
13564 pwdiSetRcvPktFilterReqParamsType->
13565 wdiPktFilterCfg.paramsData[i].dataMask[0],
13566 pwdiSetRcvPktFilterReqParamsType->
13567 wdiPktFilterCfg.paramsData[i].dataMask[1],
13568 pwdiSetRcvPktFilterReqParamsType->
13569 wdiPktFilterCfg.paramsData[i].dataMask[2],
13570 pwdiSetRcvPktFilterReqParamsType->
13571 wdiPktFilterCfg.paramsData[i].dataMask[3],
13572 pwdiSetRcvPktFilterReqParamsType->
13573 wdiPktFilterCfg.paramsData[i].dataMask[4],
13574 pwdiSetRcvPktFilterReqParamsType->
13575 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013576 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013577 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013578 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013579 /* Store Params pass it to WDI */
13580 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13581 pWdaParams->pWdaContext = pWDA;
13582 /* Store param pointer as passed in by caller */
13583 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013584 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013585 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013586 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013587 if(IS_WDI_STATUS_FAILURE(status))
13588 {
13589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13590 "Failure in SetFilter(),free all the memory,status %d ",status);
13591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13592 vos_mem_free(pWdaParams->wdaMsgParam);
13593 vos_mem_free(pWdaParams);
13594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 return CONVERT_WDI2VOS_STATUS(status) ;
13596}
Jeff Johnson295189b2012-06-20 16:38:30 -070013597/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013598 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 *
13600 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013601void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013602 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13603 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013604{
13605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13606 tWDA_CbContext *pWDA;
13607 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13608 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13609 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13610 tANI_U8 i;
13611 vos_msg_t vosMsg;
13612
13613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013614 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13616
Jeff Johnsone7245742012-09-05 17:12:55 -070013617 if(NULL == pRcvFltPktMatchCntRsp)
13618 {
13619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013620 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013621 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013622 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013623 return ;
13624 }
13625
Jeff Johnson295189b2012-06-20 16:38:30 -070013626 if(NULL == pWdaParams)
13627 {
13628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013629 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013630 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013631 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013632 return ;
13633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13635 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013636 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13637 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13638
13639 /* Message Header */
13640 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13641 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13642
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013643 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013644
13645 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13646 {
13647 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13648 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13649 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 /* VOS message wrapper */
13651 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13652 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13653 vosMsg.bodyval = 0;
13654 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13655 {
13656 /* free the mem and return */
13657 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13658 }
13659
13660 vos_mem_free(pWdaParams->wdaMsgParam) ;
13661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13662 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013663
13664 return;
13665}
13666/*
13667 * FUNCTION: WDA_FilterMatchCountReqCallback
13668 * Free memory and send RSP back to SME.
13669 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13670 */
13671void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13672{
13673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13674 vos_msg_t vosMsg;
13675
13676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13677 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13678
13679 if(NULL == pWdaParams)
13680 {
13681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13682 "%s: pWdaParams received NULL", __func__);
13683 VOS_ASSERT(0);
13684 return;
13685 }
13686
13687 /* VOS message wrapper */
13688 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13689 vosMsg.bodyptr = NULL;
13690 vosMsg.bodyval = 0;
13691
13692 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13693 {
13694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13695 vos_mem_free(pWdaParams->wdaMsgParam);
13696 vos_mem_free(pWdaParams);
13697 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13698 }
13699
13700 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013701}
Jeff Johnson295189b2012-06-20 16:38:30 -070013702/*
13703 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13704 * Request to WDI to get PC Filter Match Count
13705 */
13706VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13707{
Jeff Johnson43971f52012-07-17 12:26:56 -070013708 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013709 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13710 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13711 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013713 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013714 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13715 {
13716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013718 VOS_ASSERT(0);
13719 return VOS_STATUS_E_NOMEM;
13720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13722 if(NULL == pWdaParams)
13723 {
13724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013726 VOS_ASSERT(0);
13727 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13728 return VOS_STATUS_E_NOMEM;
13729 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013730
Yue Ma7f44bbe2013-04-12 11:47:39 -070013731 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13732 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013733
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013734 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13735 pRcvFltPktMatchRsp->bssId,
13736 sizeof(wpt_macAddr));
13737
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 /* Store Params pass it to WDI */
13739 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13740 pWdaParams->pWdaContext = pWDA;
13741 /* Store param pointer as passed in by caller */
13742 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013743 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013744 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013745 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013746 if(IS_WDI_STATUS_FAILURE(status))
13747 {
13748 /* failure returned by WDI API */
13749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13750 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13752 vos_mem_free(pWdaParams) ;
13753 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13754 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 return CONVERT_WDI2VOS_STATUS(status) ;
13757}
Jeff Johnson295189b2012-06-20 16:38:30 -070013758/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013759 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013760 *
13761 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013762void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013763 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13764 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013765{
13766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013768 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013769/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13770 if(NULL == pWdaParams)
13771 {
13772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013773 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 VOS_ASSERT(0) ;
13775 return ;
13776 }
13777
13778 vos_mem_free(pWdaParams->wdaMsgParam) ;
13779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13780 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013781 //print a msg, nothing else to do
13782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013783 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013784 return ;
13785}
Jeff Johnson295189b2012-06-20 16:38:30 -070013786/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013787 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13788 * Free memory.
13789 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13790 */
13791void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13792{
13793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13794
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13796 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13797
13798 if(NULL == pWdaParams)
13799 {
13800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13801 "%s: Invalid pWdaParams pointer", __func__);
13802 VOS_ASSERT(0);
13803 return;
13804 }
13805
13806 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13807 {
13808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13809 vos_mem_free(pWdaParams->wdaMsgParam);
13810 vos_mem_free(pWdaParams);
13811 }
13812
13813 return;
13814}
13815/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13817 * Request to WDI to clear Receive Filters
13818 */
13819VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13820 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13821{
Jeff Johnson43971f52012-07-17 12:26:56 -070013822 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013823 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13824 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13825 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013828 if(NULL == pwdiRcvFltPktClearReqParamsType)
13829 {
13830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013832 VOS_ASSERT(0);
13833 return VOS_STATUS_E_NOMEM;
13834 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13836 if(NULL == pWdaParams)
13837 {
13838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013840 VOS_ASSERT(0);
13841 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13842 return VOS_STATUS_E_NOMEM;
13843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13845 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013846 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13847 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13848 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13849 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013850
Yue Ma7f44bbe2013-04-12 11:47:39 -070013851 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013852 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 /* Store Params pass it to WDI */
13854 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13855 pWdaParams->pWdaContext = pWDA;
13856 /* Store param pointer as passed in by caller */
13857 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013859 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013860 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 if(IS_WDI_STATUS_FAILURE(status))
13862 {
13863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13864 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013866 vos_mem_free(pWdaParams->wdaMsgParam);
13867 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013869 return CONVERT_WDI2VOS_STATUS(status) ;
13870}
13871#endif // WLAN_FEATURE_PACKET_FILTERING
13872
Jeff Johnson295189b2012-06-20 16:38:30 -070013873/*
13874 * FUNCTION: WDA_ProcessSetPowerParamsReq
13875 * Request to WDI to set power params
13876 */
13877VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13878 tSirSetPowerParamsReq *pPowerParams)
13879{
Jeff Johnson43971f52012-07-17 12:26:56 -070013880 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013881 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13882 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013883 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013885 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 if(NULL == pwdiSetPowerParamsReqInfo)
13887 {
13888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013890 VOS_ASSERT(0);
13891 return VOS_STATUS_E_NOMEM;
13892 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013893 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13894 if(NULL == pWdaParams)
13895 {
13896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013898 VOS_ASSERT(0);
13899 vos_mem_free(pwdiSetPowerParamsReqInfo);
13900 return VOS_STATUS_E_NOMEM;
13901 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013902
Jeff Johnson295189b2012-06-20 16:38:30 -070013903
13904 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13905 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13907 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013908 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13909 pPowerParams->uListenInterval;
13910 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13911 pPowerParams->uBcastMcastFilter;
13912 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13913 pPowerParams->uEnableBET;
13914 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13915 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013916 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13917 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013918 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13919 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013920
Jeff Johnson295189b2012-06-20 16:38:30 -070013921 /* Store Params pass it to WDI */
13922 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13923 pWdaParams->pWdaContext = pWDA;
13924 /* Store param pointer as passed in by caller */
13925 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013926 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013927 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013928 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013929 if(IS_WDI_STATUS_FAILURE(status))
13930 {
13931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13932 "Failure in Set power params REQ WDI API, free all the memory " );
13933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13934 vos_mem_free(pWdaParams->wdaMsgParam);
13935 pWdaParams->wdaWdiApiMsgParam = NULL;
13936 pWdaParams->wdaMsgParam = NULL;
13937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013938 return CONVERT_WDI2VOS_STATUS(status) ;
13939}
13940
13941/*
13942 * FUNCTION: WDA_SetTmLevelRspCallback
13943 * Set TM Level response
13944 */
13945void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13946{
13947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13948
13949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013951
13952 if(NULL == pWdaParams)
13953 {
13954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013955 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013956 VOS_ASSERT(0) ;
13957 return ;
13958 }
13959
13960 /* Dose not need to send notification to upper layer
13961 * Just free allocated resources */
13962 if( pWdaParams != NULL )
13963 {
13964 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13965 {
13966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13967 }
13968 vos_mem_free(pWdaParams->wdaMsgParam) ;
13969 vos_mem_free(pWdaParams) ;
13970 }
13971}
13972
13973/*
13974 * FUNCTION: WDA_ProcessSetTmLevelReq
13975 * Set TM Level request
13976 */
13977VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13978 tAniSetTmLevelReq *setTmLevelReq)
13979{
13980 WDI_Status status = WDI_STATUS_SUCCESS ;
13981 tWDA_ReqParams *pWdaParams ;
13982 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13983 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13984 sizeof(WDI_SetTmLevelReqType)) ;
13985 if(NULL == wdiSetTmLevelReq)
13986 {
13987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 VOS_ASSERT(0);
13990 return VOS_STATUS_E_NOMEM;
13991 }
13992
13993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13994 if(NULL == pWdaParams)
13995 {
13996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 VOS_ASSERT(0);
13999 vos_mem_free(wdiSetTmLevelReq);
14000 return VOS_STATUS_E_NOMEM;
14001 }
14002
14003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014004 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014005
14006 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14007 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14008
14009 pWdaParams->pWdaContext = pWDA;
14010 pWdaParams->wdaMsgParam = setTmLevelReq;
14011 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14012
14013 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14014 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14015
14016 if(IS_WDI_STATUS_FAILURE(status))
14017 {
14018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014019 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014020 vos_mem_free(pWdaParams->wdaMsgParam) ;
14021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14022 vos_mem_free(pWdaParams) ;
14023 }
14024
14025 return CONVERT_WDI2VOS_STATUS(status) ;
14026}
14027
14028VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14029 tpTxControlParams pTxCtrlParam)
14030{
14031 VOS_STATUS wdaStatus;
14032
14033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 if( pTxCtrlParam == NULL )
14036 {
14037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014038 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 return VOS_STATUS_E_FAILURE;
14040 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014041 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14042 {
14043 wdaStatus = WDA_SuspendDataTx(pWDA);
14044 }
14045 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14046 {
14047 wdaStatus = WDA_ResumeDataTx(pWDA);
14048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014049 return wdaStatus;
14050}
14051
14052 /* FUNCTION WDA_featureCapsExchange
14053 * WDA API to invoke capability exchange between host and FW.
14054 */
14055void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14056{
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014058 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 WDI_featureCapsExchangeReq( NULL, pVosContext);
14060}
14061
Yathish9f22e662012-12-10 14:21:35 -080014062/* FUNCTION WDA_disableCapablityFeature
14063 * WDA API to diable Active mode offload in host.
14064 */
14065void WDA_disableCapablityFeature(tANI_U8 feature_index)
14066{
14067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14068 "%s:enter", __func__ );
14069 WDI_disableCapablityFeature(feature_index);
14070}
14071
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 /* FUNCTION WDA_getHostWlanFeatCaps
14073 * Wrapper for WDI API, that will return if the feature (enum value).passed
14074 * to this API is supported or not in Host
14075 * return value
14076 * 0 - implies feature is NOT Supported
14077 * any non zero value - implies feature is SUPPORTED
14078 */
14079tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14080{
14081 return WDI_getHostWlanFeatCaps(featEnumValue);
14082}
14083
14084 /* FUNCTION WDA_getFwWlanFeatCaps
14085 * Wrapper for WDI API, that will return if the feature (enum value).passed
14086 * to this API is supported or not in FW
14087 * return value
14088 * 0 - implies feature is NOT Supported
14089 * any non zero value - implies feature is SUPPORTED
14090 */
14091tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14092{
14093 return WDI_getFwWlanFeatCaps(featEnumValue);
14094}
14095
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014096
Jeff Johnson295189b2012-06-20 16:38:30 -070014097/*
14098 * FUNCTION: WDA_shutdown
14099 * Shutdown WDA/WDI without handshaking with Riva.
14100 * Synchronous function.
14101 */
14102VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14103{
14104 WDI_Status wdiStatus;
14105 //tANI_U8 eventIdx = 0;
14106 VOS_STATUS status = VOS_STATUS_SUCCESS;
14107 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014108 if (NULL == pWDA)
14109 {
14110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014111 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014112 VOS_ASSERT(0);
14113 return VOS_STATUS_E_FAILURE;
14114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014115 /* FTM mode stay START_STATE */
14116 if( (WDA_READY_STATE != pWDA->wdaState) &&
14117 (WDA_INIT_STATE != pWDA->wdaState) &&
14118 (WDA_START_STATE != pWDA->wdaState) )
14119 {
14120 VOS_ASSERT(0);
14121 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014122
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014123 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14124 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014125 {
14126 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014127 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014128 }
Leo Chang9d76f622013-08-23 16:34:52 -070014129 else
14130 {
14131 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014133
Jeff Johnson295189b2012-06-20 16:38:30 -070014134 /* call WDI shutdown */
14135 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14137 {
14138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14139 "error in WDA Stop" );
14140 status = VOS_STATUS_E_FAILURE;
14141 }
14142 /* WDI stop is synchrnous, shutdown is complete when it returns */
14143 pWDA->wdaState = WDA_STOP_STATE;
14144
Jeff Johnson295189b2012-06-20 16:38:30 -070014145 /* shutdown should perform the stop & close actions. */
14146 /* Destroy the event */
14147 status = vos_event_destroy(&pWDA->txFrameEvent);
14148 if(!VOS_IS_STATUS_SUCCESS(status))
14149 {
14150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14151 "VOS Event destroy failed - status = %d\n", status);
14152 status = VOS_STATUS_E_FAILURE;
14153 }
14154 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14155 if(!VOS_IS_STATUS_SUCCESS(status))
14156 {
14157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14158 "VOS Event destroy failed - status = %d\n", status);
14159 status = VOS_STATUS_E_FAILURE;
14160 }
14161 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14162 if(!VOS_IS_STATUS_SUCCESS(status))
14163 {
14164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14165 "VOS Event destroy failed - status = %d\n", status);
14166 status = VOS_STATUS_E_FAILURE;
14167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 /* free WDA context */
14169 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14170 if ( !VOS_IS_STATUS_SUCCESS(status) )
14171 {
14172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14173 "error in WDA close " );
14174 status = VOS_STATUS_E_FAILURE;
14175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 return status;
14177}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014178
Jeff Johnsone7245742012-09-05 17:12:55 -070014179/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014180 * FUNCTION: WDA_setNeedShutdown
14181 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014182 */
14183
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014184void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014185{
14186 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014187 if(pWDA == NULL)
14188 {
14189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14190 "Could not get the WDA Context pointer" );
14191 return;
14192 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014193 pWDA->needShutdown = TRUE;
14194}
14195/*
14196 * FUNCTION: WDA_needShutdown
14197 * WDA needs a shutdown
14198 */
14199
14200v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14201{
14202 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014203 if(pWDA == NULL)
14204 {
14205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14206 "Could not get the WDA Context pointer" );
14207 return 0;
14208 }
14209 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014210}
14211
Mohit Khanna4a70d262012-09-11 16:30:12 -070014212#ifdef WLAN_FEATURE_11AC
14213/*
14214 * FUNCTION: WDA_SetBeaconFilterReqCallback
14215 *
14216 */
14217void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14218{
14219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014221 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014222 if(NULL == pWdaParams)
14223 {
14224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014225 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014226 VOS_ASSERT(0) ;
14227 return ;
14228 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014229
Mohit Khanna4a70d262012-09-11 16:30:12 -070014230 vos_mem_free(pWdaParams->wdaMsgParam) ;
14231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14232 vos_mem_free(pWdaParams) ;
14233 /*
14234 * No respone required for SetBeaconFilter req so just free the request
14235 * param here
14236 */
14237
14238 return ;
14239}
14240
14241VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14242 tUpdateVHTOpMode *pData)
14243{
14244 WDI_Status status = WDI_STATUS_SUCCESS ;
14245 tWDA_ReqParams *pWdaParams ;
14246 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14247 sizeof(WDI_UpdateVHTOpMode)) ;
14248 if(NULL == wdiTemp)
14249 {
14250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014251 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014252 VOS_ASSERT(0);
14253 return VOS_STATUS_E_NOMEM;
14254 }
14255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14256 if(NULL == pWdaParams)
14257 {
14258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014259 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014260 VOS_ASSERT(0);
14261 vos_mem_free(wdiTemp);
14262 return VOS_STATUS_E_NOMEM;
14263 }
14264
14265 wdiTemp->opMode = pData->opMode;
14266 wdiTemp->staId = pData->staId;
14267
14268 pWdaParams->pWdaContext = pWDA;
14269 /* Store Req pointer, as this will be used for response */
14270 pWdaParams->wdaMsgParam = (void *)pData;
14271 /* store Params pass it to WDI */
14272 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14273
14274 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14275
14276 if(IS_WDI_STATUS_FAILURE(status))
14277 {
14278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14279 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14281 vos_mem_free(pWdaParams->wdaMsgParam);
14282 vos_mem_free(pWdaParams);
14283 }
14284 return CONVERT_WDI2VOS_STATUS(status) ;
14285}
14286#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014287
14288/*==========================================================================
14289 FUNCTION WDA_TransportChannelDebug
14290
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014291 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014292 Display Transport Channel debugging information
14293 User may request to display DXE channel snapshot
14294 Or if host driver detects any abnormal stcuk may display
14295
14296 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014297 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014298 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014299 enableStallDetect : Enable stall detect feature
14300 This feature will take effect to data performance
14301 Not integrate till fully verification
14302
14303 RETURN VALUE
14304 NONE
14305
14306===========================================================================*/
14307void WDA_TransportChannelDebug
14308(
schang6295e542013-03-12 15:31:23 -070014309 tpAniSirGlobal pMac,
14310 v_BOOL_t displaySnapshot,
14311 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014312)
14313{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014314 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014315 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014316}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014317
14318/*==========================================================================
14319 FUNCTION WDA_SetEnableSSR
14320
14321 DESCRIPTION
14322 API to enable/disable SSR on WDI timeout
14323
14324 PARAMETERS
14325 enableSSR : enable/disable SSR
14326
14327 RETURN VALUE
14328 NONE
14329
14330===========================================================================*/
14331void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14332{
14333 WDI_SetEnableSSR(enableSSR);
14334}
Leo Chang9056f462013-08-01 19:21:11 -070014335
14336#ifdef FEATURE_WLAN_LPHB
14337/*
14338 * FUNCTION: WDA_LPHBconfRspCallback
14339 *
14340 */
14341void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14342{
14343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14344
14345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14346 "<------ %s " ,__func__);
14347 if (NULL == pWdaParams)
14348 {
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14350 "%s: pWdaParams received NULL", __func__);
14351 VOS_ASSERT(0) ;
14352 return ;
14353 }
14354
14355 /* Do not need to send notification to upper layer
14356 * Just free allocated resources */
14357 if (pWdaParams != NULL)
14358 {
14359 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14360 {
14361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14362 }
14363 vos_mem_free(pWdaParams->wdaMsgParam) ;
14364 vos_mem_free(pWdaParams) ;
14365 }
14366
14367 return;
14368}
14369
14370/*
14371 * FUNCTION: WDA_ProcessLPHBConfReq
14372 *
14373 */
14374VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14375 tSirLPHBReq *pData)
14376{
14377 WDI_Status wdiStatus;
14378 tWDA_ReqParams *pWdaParams ;
14379
14380 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14381 "------> %s " , __func__);
14382
14383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14384 if (NULL == pWdaParams)
14385 {
14386 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14387 "%s: VOS MEM Alloc Failure", __func__);
14388 VOS_ASSERT(0);
14389 vos_mem_free(pData);
14390 return VOS_STATUS_E_NOMEM;
14391 }
14392
14393 pWdaParams->pWdaContext = pWDA;
14394 pWdaParams->wdaMsgParam = (void *)pData;
14395 pWdaParams->wdaWdiApiMsgParam = NULL;
14396
14397 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14398 if (WDI_STATUS_PENDING == wdiStatus)
14399 {
14400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14401 "Pending received for %s:%d ", __func__, __LINE__);
14402 }
14403 else if (WDI_STATUS_SUCCESS != wdiStatus)
14404 {
14405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14406 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14407 vos_mem_free(pWdaParams->wdaMsgParam);
14408 vos_mem_free(pWdaParams);
14409 }
14410
14411 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14412}
14413#endif /* FEATURE_WLAN_LPHB */
14414