blob: 7a8c6e385564d98642ff2258f7944d541ddc6c14 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -08002 * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800263 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800271 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800278 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Leo Chang9d76f622013-08-23 16:34:52 -0700505 else
506 {
507 vos_event_init(&wdaContext->ftmStopDoneEvent);
508 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 return status;
510}
511
Jeff Johnson295189b2012-06-20 16:38:30 -0700512/*
513 * FUNCTION: WDA_prepareConfigTLV
514 * Function to prepare CFG for DAL(WDA)
515 */
516VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
517 WDI_StartReqParamsType *wdiStartParams )
518{
519 /* get pMac to acess CFG data base */
520 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
521 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
522 tHalCfg *tlvStruct = NULL ;
523 tANI_U8 *tlvStructStart = NULL ;
524 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
525 v_PVOID_t *configParam;
526 tANI_U32 configParamSize;
527 tANI_U32 *configDataValue;
528 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700529 tANI_U8 i;
530
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 if ((NULL == pMac)||(NULL == wdaContext))
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 VOS_ASSERT(0);
536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
539 WNI_CFG_STA_ID_LEN +
540 WNI_CFG_EDCA_WME_ACBK_LEN +
541 WNI_CFG_EDCA_WME_ACBE_LEN +
542 WNI_CFG_EDCA_WME_ACVI_LEN +
543 WNI_CFG_EDCA_WME_ACVO_LEN +
544 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* malloc memory for all configs in one shot */
546 configParam = vos_mem_malloc(configParamSize);
547
548 if(NULL == configParam )
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700551 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 VOS_ASSERT(0) ;
553 return VOS_STATUS_E_NOMEM;
554 }
555 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 tlvStruct = (tHalCfg *)configParam;
558 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 /* TODO: Remove Later */
560 /* QWLAN_HAL_CFG_STA_ID */
561 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
562 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
563 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
564 eSIR_SUCCESS)
565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
567 "Failed to get value for WNI_CFG_STA_ID");
568 goto handle_failure;
569 }
570 tlvStruct->length = strLength ;
571 /* calculate the pad bytes to have the CFG in aligned format */
572 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
573 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
575 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
577 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
581 != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
590 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
594 eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
603 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
615
616 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
617 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
618 tlvStruct->length = sizeof(tANI_U32);
619 configDataValue = (tANI_U32 *)(tlvStruct + 1);
620 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
621 configDataValue ) != eSIR_SUCCESS)
622 {
623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
624 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
625 goto handle_failure;
626 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
628 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 /* QWLAN_HAL_CFG_CAL_PERIOD */
630 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
631 tlvStruct->length = sizeof(tANI_U32);
632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
633 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
634 != eSIR_SUCCESS)
635 {
636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
637 "Failed to get value for WNI_CFG_CAL_PERIOD");
638 goto handle_failure;
639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
641 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* QWLAN_HAL_CFG_CAL_CONTROL */
643 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
647 != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_CAL_CONTROL");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_PROXIMITY */
656 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_PROXIMITY");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
669 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
682 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
686 eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
695 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
699 configDataValue ) != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
708 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
721 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
725 eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
734 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
747 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
760 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
764 configDataValue ) != eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length));
772
773 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
774 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
778 configDataValue ) != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
787 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
791 configDataValue ) != eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
799
800 /* QWLAN_HAL_CFG_FIXED_RATE */
801 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
802 tlvStruct->length = sizeof(tANI_U32);
803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
804 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
805 != eSIR_SUCCESS)
806 {
807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
808 "Failed to get value for WNI_CFG_FIXED_RATE");
809 goto handle_failure;
810 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
812 + sizeof(tHalCfg) + tlvStruct->length));
813
814 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
815 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
829 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
833 configDataValue ) != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
842 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
850 goto handle_failure;
851 }
852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
855 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
868 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
881 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
893
894#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
908#endif
909 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
923 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
935
936 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
976 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
989 /* QWLAN_HAL_CFG_STATS_PERIOD */
990 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_STATS_PERIOD");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1003 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1007 eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1016 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1020 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1024 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1025 tlvStruct->length = sizeof(tANI_U32);
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1028 != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1032 goto handle_failure;
1033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1035 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1037 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1038 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1040 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1041 &strLength) != eSIR_SUCCESS)
1042 {
1043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1044 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1045 goto handle_failure;
1046 }
1047 tlvStruct->length = strLength;
1048 /* calculate the pad bytes to have the CFG in aligned format */
1049 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1050 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1054 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1055 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1058 &strLength) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1062 goto handle_failure;
1063 }
1064 tlvStruct->length = strLength;
1065 /* calculate the pad bytes to have the CFG in aligned format */
1066 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1067 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1071 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1072 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1075 &strLength) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1079 goto handle_failure;
1080 }
1081 tlvStruct->length = strLength;
1082 /* calculate the pad bytes to have the CFG in aligned format */
1083 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1084 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1086 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001087 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1088 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1089 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1092 &strLength) != eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1096 goto handle_failure;
1097 }
1098 tlvStruct->length = strLength;
1099 /* calculate the pad bytes to have the CFG in aligned format */
1100 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1101 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1105 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1118 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1131 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1222 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1235 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1248 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1249 * into FW, so the parameters are added here.
1250 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1266 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
Wilson Tsaof8b37942013-09-06 10:49:00 -07001376 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1377 {
1378 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1379 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1387 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1395 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409 }
1410
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418
1419 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1420 {
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428 }
1429
1430 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1431 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
1437
Jeff Johnson32d95a32012-09-10 13:15:23 -07001438 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1443 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1444 wcnssCompiledApiVersion.minor,
1445 wcnssCompiledApiVersion.version,
1446 wcnssCompiledApiVersion.revision);
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
Jeff Johnsond13512a2012-07-17 11:42:19 -07001450 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1465 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1469 configDataValue ) != eSIR_SUCCESS)
1470 {
1471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1472 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1473 goto handle_failure;
1474 }
1475
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1480 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1484 != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001494 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1495 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001508#ifdef WLAN_SOFTAP_VSTA_FEATURE
1509 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522#endif
1523
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001524 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1525 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528
1529 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1530 != eSIR_SUCCESS)
1531 {
1532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1533 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1534 goto handle_failure;
1535 }
1536
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301540/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1541 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1545 configDataValue ) != eSIR_SUCCESS)
1546 {
1547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1548 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1549 goto handle_failure;
1550 }
1551
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301554#ifdef FEATURE_WLAN_TDLS
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301609
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001610 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1611 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1615 configDataValue ) != eSIR_SUCCESS)
1616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1619 goto handle_failure;
1620 }
1621
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001624
1625 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1626 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1630 != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1634 goto handle_failure;
1635 }
1636 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length));
1638
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301639 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1640 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301654 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1655 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1663 goto handle_failure;
1664 }
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301668 /* QWLAN_HAL_CFG_ATH_DISABLE */
1669 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1673 configDataValue ) != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ATH_DISABLE");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length) ;
1681
c_hpothu6d7dc922013-12-02 12:36:41 +05301682 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1683 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1691 goto handle_failure;
1692 }
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
1695
1696 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1697 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1701 configDataValue ) != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1705 goto handle_failure;
1706 }
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709
1710 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1711 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1715 configDataValue ) != eSIR_SUCCESS)
1716 {
1717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1718 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1719 goto handle_failure;
1720 }
1721 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1722 + sizeof(tHalCfg) + tlvStruct->length) ;
1723
1724 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1725 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1726 tlvStruct->length = sizeof(tANI_U32);
1727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1728 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1729 configDataValue ) != eSIR_SUCCESS)
1730 {
1731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1732 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1733 goto handle_failure;
1734 }
1735 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1736 + sizeof(tHalCfg) + tlvStruct->length) ;
1737
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301738 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1739 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1740 tlvStruct->length = sizeof(tANI_U32);
1741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1742 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1743 configDataValue ) != eSIR_SUCCESS)
1744 {
1745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1746 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1747 goto handle_failure;
1748 }
1749 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1750 + sizeof(tHalCfg) + tlvStruct->length) ;
1751
1752 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1753 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1754 tlvStruct->length = sizeof(tANI_U32);
1755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1756 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1757 configDataValue ) != eSIR_SUCCESS)
1758 {
1759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1760 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1761 goto handle_failure;
1762 }
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
1766 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1767 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001780 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1781 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
Jeff Johnson295189b2012-06-20 16:38:30 -07001794 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001795#ifdef WLAN_DEBUG
1796 {
1797 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1799 "****** Dumping CFG TLV ***** ");
1800 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1801 {
1802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1803 "%02x %02x %02x %02x %02x %02x %02x %02x",
1804 tlvStructStart[i],
1805 tlvStructStart[i+1],
1806 tlvStructStart[i+2],
1807 tlvStructStart[i+3],
1808 tlvStructStart[i+4],
1809 tlvStructStart[i+5],
1810 tlvStructStart[i+6],
1811 tlvStructStart[i+7]);
1812 }
1813 /* Dump the bytes in the last line*/
1814 for (; i < wdiStartParams->usConfigBufferLen; i++)
1815 {
1816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1817 "%02x ",tlvStructStart[i]);
1818 }
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1820 "**************************** ");
1821 }
1822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001823 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001824handle_failure:
1825 vos_mem_free(configParam);
1826 return VOS_STATUS_E_FAILURE;
1827}
Jeff Johnson295189b2012-06-20 16:38:30 -07001828/*
1829 * FUNCTION: WDA_wdiCompleteCB
1830 * call the voss call back function
1831 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001832void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001833{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1835 tWDA_CbContext *wdaContext;
1836
1837 if(NULL == pWdaParams)
1838 {
1839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001841 VOS_ASSERT(0) ;
1842 return ;
1843 }
1844
1845 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1846
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if (NULL == wdaContext)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001850 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 return ;
1852 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001853
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001855 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001859 vos_mem_free(pWdaParams);
1860
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if(WDI_STATUS_SUCCESS != status)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "WDI stop callback returned failure" );
1865 VOS_ASSERT(0) ;
1866 }
1867 else
1868 {
1869 wdaContext->wdaState = WDA_STOP_STATE;
1870 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001871
Leo Chang9d76f622013-08-23 16:34:52 -07001872 /* FTM Driver stop procedure should be synced.
1873 * Stop and Close will happen on same context */
1874 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1875 {
1876 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1877 {
1878 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1879 "%s: FTM Stop Event Set Fail", __func__);
1880 VOS_ASSERT(0);
1881 }
1882 }
1883
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001885 vos_WDAComplete_cback(wdaContext->pVosContext);
1886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 return ;
1888}
Jeff Johnson295189b2012-06-20 16:38:30 -07001889/*
1890 * FUNCTION: WDA_stop
1891 * call WDI_stop
1892 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001893VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1894{
1895 WDI_Status wdiStatus;
1896 VOS_STATUS status = VOS_STATUS_SUCCESS;
1897 WDI_StopReqParamsType *wdiStopReq;
1898 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001899 tWDA_ReqParams *pWdaParams ;
1900
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 if (NULL == pWDA)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001904 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001905 VOS_ASSERT(0);
1906 return VOS_STATUS_E_FAILURE;
1907 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001908 if (pWDA->wdiFailed == true)
1909 {
1910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001911 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001912 return VOS_STATUS_E_ALREADY;
1913 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001914
Jeff Johnson295189b2012-06-20 16:38:30 -07001915 /* FTM mode stay START_STATE */
1916 if( (WDA_READY_STATE != pWDA->wdaState) &&
1917 (WDA_INIT_STATE != pWDA->wdaState) &&
1918 (WDA_START_STATE != pWDA->wdaState) )
1919 {
1920 VOS_ASSERT(0);
1921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 wdiStopReq = (WDI_StopReqParamsType *)
1923 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1924 if(NULL == wdiStopReq)
1925 {
1926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001928 VOS_ASSERT(0);
1929 return VOS_STATUS_E_NOMEM;
1930 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001931
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 wdiStopReq->wdiStopReason = reason;
1933 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001934
1935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1936 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 VOS_ASSERT(0);
1941 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001942 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001944
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001945 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1946 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001947 {
1948 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001949 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001951
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001952 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1953 pWdaParams->wdaMsgParam = NULL;
1954 pWdaParams->pWdaContext = pWDA;
1955
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 /* call WDI stop */
1957 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001958 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1959
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1963 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1965 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 status = VOS_STATUS_E_FAILURE;
1967 }
Leo Chang9d76f622013-08-23 16:34:52 -07001968
1969 /* FTM Driver stop procedure should be synced.
1970 * Stop and Close will happen on same context */
1971 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1972 {
1973 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1974 WDI_RESPONSE_TIMEOUT);
1975 if (status != VOS_STATUS_SUCCESS)
1976 {
1977 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1978 "%s: FTM Stop Timepoout", __func__);
1979 VOS_ASSERT(0);
1980 vos_event_reset(&pWDA->ftmStopDoneEvent);
1981 }
1982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 return status;
1984}
Jeff Johnson295189b2012-06-20 16:38:30 -07001985/*
1986 * FUNCTION: WDA_close
1987 * call WDI_close and free the WDA context
1988 */
1989VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1990{
Jeff Johnson43971f52012-07-17 12:26:56 -07001991 VOS_STATUS status = VOS_STATUS_SUCCESS;
1992 WDI_Status wstatus;
1993 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001994 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if (NULL == wdaContext)
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001998 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 return VOS_STATUS_E_FAILURE;
2000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2002 (WDA_STOP_STATE != wdaContext->wdaState))
2003 {
2004 VOS_ASSERT(0);
2005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002007 wstatus = WDI_Close();
2008 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 {
2010 status = VOS_STATUS_E_FAILURE;
2011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002014 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2015 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002018 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 status = VOS_STATUS_E_FAILURE;
2020 }
2021
Jeff Johnson43971f52012-07-17 12:26:56 -07002022 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002023 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002026 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 status = VOS_STATUS_E_FAILURE;
2028 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002029 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002030 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002033 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 status = VOS_STATUS_E_FAILURE;
2035 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002036 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002037 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 {
2039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002040 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 status = VOS_STATUS_E_FAILURE;
2042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002043 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002044 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002045 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 {
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2048 "error in WDA close " );
2049 status = VOS_STATUS_E_FAILURE;
2050 }
2051 return status;
2052}
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2055 * returns 1 if the compiled version is greater than or equal to the input version
2056 */
2057
2058uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2059{
2060 VOS_STATUS status = VOS_STATUS_SUCCESS;
2061 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2062 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002063 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2065 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2066 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2067 (compiledVersion.revision >= revision)))
2068 return 1;
2069 else
2070 return 0;
2071}
Jeff Johnson295189b2012-06-20 16:38:30 -07002072/*
2073 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2074 * returns 1 if the compiled version is greater than or equal to the input version
2075 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002076uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2077{
2078 VOS_STATUS status = VOS_STATUS_SUCCESS;
2079 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2080 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2083 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2084 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2085 (reportedVersion.revision >= revision)))
2086 return 1;
2087 else
2088 return 0;
2089}
Jeff Johnson295189b2012-06-20 16:38:30 -07002090/*
2091 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2092 * Returns the version of the WCNSS WLAN API with which the HOST
2093 * device driver was compiled
2094 */
2095VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2096 tSirVersionType *pVersion)
2097{
2098 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002099 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002100 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 if ((NULL == pvosGCtx) || (NULL == pVersion))
2102 {
2103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002104 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 VOS_ASSERT(0);
2106 return VOS_STATUS_E_FAILURE;
2107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2109 if (NULL == pWDA )
2110 {
2111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002112 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 VOS_ASSERT(0);
2114 return VOS_STATUS_E_FAILURE;
2115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 *pVersion = pWDA->wcnssWlanCompiledVersion;
2117 return VOS_STATUS_SUCCESS;
2118}
Jeff Johnson295189b2012-06-20 16:38:30 -07002119/*
2120 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2121 * Returns the version of the WCNSS WLAN API with which the WCNSS
2122 * device driver was compiled
2123 */
2124VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2125 tSirVersionType *pVersion)
2126{
2127 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002129 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 if ((NULL == pvosGCtx) || (NULL == pVersion))
2131 {
2132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 VOS_ASSERT(0);
2135 return VOS_STATUS_E_FAILURE;
2136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2138 if (NULL == pWDA )
2139 {
2140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002141 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 VOS_ASSERT(0);
2143 return VOS_STATUS_E_FAILURE;
2144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 *pVersion = pWDA->wcnssWlanReportedVersion;
2146 return VOS_STATUS_SUCCESS;
2147}
Jeff Johnson295189b2012-06-20 16:38:30 -07002148/*
2149 * FUNCTION: WDA_GetWcnssSoftwareVersion
2150 * Returns the WCNSS Software version string
2151 */
2152VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2153 tANI_U8 *pVersion,
2154 tANI_U32 versionBufferSize)
2155{
2156 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002158 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 if ((NULL == pvosGCtx) || (NULL == pVersion))
2160 {
2161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002162 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 VOS_ASSERT(0);
2164 return VOS_STATUS_E_FAILURE;
2165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2167 if (NULL == pWDA )
2168 {
2169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002170 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_ASSERT(0);
2172 return VOS_STATUS_E_FAILURE;
2173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2175 return VOS_STATUS_SUCCESS;
2176}
Jeff Johnson295189b2012-06-20 16:38:30 -07002177/*
2178 * FUNCTION: WDA_GetWcnssHardwareVersion
2179 * Returns the WCNSS Hardware version string
2180 */
2181VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2182 tANI_U8 *pVersion,
2183 tANI_U32 versionBufferSize)
2184{
2185 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002187 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 if ((NULL == pvosGCtx) || (NULL == pVersion))
2189 {
2190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002191 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 VOS_ASSERT(0);
2193 return VOS_STATUS_E_FAILURE;
2194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2196 if (NULL == pWDA )
2197 {
2198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002199 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 VOS_ASSERT(0);
2201 return VOS_STATUS_E_FAILURE;
2202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2204 return VOS_STATUS_SUCCESS;
2205}
Jeff Johnson295189b2012-06-20 16:38:30 -07002206/*
2207 * FUNCTION: WDA_WniCfgDnld
2208 * Trigger CFG Download
2209 */
2210VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2211{
2212 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 v_VOID_t *pFileImage = NULL;
2215 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 v_VOID_t *pCfgBinary = NULL;
2217 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002219
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 if (NULL == pMac )
2221 {
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 VOS_ASSERT(0);
2225 return VOS_STATUS_E_FAILURE;
2226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 /* get the number of bytes in the CFG Binary... */
2228 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2229 &cbFileImageSize );
2230 if ( VOS_STATUS_E_NOMEM != vosStatus )
2231 {
2232 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2233 "Error obtaining binary size" );
2234 goto fail;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 // malloc a buffer to read in the Configuration binary file.
2237 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if ( NULL == pFileImage )
2239 {
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2241 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2242 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 vosStatus = VOS_STATUS_E_NOMEM;
2244 goto fail;
2245 }
2246
2247 /* Get the entire CFG file image... */
2248 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2249 &cbFileImageSize );
2250 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2251 {
2252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2253 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2254 cbFileImageSize );
2255 goto fail;
2256 }
2257
2258 /*
2259 * Validate the binary image. This function will return a pointer
2260 * and length where the CFG binary is located within the binary image file.
2261 */
2262 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2263 &pCfgBinary, &cbCfgBinarySize );
2264 if ( VOS_FALSE == bStatus )
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2267 "Error: Cannot find STA CFG in binary image file" );
2268 vosStatus = VOS_STATUS_E_FAILURE;
2269 goto fail;
2270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 /*
2272 * TODO: call the config download function
2273 * for now calling the existing cfg download API
2274 */
2275 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002276 vosStatus = VOS_STATUS_SUCCESS;
2277
2278 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002279
2280fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002281 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 return vosStatus;
2283}
Jeff Johnson295189b2012-06-20 16:38:30 -07002284/* -----------------------------------------------------------------
2285 * WDI interface
2286 * -----------------------------------------------------------------
2287 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002288/*
2289 * FUNCTION: WDA_suspendDataTxCallback
2290 * call back function called from TL after suspend Transmission
2291 */
2292VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2293 v_U8_t* ucSTAId,
2294 VOS_STATUS vosStatus)
2295{
2296 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002298 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 if (NULL == pWDA )
2300 {
2301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002302 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 VOS_ASSERT(0);
2304 return VOS_STATUS_E_FAILURE;
2305 }
2306 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2307 {
2308 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2309 }
2310 else
2311 {
2312 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 /* Trigger the event to bring the WDA TL suspend function to come
2315 * out of wait*/
2316 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2317 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002320 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 /* If TL suspended had timedout before this callback was called, resume back
2323 * TL.*/
2324 if (pWDA->txSuspendTimedOut)
2325 {
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002327 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 WDA_ResumeDataTx(pWDA);
2329 pWDA->txSuspendTimedOut = FALSE;
2330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 return VOS_STATUS_SUCCESS;
2332}
Jeff Johnson295189b2012-06-20 16:38:30 -07002333/*
2334 * FUNCTION: WDA_suspendDataTx
2335 * Update TL to suspend the data Transmission
2336 */
2337VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2338{
2339 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2340 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002341
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002343 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 if (pWDA->txSuspendTimedOut)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002348 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 return status;
2350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002351 /* Reset the event to be not signalled */
2352 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2353 if(!VOS_IS_STATUS_SUCCESS(status))
2354 {
2355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002356 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 return VOS_STATUS_E_FAILURE;
2358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002360 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 WDA_SuspendDataTxCallback);
2362 if(status != VOS_STATUS_SUCCESS)
2363 {
2364 return status;
2365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 /* Wait for the event to be set by the TL, to get the response of
2367 * suspending the TX queues, this event should be set by the Callback
2368 * function called by TL*/
2369 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2370 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2371 if(!VOS_IS_STATUS_SUCCESS(status))
2372 {
2373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2374 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002375 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 /* Set this flag to true when TL suspend times out, so that when TL
2377 * suspend eventually happens and calls the callback, TL can be resumed
2378 * right away by looking at this flag when true.*/
2379 pWDA->txSuspendTimedOut = TRUE;
2380 }
2381 else
2382 {
2383 pWDA->txSuspendTimedOut = FALSE;
2384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2386 {
2387 status = VOS_STATUS_SUCCESS;
2388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 return status;
2390}
Jeff Johnson295189b2012-06-20 16:38:30 -07002391/*
2392 * FUNCTION: WDA_resumeDataTx
2393 * Update TL to resume the data Transmission
2394 */
2395VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2396{
2397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002398
2399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002400 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002401
2402 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 return status;
2404}
Jeff Johnson295189b2012-06-20 16:38:30 -07002405/*
2406 * FUNCTION: WDA_InitScanReqCallback
2407 * Trigger Init SCAN callback
2408 */
2409void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2410{
2411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2412 tWDA_CbContext *pWDA;
2413 tInitScanParams *pWDA_ScanParam ;
2414 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_ASSERT(0) ;
2422 return ;
2423 }
2424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2425 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 if(NULL == pWDA_ScanParam)
2427 {
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002430 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2432 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 return ;
2434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 if(WDI_STATUS_SUCCESS != wdiStatus)
2436 {
2437 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if(VOS_STATUS_SUCCESS != status)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002441 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 }
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 /* free WDI command buffer */
2445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002447
Jeff Johnson295189b2012-06-20 16:38:30 -07002448
2449 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002450 /* without converting the Status to Failure or Success Just
2451 pass the same status to lim */
2452 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 /* send SCAN RSP message back to PE */
2454 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 return ;
2456}
2457
2458/*
2459 * FUNCTION: WDA_ProcessInitScanReq
2460 * Trigger Init SCAN in DAL
2461 */
2462VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2463 tInitScanParams *initScanParams)
2464{
2465 WDI_Status status = WDI_STATUS_SUCCESS ;
2466 WDI_InitScanReqParamsType *wdiInitScanParam =
2467 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2468 sizeof(WDI_InitScanReqParamsType)) ;
2469 tWDA_ReqParams *pWdaParams;
2470 tANI_U8 i = 0;
2471
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 if(NULL == wdiInitScanParam)
2475 {
2476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_NOMEM;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2482 if(NULL == pWdaParams)
2483 {
2484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 VOS_ASSERT(0);
2487 vos_mem_free(wdiInitScanParam);
2488 return VOS_STATUS_E_NOMEM;
2489 }
2490
2491 /* Copy init Scan params to WDI structure */
2492 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2493 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2494 sizeof(tSirMacAddr)) ;
2495 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2496 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2497 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2499 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2501 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2503 {
2504 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2505 initScanParams->scanEntry.bssIdx[i] ;
2506 }
2507
2508 /* if Frame length, copy macMgmtHdr or WDI structure */
2509 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2510 {
2511 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2512 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2513 }
2514 wdiInitScanParam->wdiReqStatusCB = NULL ;
2515
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 /* Store Init Req pointer, as this will be used for response */
2517 pWdaParams->pWdaContext = pWDA;
2518 pWdaParams->wdaMsgParam = initScanParams;
2519 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* first try to suspend TX */
2521 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 if(WDI_STATUS_SUCCESS != status)
2523 {
2524 goto handleWdiFailure;
2525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 /* call DAL API to pass init scan request to DAL */
2527 status = WDI_InitScanReq(wdiInitScanParam,
2528 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 if(IS_WDI_STATUS_FAILURE(status))
2530 {
2531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2532 "error in WDA Init Scan, Resume Tx " );
2533 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 VOS_ASSERT(0) ;
2535
2536 goto handleWdiFailure;
2537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002539handleWdiFailure:
2540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2541 "Failure in WDI Api, free all the memory " );
2542 /* free WDI command buffer */
2543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 /* send Failure to PE */
2546 initScanParams->status = eSIR_FAILURE ;
2547 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 return CONVERT_WDI2VOS_STATUS(status) ;
2549}
2550
Jeff Johnson295189b2012-06-20 16:38:30 -07002551/*
2552 * FUNCTION: WDA_StartScanReqCallback
2553 * send Start SCAN RSP back to PE
2554 */
2555void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2556 void* pUserData)
2557{
2558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2559 tWDA_CbContext *pWDA;
2560 tStartScanParams *pWDA_ScanParam;
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 if(NULL == pWdaParams)
2564 {
2565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 VOS_ASSERT(0) ;
2568 return ;
2569 }
2570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2571 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 if(NULL == pWDA_ScanParam)
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002575 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002577 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return ;
2579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2581 {
2582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002583 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002585 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 return ;
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2589 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002590
Jeff Johnson295189b2012-06-20 16:38:30 -07002591
2592 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002593 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 /* send SCAN RSP message back to PE */
2595 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return ;
2597}
2598
Jeff Johnson295189b2012-06-20 16:38:30 -07002599/*
2600 * FUNCTION: WDA_ProcessStartScanReq
2601 * Trigger start SCAN in WDI
2602 */
2603VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2604 tStartScanParams *startScanParams)
2605{
2606 WDI_Status status = WDI_STATUS_SUCCESS;
2607 WDI_StartScanReqParamsType *wdiStartScanParams =
2608 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2609 sizeof(WDI_StartScanReqParamsType)) ;
2610 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if(NULL == wdiStartScanParams)
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0);
2618 return VOS_STATUS_E_NOMEM;
2619 }
2620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2621 if(NULL == pWdaParams)
2622 {
2623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 VOS_ASSERT(0);
2626 vos_mem_free(wdiStartScanParams);
2627 return VOS_STATUS_E_NOMEM;
2628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 /* Copy init Scan params to WDI structure */
2630 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2631 wdiStartScanParams->wdiReqStatusCB = NULL ;
2632
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 /* Store Init Req pointer, as this will be used for response */
2634 /* store Params pass it to WDI */
2635 pWdaParams->pWdaContext = pWDA;
2636 pWdaParams->wdaMsgParam = startScanParams;
2637 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 /* call DAL API to pass init scan request to DAL */
2639 status = WDI_StartScanReq(wdiStartScanParams,
2640 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* failure returned by WDI API */
2642 if(IS_WDI_STATUS_FAILURE(status))
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "Failure in Start Scan WDI API, free all the memory "
2646 "It should be due to previous abort scan." );
2647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2648 vos_mem_free(pWdaParams) ;
2649 startScanParams->status = eSIR_FAILURE ;
2650 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return CONVERT_WDI2VOS_STATUS(status) ;
2653}
Jeff Johnson295189b2012-06-20 16:38:30 -07002654/*
2655 * FUNCTION: WDA_EndScanReqCallback
2656 * END SCAN callback
2657 */
2658void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2659{
2660 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2661 tWDA_CbContext *pWDA;
2662 tEndScanParams *endScanParam;
2663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002664 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 if(NULL == pWdaParams)
2666 {
2667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 VOS_ASSERT(0) ;
2670 return ;
2671 }
2672 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2673 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 if(NULL == endScanParam)
2675 {
2676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002677 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 return ;
2682 }
2683
2684 /* Free WDI command buffer */
2685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2686 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002688 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 /* send response back to PE */
2690 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2691 return ;
2692}
2693
Jeff Johnson295189b2012-06-20 16:38:30 -07002694/*
2695 * FUNCTION: WDA_ProcessEndScanReq
2696 * Trigger END SCAN in WDI
2697 */
2698VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2699 tEndScanParams *endScanParams)
2700{
2701 WDI_Status status = WDI_STATUS_SUCCESS;
2702 WDI_EndScanReqParamsType *wdiEndScanParams =
2703 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2704 sizeof(WDI_EndScanReqParamsType)) ;
2705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 if(NULL == wdiEndScanParams)
2709 {
2710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 return VOS_STATUS_E_NOMEM;
2714 }
2715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2716 if(NULL == pWdaParams)
2717 {
2718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 VOS_ASSERT(0);
2721 vos_mem_free(wdiEndScanParams);
2722 return VOS_STATUS_E_NOMEM;
2723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 /* Copy init Scan params to WDI structure */
2725 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2726 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 /* Store Init Req pointer, as this will be used for response */
2728 /* store Params pass it to WDI */
2729 pWdaParams->pWdaContext = pWDA;
2730 pWdaParams->wdaMsgParam = endScanParams;
2731 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 /* call DAL API to pass init scan request to DAL */
2733 status = WDI_EndScanReq(wdiEndScanParams,
2734 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 if(IS_WDI_STATUS_FAILURE(status))
2736 {
2737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2738 "Failure in End Scan WDI API, free all the memory "
2739 "It should be due to previous abort scan." );
2740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2741 vos_mem_free(pWdaParams) ;
2742 endScanParams->status = eSIR_FAILURE ;
2743 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 return CONVERT_WDI2VOS_STATUS(status) ;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_FinishScanReqCallback
2749 * Trigger Finish SCAN callback
2750 */
2751void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2752{
2753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2754 tWDA_CbContext *pWDA;
2755 tFinishScanParams *finishScanParam;
2756 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 if(NULL == pWdaParams)
2760 {
2761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 VOS_ASSERT(0) ;
2764 return ;
2765 }
2766
2767 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2768 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 if(NULL == finishScanParam)
2770 {
2771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2775 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 return ;
2777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2779 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /*
2781 * Now Resume TX, if we reached here means, TX is already suspended, we
2782 * have to resume it unconditionaly
2783 */
2784 status = WDA_ResumeDataTx(pWDA) ;
2785
2786 if(VOS_STATUS_SUCCESS != status)
2787 {
2788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002789 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002791 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2793 return ;
2794}
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_ProcessFinshScanReq
2797 * Trigger Finish SCAN in WDI
2798 */
2799VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2800 tFinishScanParams *finishScanParams)
2801{
2802 WDI_Status status = WDI_STATUS_SUCCESS;
2803 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2804 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2805 sizeof(WDI_FinishScanReqParamsType)) ;
2806 tWDA_ReqParams *pWdaParams ;
2807 tANI_U8 i = 0;
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if(NULL == wdiFinishScanParams)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0);
2815 return VOS_STATUS_E_NOMEM;
2816 }
2817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2818 if(NULL == pWdaParams)
2819 {
2820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_ASSERT(0);
2823 vos_mem_free(wdiFinishScanParams);
2824 return VOS_STATUS_E_NOMEM;
2825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 /* Copy init Scan params to WDI structure */
2827 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2828 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2829 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2831 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2832 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2833 finishScanParams->frameLength ;
2834 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2835 finishScanParams->currentOperChannel ;
2836 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2837 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2838 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2840 {
2841 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2842 finishScanParams->scanEntry.bssIdx[i] ;
2843 }
2844
2845
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 /* if Frame length, copy macMgmtHdr ro WDI structure */
2847 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2848 {
2849 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2850 &finishScanParams->macMgmtHdr,
2851 sizeof(WDI_MacMgmtHdr)) ;
2852 }
2853 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 /* Store Init Req pointer, as this will be used for response */
2855 /* store Params pass it to WDI */
2856 pWdaParams->pWdaContext = pWDA;
2857 pWdaParams->wdaMsgParam = finishScanParams;
2858 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* call DAL API to pass init scan request to DAL */
2860 status = WDI_FinishScanReq(wdiFinishScanParams,
2861 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002862
Jeff Johnson295189b2012-06-20 16:38:30 -07002863
2864 /*
2865 * WDI API returns failure..
2866 */
2867 if(IS_WDI_STATUS_FAILURE( status))
2868 {
2869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2870 "Failure in Finish Scan WDI API, free all the memory " );
2871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2872 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 finishScanParams->status = eSIR_FAILURE ;
2874 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 return CONVERT_WDI2VOS_STATUS(status) ;
2877}
Jeff Johnson295189b2012-06-20 16:38:30 -07002878/*---------------------------------------------------------------------
2879 * ASSOC API's
2880 *---------------------------------------------------------------------
2881 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002882/*
2883 * FUNCTION: WDA_JoinReqCallback
2884 * Trigger Init SCAN callback
2885 */
2886void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2887{
2888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2889 tWDA_CbContext *pWDA;
2890 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == pWdaParams)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
2898 return ;
2899 }
2900 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2901 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2903 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 /* reset macBSSID */
2905 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* reset macSTASelf */
2907 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002908 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 return ;
2911}
Jeff Johnson295189b2012-06-20 16:38:30 -07002912/*
2913 * FUNCTION: WDA_ProcessJoinReq
2914 * Trigger Join REQ in WDI
2915 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002916VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2917 tSwitchChannelParams* joinReqParam)
2918{
2919 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 WDI_JoinReqParamsType *wdiJoinReqParam =
2921 (WDI_JoinReqParamsType *)vos_mem_malloc(
2922 sizeof(WDI_JoinReqParamsType)) ;
2923 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 if(NULL == wdiJoinReqParam)
2927 {
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002931 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002941 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 return VOS_STATUS_E_NOMEM;
2943 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002944
2945 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2946 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2947 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2948 {
2949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2950 "%s: received join request when BSSID or self-STA is NULL "
2951 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002953 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2954 VOS_ASSERT(0);
2955 vos_mem_free(wdiJoinReqParam);
2956 vos_mem_free(pWdaParams);
2957 joinReqParam->status = eSIR_FAILURE ;
2958 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2959 return VOS_STATUS_E_INVAL;
2960 }
2961
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 /* copy the BSSID for pWDA */
2963 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2964 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2966 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2968 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002969#ifdef WLAN_FEATURE_VOWIFI
2970 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2971 joinReqParam->maxTxPower ;
2972#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2974 joinReqParam->localPowerConstraint ;
2975#endif
2976 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2977 joinReqParam->secondaryChannelOffset ;
2978 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2979
2980 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 /* Store Init Req pointer, as this will be used for response */
2982 /* store Params pass it to WDI */
2983 pWdaParams->pWdaContext = pWDA;
2984 pWdaParams->wdaMsgParam = joinReqParam;
2985 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 status = WDI_JoinReq(wdiJoinReqParam,
2987 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(IS_WDI_STATUS_FAILURE(status))
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2991 "Failure in Join WDI API, free all the memory " );
2992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2993 vos_mem_free(pWdaParams) ;
2994 joinReqParam->status = eSIR_FAILURE ;
2995 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 return CONVERT_WDI2VOS_STATUS(status) ;
2998}
Jeff Johnson295189b2012-06-20 16:38:30 -07002999/*
3000 * FUNCTION: WDA_SwitchChannelReqCallback
3001 * send Switch channel RSP back to PE
3002 */
3003void WDA_SwitchChannelReqCallback(
3004 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3005{
3006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3007 tWDA_CbContext *pWDA;
3008 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003010 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 if(NULL == pWdaParams)
3012 {
3013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003014 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 VOS_ASSERT(0) ;
3016 return ;
3017 }
3018 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3019 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3020
3021#ifdef WLAN_FEATURE_VOWIFI
3022 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3023#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3025 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003027 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 return ;
3030}
Jeff Johnson295189b2012-06-20 16:38:30 -07003031/*
3032 * FUNCTION: WDA_ProcessChannelSwitchReq
3033 * Request to WDI to switch channel REQ params.
3034 */
3035VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3036 tSwitchChannelParams *pSwitchChanParams)
3037{
3038 WDI_Status status = WDI_STATUS_SUCCESS ;
3039 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3040 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3041 sizeof(WDI_SwitchChReqParamsType)) ;
3042 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == wdiSwitchChanParam)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0);
3050 return VOS_STATUS_E_NOMEM;
3051 }
3052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3053 if(NULL == pWdaParams)
3054 {
3055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_ASSERT(0);
3058 vos_mem_free(wdiSwitchChanParam);
3059 return VOS_STATUS_E_NOMEM;
3060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3062#ifndef WLAN_FEATURE_VOWIFI
3063 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3064 pSwitchChanParams->localPowerConstraint;
3065#endif
3066 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3067 pSwitchChanParams->secondaryChannelOffset;
3068 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 /* Store req pointer, as this will be used for response */
3070 /* store Params pass it to WDI */
3071 pWdaParams->pWdaContext = pWDA;
3072 pWdaParams->wdaMsgParam = pSwitchChanParams;
3073 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074#ifdef WLAN_FEATURE_VOWIFI
3075 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3076 = pSwitchChanParams->maxTxPower;
3077 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3078 pSwitchChanParams ->selfStaMacAddr,
3079 sizeof(tSirMacAddr));
3080#endif
3081 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3082 pSwitchChanParams->bssId,
3083 sizeof(tSirMacAddr));
3084
3085 status = WDI_SwitchChReq(wdiSwitchChanParam,
3086 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 if(IS_WDI_STATUS_FAILURE(status))
3088 {
3089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3090 "Failure in process channel switch Req WDI API, free all the memory " );
3091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3092 vos_mem_free(pWdaParams) ;
3093 pSwitchChanParams->status = eSIR_FAILURE ;
3094 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 return CONVERT_WDI2VOS_STATUS(status) ;
3097}
Jeff Johnson295189b2012-06-20 16:38:30 -07003098/*
3099 * FUNCTION: WDA_ConfigBssReqCallback
3100 * config BSS Req Callback, called by WDI
3101 */
3102void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3103 ,void* pUserData)
3104{
3105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3106 tWDA_CbContext *pWDA;
3107 tAddBssParams *configBssReqParam;
3108 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(NULL == pWdaParams)
3112 {
3113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 VOS_ASSERT(0) ;
3116 return ;
3117 }
3118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3119 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3120 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003122 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3124 {
3125 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3126 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3128 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3129 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3130
3131 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3132 {
3133 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3134 {
3135 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3136 staConfigBssParam->staType = STA_ENTRY_BSSID;
3137 }
3138 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3139 (staConfigBssParam->staType == STA_ENTRY_SELF))
3140 {
3141 /* This is the 1st add BSS Req for the BTAMP STA */
3142 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3143 staConfigBssParam->staType = STA_ENTRY_BSSID;
3144 }
3145 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3146 (staConfigBssParam->staType == STA_ENTRY_PEER))
3147 {
3148 /* This is the 2nd ADD BSS Request that is sent
3149 * on the BTAMP STA side. The Sta type is
3150 * set to STA_ENTRY_PEER here.*/
3151 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3152 }
3153 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3154 (staConfigBssParam->staType == STA_ENTRY_SELF))
3155 {
3156 /* statype is already set by PE.
3157 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3158 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3159 staConfigBssParam->staType = STA_ENTRY_BSSID;
3160 }
3161 else
3162 {
3163 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3164 staConfigBssParam->staType = STA_ENTRY_PEER;
3165 }
3166 }
3167 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3168 {
3169 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3170 staConfigBssParam->staType = STA_ENTRY_SELF;
3171 }
3172 else
3173 {
3174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3175 "Invalid operation mode specified");
3176 VOS_ASSERT(0);
3177 }
3178
3179 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3184 sizeof(tSirMacAddr));
3185 staConfigBssParam->txChannelWidthSet =
3186 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3188 staConfigBssParam->htCapable)
3189 {
3190 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3191 wdiConfigBssRsp->ucBSSIdx;
3192 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3193 WDA_VALID_STA_INDEX ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3196 wdiConfigBssRsp->ucBSSIdx,
3197 wdiConfigBssRsp->ucSTAIdx))
3198 {
3199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_ASSERT(0) ;
3202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0) ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209#ifdef WLAN_FEATURE_VOWIFI
3210 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3211#endif
3212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3214 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 return ;
3217}
Jeff Johnson295189b2012-06-20 16:38:30 -07003218/*
3219 * FUNCTION: WDA_UpdateEdcaParamsForAC
3220 * Update WDI EDCA params with PE edca params
3221 */
3222void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3223 WDI_EdcaParamRecord *wdiEdcaParam,
3224 tSirMacEdcaParamRecord *macEdcaParam)
3225{
3226 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3227 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3228 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3229 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3230 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3231 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3232}
Jeff Johnson295189b2012-06-20 16:38:30 -07003233/*
3234 * FUNCTION: WDA_ProcessConfigBssReq
3235 * Configure BSS before starting Assoc with AP
3236 */
3237VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3238 tAddBssParams* configBssReqParam)
3239{
3240 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303241 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303245 if (NULL == configBssReqParam)
3246 {
3247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3248 "%s: configBssReqParam is NULL", __func__);
3249 return VOS_STATUS_E_INVAL;
3250 }
3251
3252 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3253 sizeof(WDI_ConfigBSSReqParamsType)) ;
3254
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 if(NULL == wdiConfigBssReqParam)
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0);
3260 return VOS_STATUS_E_NOMEM;
3261 }
3262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3263 if(NULL == pWdaParams)
3264 {
3265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 VOS_ASSERT(0);
3268 vos_mem_free(wdiConfigBssReqParam);
3269 return VOS_STATUS_E_NOMEM;
3270 }
Kiran4a17ebe2013-01-31 10:43:43 -08003271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3272 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3275 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 /* Store Init Req pointer, as this will be used for response */
3277 /* store Params pass it to WDI */
3278 pWdaParams->pWdaContext = pWDA;
3279 pWdaParams->wdaMsgParam = configBssReqParam;
3280 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3282 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if(IS_WDI_STATUS_FAILURE(status))
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3286 "Failure in Config BSS WDI API, free all the memory " );
3287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return CONVERT_WDI2VOS_STATUS(status) ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294#ifdef ENABLE_HAL_COMBINED_MESSAGES
3295/*
3296 * FUNCTION: WDA_PostAssocReqCallback
3297 * Post ASSOC req callback, send RSP back to PE
3298 */
3299void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3300 void* pUserData)
3301{
3302 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3303 tPostAssocParams *postAssocReqParam =
3304 (tPostAssocParams *)pWDA->wdaMsgParam ;
3305 /*STA context within the BSS Params*/
3306 tAddStaParams *staPostAssocParam =
3307 &postAssocReqParam->addBssParams.staContext ;
3308 /*STA Params for self STA*/
3309 tAddStaParams *selfStaPostAssocParam =
3310 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003314 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3316 {
3317 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3318 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3319 sizeof(tSirMacAddr)) ;
3320 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3321 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3322 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3324 }
3325 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3326 pWDA->wdaWdiApiMsgParam = NULL;
3327 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 return ;
3330}
Jeff Johnson295189b2012-06-20 16:38:30 -07003331/*
3332 * FUNCTION: WDA_ProcessPostAssocReq
3333 * Trigger POST ASSOC processing in WDI
3334 */
3335VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3336 tPostAssocParams *postAssocReqParam)
3337{
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 WDI_Status status = WDI_STATUS_SUCCESS ;
3339
3340 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3341 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3342 sizeof(WDI_PostAssocReqParamsType)) ;
3343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003345
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 if(NULL == wdiPostAssocReqParam)
3347 {
3348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 VOS_ASSERT(0);
3351 return VOS_STATUS_E_NOMEM;
3352 }
3353
3354 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3355 {
3356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003357 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 VOS_ASSERT(0);
3359 return VOS_STATUS_E_FAILURE;
3360 }
3361
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 /* update BSS params into WDI structure */
3363 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3364 &postAssocReqParam->addBssParams) ;
3365 /* update STA params into WDI structure */
3366 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3367 &postAssocReqParam->addStaParams) ;
3368
3369 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3370 postAssocReqParam->addBssParams.highPerformance;
3371 WDA_UpdateEdcaParamsForAC(pWDA,
3372 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3373 &postAssocReqParam->addBssParams.acbe);
3374 WDA_UpdateEdcaParamsForAC(pWDA,
3375 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3376 &postAssocReqParam->addBssParams.acbk);
3377 WDA_UpdateEdcaParamsForAC(pWDA,
3378 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3379 &postAssocReqParam->addBssParams.acvi);
3380 WDA_UpdateEdcaParamsForAC(pWDA,
3381 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3382 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 /* Store Init Req pointer, as this will be used for response */
3384 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 /* store Params pass it to WDI */
3386 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3388 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 if(IS_WDI_STATUS_FAILURE(status))
3390 {
3391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3392 "Failure in Post Assoc WDI API, free all the memory " );
3393 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3394 pWDA->wdaWdiApiMsgParam = NULL;
3395 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 return CONVERT_WDI2VOS_STATUS(status) ;
3400}
3401#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003402/*
3403 * FUNCTION: WDA_AddStaReqCallback
3404 * ADD STA req callback, send RSP back to PE
3405 */
3406void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3407 void* pUserData)
3408{
3409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3410 tWDA_CbContext *pWDA;
3411 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 if(NULL == pWdaParams)
3415 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 VOS_ASSERT(0) ;
3418 return ;
3419 }
3420 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3421 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003423 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3425 {
3426 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3427 /*TODO: UMAC structure doesn't have these fields*/
3428 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3429 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3430 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3431 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3432 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3433 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003434#ifdef FEATURE_WLAN_TDLS
3435 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3436 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3437#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003439#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 {
3441 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3442 wdiConfigStaRsp->ucBssIdx;
3443 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3444 WDA_VALID_STA_INDEX ;
3445 }
3446 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3447 {
3448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003449 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 VOS_ASSERT(0) ;
3451 return ;
3452 }
3453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3455 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 return ;
3458}
Jeff Johnson295189b2012-06-20 16:38:30 -07003459/*
3460 * FUNCTION: WDA_ConfigStaReq
3461 * Trigger Config STA processing in WDI
3462 */
3463VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3464 tAddStaParams *addStaReqParam)
3465{
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3468 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3469 sizeof(WDI_ConfigSTAReqParamsType)) ;
3470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 if(NULL == wdiConfigStaReqParam)
3474 {
3475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 VOS_ASSERT(0);
3478 return VOS_STATUS_E_NOMEM;
3479 }
3480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3481 if(NULL == pWdaParams)
3482 {
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 VOS_ASSERT(0);
3486 vos_mem_free(wdiConfigStaReqParam);
3487 return VOS_STATUS_E_NOMEM;
3488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 /* update STA params into WDI structure */
3491 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3492 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 /* Store Init Req pointer, as this will be used for response */
3494 /* store Params pass it to WDI */
3495 pWdaParams->pWdaContext = pWDA;
3496 pWdaParams->wdaMsgParam = addStaReqParam;
3497 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3499 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 if(IS_WDI_STATUS_FAILURE(status))
3501 {
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3503 "Failure in Config STA WDI API, free all the memory " );
3504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3505 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 return CONVERT_WDI2VOS_STATUS(status) ;
3510}
Jeff Johnson295189b2012-06-20 16:38:30 -07003511/*
3512 * FUNCTION: WDA_DelBSSReqCallback
3513 * Dens DEL BSS RSP back to PE
3514 */
3515void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3516 void* pUserData)
3517{
3518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3519 tWDA_CbContext *pWDA;
3520 tDeleteBssParams *delBssReqParam;
3521 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 if(NULL == pWdaParams)
3525 {
3526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 VOS_ASSERT(0) ;
3529 return ;
3530 }
3531 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3532 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003533 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3535 {
3536 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3537 sizeof(tSirMacAddr)) ;
3538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3540 {
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003542 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 VOS_ASSERT(0) ;
3544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3546 {
3547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003548 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 VOS_ASSERT(0) ;
3550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0) ;
3556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3558 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 /* reset the the system role*/
3560 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3561
3562 /* Reset the BA related information */
3563 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3564 {
3565 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3566 {
3567 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3568 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3569 /* Reset framesTxed counters here */
3570 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3571 {
3572 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3573 }
3574 }
3575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 return ;
3578}
3579
Jeff Johnson295189b2012-06-20 16:38:30 -07003580/*
3581 * FUNCTION: WDA_ProcessDelBssReq
3582 * Init DEL BSS req with WDI
3583 */
3584VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3585 tDeleteBssParams *delBssParam)
3586{
3587 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3589 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3590 sizeof(WDI_DelBSSReqParamsType)) ;
3591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 if(NULL == wdiDelBssReqParam)
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_ASSERT(0);
3599 return VOS_STATUS_E_NOMEM;
3600 }
3601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3602 if(NULL == pWdaParams)
3603 {
3604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 VOS_ASSERT(0);
3607 vos_mem_free(wdiDelBssReqParam);
3608 return VOS_STATUS_E_NOMEM;
3609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3611 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3612
3613 /* Store Init Req pointer, as this will be used for response */
3614 /* store Params pass it to WDI */
3615 pWdaParams->pWdaContext = pWDA;
3616 pWdaParams->wdaMsgParam = delBssParam;
3617 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 status = WDI_DelBSSReq(wdiDelBssReqParam,
3619 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 if(IS_WDI_STATUS_FAILURE(status))
3621 {
3622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3623 "Failure in Del BSS WDI API, free all the memory " );
3624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3625 vos_mem_free(pWdaParams) ;
3626 delBssParam->status = eSIR_FAILURE ;
3627 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 return CONVERT_WDI2VOS_STATUS(status) ;
3630}
Jeff Johnson295189b2012-06-20 16:38:30 -07003631/*
3632 * FUNCTION: WDA_DelSTAReqCallback
3633 * Dens DEL STA RSP back to PE
3634 */
3635void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3636 void* pUserData)
3637{
3638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3639 tWDA_CbContext *pWDA;
3640 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 VOS_ASSERT(0) ;
3648 return ;
3649 }
3650 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3651 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003652 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3654 {
3655 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3656 {
3657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003658 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 VOS_ASSERT(0) ;
3660 }
3661 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3662 }
3663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3664 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 /*Reset the BA information corresponding to this STAIdx */
3666 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3667 WDA_INVALID_STA_INDEX;
3668 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3669
3670 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 return ;
3672}
Jeff Johnson295189b2012-06-20 16:38:30 -07003673/*
3674 * FUNCTION: WDA_ProcessDelStaReq
3675 * Init DEL STA req with WDI
3676 */
3677VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3678 tDeleteStaParams *delStaParam)
3679{
3680 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3682 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3683 sizeof(WDI_DelSTAReqParamsType)) ;
3684 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003686 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 if(NULL == wdiDelStaReqParam)
3688 {
3689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 VOS_ASSERT(0);
3692 return VOS_STATUS_E_NOMEM;
3693 }
3694 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3695 if(NULL == pWdaParams)
3696 {
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 VOS_ASSERT(0);
3700 vos_mem_free(wdiDelStaReqParam);
3701 return VOS_STATUS_E_NOMEM;
3702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3704 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 /* Store Init Req pointer, as this will be used for response */
3706 /* store Params pass it to WDI */
3707 pWdaParams->pWdaContext = pWDA;
3708 pWdaParams->wdaMsgParam = delStaParam;
3709 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 status = WDI_DelSTAReq(wdiDelStaReqParam,
3711 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 if(IS_WDI_STATUS_FAILURE(status))
3713 {
3714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3715 "Failure in Del STA WDI API, free all the memory status = %d",
3716 status );
3717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3718 vos_mem_free(pWdaParams) ;
3719 delStaParam->status = eSIR_FAILURE ;
3720 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 return CONVERT_WDI2VOS_STATUS(status) ;
3723}
Jeff Johnson295189b2012-06-20 16:38:30 -07003724void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3725{
3726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3727 tWDA_CbContext *pWDA;
3728 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(NULL == pWdaParams)
3732 {
3733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 VOS_ASSERT(0) ;
3736 return ;
3737 }
3738 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3739 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3741 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3743 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3744 pwdiAddSTASelfRsp->macSelfSta,
3745 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 return ;
3748}
Jeff Johnson295189b2012-06-20 16:38:30 -07003749/*
3750 * FUNCTION: WDA_ProcessAddStaSelfReq
3751 *
3752 */
3753VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3754{
3755 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003756 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3758 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3759 sizeof(WDI_AddSTASelfReqParamsType)) ;
3760 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 if( NULL == wdiAddStaSelfReq )
3764 {
3765 VOS_ASSERT( 0 );
3766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003767 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 return( VOS_STATUS_E_NOMEM );
3769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 if( NULL == pWdaParams )
3772 {
3773 VOS_ASSERT( 0 );
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003775 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 vos_mem_free(wdiAddStaSelfReq) ;
3777 return( VOS_STATUS_E_NOMEM );
3778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003781 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 /* Store Init Req pointer, as this will be used for response */
3783 /* store Params pass it to WDI */
3784 pWdaParams->pWdaContext = pWDA;
3785 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3786 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003787 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003788
Jeff Johnson43971f52012-07-17 12:26:56 -07003789 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 {
3791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3792 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003793 wstatus );
3794 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3796 vos_mem_free(pWdaParams) ;
3797 pAddStaSelfReq->status = eSIR_FAILURE ;
3798 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3799 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003800 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801}
Jeff Johnson295189b2012-06-20 16:38:30 -07003802/*
3803 * FUNCTION: WDA_DelSTASelfRespCallback
3804 *
3805 */
3806void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3807 wdiDelStaSelfRspParams , void* pUserData)
3808{
3809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3810 tWDA_CbContext *pWDA;
3811 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 if (NULL == pWdaParams)
3815 {
3816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003817 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003818 VOS_ASSERT(0);
3819 return;
3820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3822 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003824 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825
3826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3827 vos_mem_free(pWdaParams) ;
3828
3829 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 return ;
3831}
Jeff Johnson295189b2012-06-20 16:38:30 -07003832/*
3833 * FUNCTION: WDA_DelSTASelfReqCallback
3834 *
3835 */
3836void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3837 void* pUserData)
3838{
3839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3840 tWDA_CbContext *pWDA;
3841 tDelStaSelfParams *delStaSelfParams;
3842
3843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303844 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003845 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003846
3847 if (NULL == pWdaParams)
3848 {
3849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003850 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 VOS_ASSERT(0);
3852 return;
3853 }
3854
3855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3856 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3857
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003858 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003859
3860 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3861 {
3862 VOS_ASSERT(0);
3863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3864 vos_mem_free(pWdaParams) ;
3865 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3866 }
3867
3868 return ;
3869}
3870
3871/*
3872 * FUNCTION: WDA_DelSTASelfReq
3873 * Trigger Config STA processing in WDI
3874 */
3875VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3876 tDelStaSelfParams* pDelStaSelfReqParam)
3877{
3878 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003879 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 tWDA_ReqParams *pWdaParams = NULL;
3881 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3882 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3883 sizeof(WDI_DelSTASelfReqParamsType)) ;
3884
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 if( NULL == wdiDelStaSelfReq )
3888 {
3889 VOS_ASSERT( 0 );
3890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 return( VOS_STATUS_E_NOMEM );
3893 }
3894
3895 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3896 if( NULL == pWdaParams )
3897 {
3898 VOS_ASSERT( 0 );
3899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 vos_mem_free(wdiDelStaSelfReq) ;
3902 return( VOS_STATUS_E_NOMEM );
3903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 pWdaParams->pWdaContext = pWDA;
3905 /* Store param pointer as passed in by caller */
3906 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3907 /* store Params pass it to WDI */
3908 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3910 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3911
3912 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3913 wdiDelStaSelfReq->pUserData = pWdaParams;
3914
Jeff Johnson43971f52012-07-17 12:26:56 -07003915 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3917
Jeff Johnson43971f52012-07-17 12:26:56 -07003918 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 {
3920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3921 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3922 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003923 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3925 vos_mem_free(pWdaParams) ;
3926 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3927 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3928 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003929 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930}
3931
Jeff Johnson295189b2012-06-20 16:38:30 -07003932/*
3933 * FUNCTION: WDA_SendMsg
3934 * Send Message back to PE
3935 */
3936void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3937 void *pBodyptr, tANI_U32 bodyVal)
3938{
3939 tSirMsgQ msg = {0} ;
3940 tANI_U32 status = VOS_STATUS_SUCCESS ;
3941 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 msg.type = msgType;
3943 msg.bodyval = bodyVal;
3944 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 if (VOS_STATUS_SUCCESS != status)
3947 {
3948 if(NULL != pBodyptr)
3949 {
3950 vos_mem_free(pBodyptr);
3951 }
3952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003953 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 VOS_ASSERT(0) ;
3955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 return ;
3957}
Jeff Johnson295189b2012-06-20 16:38:30 -07003958/*
3959 * FUNCTION: WDA_UpdateBSSParams
3960 * Translated WDA/PE BSS info into WDI BSS info..
3961 */
3962void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3963 WDI_ConfigBSSReqInfoType *wdiBssParams,
3964 tAddBssParams *wdaBssParams)
3965{
3966 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 /* copy bssReq Params to WDI structure */
3968 vos_mem_copy(wdiBssParams->macBSSID,
3969 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3970 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3971 sizeof(tSirMacAddr)) ;
3972 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3973 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3974 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 wdiBssParams->ucShortSlotTimeSupported =
3976 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3978 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3979 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3980 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3981 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3982
3983 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3984 wdiBssParams->ucTXOPProtectionFullSupport =
3985 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3987 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3990 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3991 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3992 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3993
Chet Lanctot186b5732013-03-18 10:26:30 -07003994 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3995
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 /* copy SSID into WDI structure */
3997 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3998 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3999 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4001 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003#ifdef WLAN_FEATURE_VOWIFI
4004 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4005#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008#ifdef WLAN_FEATURE_VOWIFI_11R
4009 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 if(wdiBssParams->bExtSetStaKeyParamValid)
4011 {
4012 /* copy set STA key params to WDI structure */
4013 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4014 wdaBssParams->extSetStaKeyParam.staIdx;
4015 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4016 wdaBssParams->extSetStaKeyParam.encType;
4017 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4018 wdaBssParams->extSetStaKeyParam.wepType;
4019 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4020 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4022 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004023 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4025 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4026 {
4027 WDA_GetWepKeysFromCfg( pWDA,
4028 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4029 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4030 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4031 }
4032 else
4033 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4035 keyIndex++)
4036 {
4037 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4038 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4039 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4040 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4041 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4042 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4044 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4045 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4046 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4047 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4048 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4049 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4050 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4053 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 }
4055 }
4056 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4057 }
4058 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4059 {
4060 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4061 sizeof(wdaBssParams->extSetStaKeyParam) );
4062 }
4063#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004064#ifdef WLAN_FEATURE_11AC
4065 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4066 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4067#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004068
4069 return ;
4070}
Jeff Johnson295189b2012-06-20 16:38:30 -07004071/*
4072 * FUNCTION: WDA_UpdateSTAParams
4073 * Translated WDA/PE BSS info into WDI BSS info..
4074 */
4075void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4076 WDI_ConfigStaReqInfoType *wdiStaParams,
4077 tAddStaParams *wdaStaParams)
4078{
4079 tANI_U8 i = 0;
4080 /* Update STA params */
4081 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4082 sizeof(tSirMacAddr)) ;
4083 wdiStaParams->usAssocId = wdaStaParams->assocId;
4084 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004085 wdiStaParams->staIdx = wdaStaParams->staIdx;
4086
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 wdiStaParams->ucShortPreambleSupported =
4088 wdaStaParams->shortPreambleSupported;
4089 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4090 sizeof(tSirMacAddr)) ;
4091 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4092
4093 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4094
4095 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4096 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4097 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4098 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4099 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4100 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4101 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4102
4103 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4104 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 wdiStaParams->wdiSupportedRates.opRateMode =
4106 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4108 {
4109 wdiStaParams->wdiSupportedRates.llbRates[i] =
4110 wdaStaParams->supportedRates.llbRates[i];
4111 }
4112 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4113 {
4114 wdiStaParams->wdiSupportedRates.llaRates[i] =
4115 wdaStaParams->supportedRates.llaRates[i];
4116 }
4117 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4118 {
4119 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4120 wdaStaParams->supportedRates.aniLegacyRates[i];
4121 }
4122 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4123 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004124#ifdef WLAN_FEATURE_11AC
4125 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4126 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4127 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4128 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4129#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4131 {
4132 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4133 wdaStaParams->supportedRates.supportedMCSSet[i];
4134 }
4135 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4136 wdaStaParams->supportedRates.rxHighestDataRate;
4137
4138 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4139
4140 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4141
4142 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4143 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4144 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4145
4146 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4147 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4148 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4149 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004151#ifdef WLAN_FEATURE_11AC
4152 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4153 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004154 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004155#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004156 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4157 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 return ;
4159}
Jeff Johnson295189b2012-06-20 16:38:30 -07004160/*
4161 * -------------------------------------------------------------------------
4162 * CFG update to WDI
4163 * -------------------------------------------------------------------------
4164 */
4165
4166 /*
4167 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4168 * Convert the WNI CFG ID to HAL CFG ID
4169 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004170static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004171{
4172 switch(wniCfgId)
4173 {
4174 case WNI_CFG_STA_ID:
4175 return QWLAN_HAL_CFG_STA_ID;
4176 case WNI_CFG_CURRENT_TX_ANTENNA:
4177 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4178 case WNI_CFG_CURRENT_RX_ANTENNA:
4179 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4180 case WNI_CFG_LOW_GAIN_OVERRIDE:
4181 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4182 case WNI_CFG_POWER_STATE_PER_CHAIN:
4183 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4184 case WNI_CFG_CAL_PERIOD:
4185 return QWLAN_HAL_CFG_CAL_PERIOD;
4186 case WNI_CFG_CAL_CONTROL:
4187 return QWLAN_HAL_CFG_CAL_CONTROL;
4188 case WNI_CFG_PROXIMITY:
4189 return QWLAN_HAL_CFG_PROXIMITY;
4190 case WNI_CFG_NETWORK_DENSITY:
4191 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4192 case WNI_CFG_MAX_MEDIUM_TIME:
4193 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4194 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4195 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4196 case WNI_CFG_RTS_THRESHOLD:
4197 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4198 case WNI_CFG_SHORT_RETRY_LIMIT:
4199 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4200 case WNI_CFG_LONG_RETRY_LIMIT:
4201 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4202 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4203 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4204 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4205 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4206 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4207 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4208 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4209 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4210 case WNI_CFG_FIXED_RATE:
4211 return QWLAN_HAL_CFG_FIXED_RATE;
4212 case WNI_CFG_RETRYRATE_POLICY:
4213 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4214 case WNI_CFG_RETRYRATE_SECONDARY:
4215 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4216 case WNI_CFG_RETRYRATE_TERTIARY:
4217 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4218 case WNI_CFG_FORCE_POLICY_PROTECTION:
4219 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4220 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4221 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4222 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4223 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4224 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4225 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4226 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4227 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4228 case WNI_CFG_MAX_BA_SESSIONS:
4229 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4230 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4231 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4232 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4233 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4234 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4235 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4236 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4237 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4238 case WNI_CFG_STATS_PERIOD:
4239 return QWLAN_HAL_CFG_STATS_PERIOD;
4240 case WNI_CFG_CFP_MAX_DURATION:
4241 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4242#if 0 /*This is not part of CFG*/
4243 case WNI_CFG_FRAME_TRANS_ENABLED:
4244 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4245#endif
4246 case WNI_CFG_DTIM_PERIOD:
4247 return QWLAN_HAL_CFG_DTIM_PERIOD;
4248 case WNI_CFG_EDCA_WME_ACBK:
4249 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4250 case WNI_CFG_EDCA_WME_ACBE:
4251 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4252 case WNI_CFG_EDCA_WME_ACVI:
4253 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4254 case WNI_CFG_EDCA_WME_ACVO:
4255 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4256#if 0
4257 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4258 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4259 case WNI_CFG_TELE_BCN_TRANS_LI:
4260 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4261 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4262 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4263 case WNI_CFG_TELE_BCN_MAX_LI:
4264 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4265 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4266 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4267#endif
4268 case WNI_CFG_ENABLE_CLOSE_LOOP:
4269 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004270 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4271 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 default:
4273 {
4274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004275 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 wniCfgId);
4277 return VOS_STATUS_E_INVAL;
4278 }
4279 }
4280}
Jeff Johnson295189b2012-06-20 16:38:30 -07004281/*
4282 * FUNCTION: WDA_UpdateCfgCallback
4283 *
4284 */
4285void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4286{
4287 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4288 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4289 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 /*
4293 * currently there is no response message is expected between PE and
4294 * WDA, Failure return from WDI is a ASSERT condition
4295 */
4296 if(WDI_STATUS_SUCCESS != wdiStatus)
4297 {
4298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004299 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4301 }
4302
4303 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4304 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4305 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 return ;
4307}
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
4309 * FUNCTION: WDA_UpdateCfg
4310 *
4311 */
4312VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4313{
4314
4315 WDI_Status status = WDI_STATUS_SUCCESS ;
4316 tANI_U32 val =0;
4317 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4318 tHalCfg *configData;
4319 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4320 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 if (NULL == pMac )
4324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004326 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 return VOS_STATUS_E_FAILURE;
4328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 if(WDA_START_STATE != pWDA->wdaState)
4330 {
4331 return VOS_STATUS_E_FAILURE;
4332 }
4333
4334 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4335 {
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004337 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 VOS_ASSERT(0);
4339 return VOS_STATUS_E_FAILURE;
4340 }
4341
4342 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4343 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 if(NULL == wdiCfgReqParam)
4345 {
4346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 VOS_ASSERT(0);
4349 return VOS_STATUS_E_NOMEM;
4350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4352 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 if(NULL == wdiCfgReqParam->pConfigBuffer)
4354 {
4355 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 vos_mem_free(wdiCfgReqParam);
4358 VOS_ASSERT(0);
4359 return VOS_STATUS_E_NOMEM;
4360 }
4361
4362 /*convert the WNI CFG Id to HAL CFG Id*/
4363 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4364 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4365
4366 /*TODO: revisit this for handling string parameters */
4367 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4368 &val) != eSIR_SUCCESS)
4369 {
4370 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004371 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4373 vos_mem_free(wdiCfgReqParam);
4374 return eSIR_FAILURE;
4375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4377 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4378 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4379 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4380 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4381
4382 /* store Params pass it to WDI */
4383 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4385 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4386 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(IS_WDI_STATUS_FAILURE(status))
4388 {
4389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4390 "Failure in Update CFG WDI API, free all the memory " );
4391 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4392 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4393 pWDA->wdaWdiCfgApiMsgParam = NULL;
4394 /* Failure is not expected */
4395 VOS_ASSERT(0) ;
4396 }
4397#else
4398 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4399 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4400 pWDA->wdaWdiCfgApiMsgParam = NULL;
4401#endif
4402 return CONVERT_WDI2VOS_STATUS(status) ;
4403}
4404
Jeff Johnson295189b2012-06-20 16:38:30 -07004405VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4406 v_U8_t *pDefaultKeyId,
4407 v_U8_t *pNumKeys,
4408 WDI_KeysType *pWdiKeys )
4409{
4410 v_U32_t i, j, defKeyId = 0;
4411 v_U32_t val = SIR_MAC_KEY_LENGTH;
4412 VOS_STATUS status = WDI_STATUS_SUCCESS;
4413 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 if (NULL == pMac )
4415 {
4416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 return VOS_STATUS_E_FAILURE;
4419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4421 &defKeyId ))
4422 {
4423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4424 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4425 }
4426
4427 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 /* Need to extract ALL of the configured WEP Keys */
4429 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4430 {
4431 val = SIR_MAC_KEY_LENGTH;
4432 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4433 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4434 pWdiKeys[j].key,
4435 &val ))
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004438 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 }
4440 else
4441 {
4442 pWdiKeys[j].keyId = (tANI_U8) i;
4443 /*
4444 * Actually, a DC (Don't Care) because
4445 * this is determined (and set) by PE/MLME
4446 */
4447 pWdiKeys[j].unicast = 0;
4448 /*
4449 * Another DC (Don't Care)
4450 */
4451 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4452 /* Another DC (Don't Care). Unused for WEP */
4453 pWdiKeys[j].paeRole = 0;
4454 /* Determined from wlan_cfgGetStr() above.*/
4455 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 j++;
4457 *pNumKeys = (tANI_U8) j;
4458 }
4459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 return status;
4461}
Jeff Johnson295189b2012-06-20 16:38:30 -07004462/*
4463 * FUNCTION: WDA_SetBssKeyReqCallback
4464 * send SET BSS key RSP back to PE
4465 */
4466void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4467{
4468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4469 tWDA_CbContext *pWDA;
4470 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004472 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 if(NULL == pWdaParams)
4474 {
4475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004476 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 VOS_ASSERT(0) ;
4478 return ;
4479 }
4480 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4481 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4483 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004484 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 return ;
4487}
Jeff Johnson295189b2012-06-20 16:38:30 -07004488/*
4489 * FUNCTION: WDA_ProcessSetBssKeyReq
4490 * Request to WDI for programming the BSS key( key for
4491 * broadcast/multicast frames Encryption)
4492 */
4493VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4494 tSetBssKeyParams *setBssKeyParams )
4495{
4496 WDI_Status status = WDI_STATUS_SUCCESS ;
4497 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4498 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4499 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 if(NULL == wdiSetBssKeyParam)
4505 {
4506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 VOS_ASSERT(0);
4509 return VOS_STATUS_E_NOMEM;
4510 }
4511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4512 if(NULL == pWdaParams)
4513 {
4514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 VOS_ASSERT(0);
4517 vos_mem_free(wdiSetBssKeyParam);
4518 return VOS_STATUS_E_NOMEM;
4519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 /* copy set BSS params to WDI structure */
4522 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4523 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4524 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 if(setBssKeyParams->encType != eSIR_ED_NONE)
4526 {
4527 if( setBssKeyParams->numKeys == 0 &&
4528 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4529 setBssKeyParams->encType == eSIR_ED_WEP104))
4530 {
4531 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4533 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4534 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4535 }
4536 else
4537 {
4538 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4539 {
4540 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4541 setBssKeyParams->key[keyIndex].keyId;
4542 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4543 setBssKeyParams->key[keyIndex].unicast;
4544 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4545 setBssKeyParams->key[keyIndex].keyDirection;
4546 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4547 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4548 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4549 setBssKeyParams->key[keyIndex].paeRole;
4550 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4551 setBssKeyParams->key[keyIndex].keyLength;
4552 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4553 setBssKeyParams->key[keyIndex].key,
4554 SIR_MAC_MAX_KEY_LENGTH);
4555 }
4556 }
4557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4559 setBssKeyParams->singleTidRc;
4560 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 /* Store set key pointer, as this will be used for response */
4562 /* store Params pass it to WDI */
4563 pWdaParams->pWdaContext = pWDA;
4564 pWdaParams->wdaMsgParam = setBssKeyParams;
4565 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4567 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4568
4569 if(IS_WDI_STATUS_FAILURE(status))
4570 {
4571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4572 "Failure in Set BSS Key Req WDI API, free all the memory " );
4573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4574 vos_mem_free(pWdaParams) ;
4575 setBssKeyParams->status = eSIR_FAILURE ;
4576 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 return CONVERT_WDI2VOS_STATUS(status) ;
4579}
Jeff Johnson295189b2012-06-20 16:38:30 -07004580/*
4581 * FUNCTION: WDA_RemoveBssKeyReqCallback
4582 * send SET BSS key RSP back to PE
4583 */
4584void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4585{
4586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4587 tWDA_CbContext *pWDA;
4588 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004590 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 if(NULL == pWdaParams)
4592 {
4593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004594 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 VOS_ASSERT(0) ;
4596 return ;
4597 }
4598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4599 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4601 vos_mem_free(pWdaParams) ;
4602
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004603 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 return ;
4606}
Jeff Johnson295189b2012-06-20 16:38:30 -07004607/*
4608 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4609 * Request to WDI to remove the BSS key( key for broadcast/multicast
4610 * frames Encryption)
4611 */
4612VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4613 tRemoveBssKeyParams *removeBssKeyParams )
4614{
4615 WDI_Status status = WDI_STATUS_SUCCESS ;
4616 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4617 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4618 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 if(NULL == wdiRemoveBssKeyParam)
4623 {
4624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 VOS_ASSERT(0);
4627 return VOS_STATUS_E_NOMEM;
4628 }
4629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4630 if(NULL == pWdaParams)
4631 {
4632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 VOS_ASSERT(0);
4635 vos_mem_free(wdiRemoveBssKeyParam);
4636 return VOS_STATUS_E_NOMEM;
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 /* copy Remove BSS key params to WDI structure*/
4639 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4640 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4641 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4642 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4643 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 /* Store remove key pointer, as this will be used for response */
4645 /* store Params pass it to WDI */
4646 pWdaParams->pWdaContext = pWDA;
4647 pWdaParams->wdaMsgParam = removeBssKeyParams;
4648 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4650 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 if(IS_WDI_STATUS_FAILURE(status))
4652 {
4653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4654 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4656 vos_mem_free(pWdaParams) ;
4657 removeBssKeyParams->status = eSIR_FAILURE ;
4658 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 return CONVERT_WDI2VOS_STATUS(status) ;
4661}
Jeff Johnson295189b2012-06-20 16:38:30 -07004662/*
4663 * FUNCTION: WDA_SetBssKeyReqCallback
4664 * send SET BSS key RSP back to PE
4665 */
4666void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4667{
4668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4669 tWDA_CbContext *pWDA;
4670 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(NULL == pWdaParams)
4674 {
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004676 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 VOS_ASSERT(0) ;
4678 return ;
4679 }
4680 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4681 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4683 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004684 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 return ;
4687}
Jeff Johnson295189b2012-06-20 16:38:30 -07004688/*
4689 * FUNCTION: WDA_ProcessSetStaKeyReq
4690 * Request to WDI for programming the STA key( key for Unicast frames
4691 * Encryption)
4692 */
4693VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4694 tSetStaKeyParams *setStaKeyParams )
4695{
4696 WDI_Status status = WDI_STATUS_SUCCESS ;
4697 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4698 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4699 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4700 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004703 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 if(NULL == wdiSetStaKeyParam)
4705 {
4706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_ASSERT(0);
4709 return VOS_STATUS_E_NOMEM;
4710 }
4711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4712 if(NULL == pWdaParams)
4713 {
4714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 VOS_ASSERT(0);
4717 vos_mem_free(wdiSetStaKeyParam);
4718 return VOS_STATUS_E_NOMEM;
4719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 /* copy set STA key params to WDI structure */
4723 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4724 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4725 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4726 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 if(setStaKeyParams->encType != eSIR_ED_NONE)
4728 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004729 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4731 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4732 {
4733 WDA_GetWepKeysFromCfg( pWDA,
4734 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4735 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4736 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4737 }
4738 else
4739 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4741 keyIndex++)
4742 {
4743 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4744 setStaKeyParams->key[keyIndex].keyId;
4745 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4746 setStaKeyParams->key[keyIndex].unicast;
4747 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4748 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4750 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4751 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4752 setStaKeyParams->key[keyIndex].paeRole;
4753 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4754 setStaKeyParams->key[keyIndex].keyLength;
4755 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4756 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4757 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4758 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4759 {
4760 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4761 }
4762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4764 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 }
4766 }
4767 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4768 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 /* Store set key pointer, as this will be used for response */
4770 /* store Params pass it to WDI */
4771 pWdaParams->pWdaContext = pWDA;
4772 pWdaParams->wdaMsgParam = setStaKeyParams;
4773 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4775 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 if(IS_WDI_STATUS_FAILURE(status))
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4779 "Failure in set STA Key Req WDI API, free all the memory " );
4780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4781 vos_mem_free(pWdaParams) ;
4782 setStaKeyParams->status = eSIR_FAILURE ;
4783 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 return CONVERT_WDI2VOS_STATUS(status) ;
4786}
Jeff Johnson295189b2012-06-20 16:38:30 -07004787/*
4788 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4789 * send SET Bcast STA key RSP back to PE
4790 */
4791void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4792{
4793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4794 tWDA_CbContext *pWDA;
4795 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 if(NULL == pWdaParams)
4799 {
4800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004802 VOS_ASSERT(0) ;
4803 return ;
4804 }
4805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4806 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4808 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004809 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 return ;
4812}
4813
Jeff Johnson295189b2012-06-20 16:38:30 -07004814/*
4815 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4816 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4817 * Encryption)
4818 */
4819VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4820 tSetStaKeyParams *setStaKeyParams )
4821{
4822 WDI_Status status = WDI_STATUS_SUCCESS ;
4823 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4824 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4825 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4826 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004829 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 if(NULL == wdiSetStaKeyParam)
4831 {
4832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 VOS_ASSERT(0);
4835 return VOS_STATUS_E_NOMEM;
4836 }
4837 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4838 if(NULL == pWdaParams)
4839 {
4840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 VOS_ASSERT(0);
4843 vos_mem_free(wdiSetStaKeyParam);
4844 return VOS_STATUS_E_NOMEM;
4845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 /* copy set STA key params to WDI structure */
4849 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4850 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4851 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4852 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(setStaKeyParams->encType != eSIR_ED_NONE)
4854 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4856 keyIndex++)
4857 {
4858 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4859 setStaKeyParams->key[keyIndex].keyId;
4860 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4861 setStaKeyParams->key[keyIndex].unicast;
4862 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4863 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4865 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4866 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4867 setStaKeyParams->key[keyIndex].paeRole;
4868 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4869 setStaKeyParams->key[keyIndex].keyLength;
4870 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4871 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4874 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 }
4876 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 /* Store set key pointer, as this will be used for response */
4878 /* store Params pass it to WDI */
4879 pWdaParams->pWdaContext = pWDA;
4880 pWdaParams->wdaMsgParam = setStaKeyParams;
4881 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4883 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 if(IS_WDI_STATUS_FAILURE(status))
4885 {
4886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4887 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4889 vos_mem_free(pWdaParams) ;
4890 setStaKeyParams->status = eSIR_FAILURE ;
4891 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 return CONVERT_WDI2VOS_STATUS(status) ;
4894}
Jeff Johnson295189b2012-06-20 16:38:30 -07004895/*
4896 * FUNCTION: WDA_RemoveStaKeyReqCallback
4897 * send SET BSS key RSP back to PE
4898 */
4899void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4900{
4901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4902 tWDA_CbContext *pWDA;
4903 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 if(NULL == pWdaParams)
4907 {
4908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004909 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_ASSERT(0) ;
4911 return ;
4912 }
4913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4914 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4916 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004917 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 return ;
4920}
4921
Jeff Johnson295189b2012-06-20 16:38:30 -07004922/*
4923 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4924 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4925 */
4926VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4927 tRemoveStaKeyParams *removeStaKeyParams )
4928{
4929 WDI_Status status = WDI_STATUS_SUCCESS ;
4930 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4931 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4932 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4933 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004935 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 if(NULL == wdiRemoveStaKeyParam)
4937 {
4938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 VOS_ASSERT(0);
4941 return VOS_STATUS_E_NOMEM;
4942 }
4943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4944 if(NULL == pWdaParams)
4945 {
4946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_ASSERT(0);
4949 vos_mem_free(wdiRemoveStaKeyParam);
4950 return VOS_STATUS_E_NOMEM;
4951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 /* copy remove STA key params to WDI structure*/
4953 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4954 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4955 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4956 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4957 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 /* Store remove key pointer, as this will be used for response */
4959 /* store Params pass it to WDI */
4960 pWdaParams->pWdaContext = pWDA;
4961 pWdaParams->wdaMsgParam = removeStaKeyParams;
4962 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4964 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 if(IS_WDI_STATUS_FAILURE(status))
4966 {
4967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4968 "Failure in remove STA Key Req WDI API, free all the memory " );
4969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4970 vos_mem_free(pWdaParams) ;
4971 removeStaKeyParams->status = eSIR_FAILURE ;
4972 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 return CONVERT_WDI2VOS_STATUS(status) ;
4975}
Jeff Johnson295189b2012-06-20 16:38:30 -07004976/*
4977 * FUNCTION: WDA_IsHandleSetLinkStateReq
4978 * Update the WDA state and return the status to handle this message or not
4979 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004980WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4981 tWDA_CbContext *pWDA,
4982 tLinkStateParams *linkStateParams)
4983{
4984 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 switch(linkStateParams->state)
4986 {
4987 case eSIR_LINK_PREASSOC_STATE:
4988 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4989 /*
4990 * set the WDA state to PRE ASSOC
4991 * copy the BSSID into pWDA to use it in join request and return,
4992 * No need to handle these messages.
4993 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004994 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4995 {
4996 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004998 }
4999 else
5000 {
5001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005002 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005003 VOS_ASSERT(0);
5004 }
5005
5006 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5007 {
5008 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005010 }
5011 else
5012 {
5013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005014 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005015 VOS_ASSERT(0);
5016 }
5017
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5019 *channel and after ) so reset the WDA state to ready when the second
5020 * time UMAC issue the link state with PREASSOC
5021 */
5022 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5023 {
5024 /* RESET WDA state back to WDA_READY_STATE */
5025 pWDA->wdaState = WDA_READY_STATE;
5026 }
5027 else
5028 {
5029 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5030 }
5031 //populate linkState info in WDACbCtxt
5032 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 default:
5035 if(pWDA->wdaState != WDA_READY_STATE)
5036 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005037 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5038 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5039 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5040 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5041 *the ASSERT in WDA_Stop during module unload.*/
5042 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5043 {
5044 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005045 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005046 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005047 else
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005050 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005051 status = WDA_IGNORE_SET_LINK_STATE;
5052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 }
5054 break;
5055 }
5056
5057 return status;
5058}
Jeff Johnson295189b2012-06-20 16:38:30 -07005059/*
5060 * FUNCTION: WDA_SetLinkStateCallback
5061 * call back function for set link state from WDI
5062 */
5063void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5064{
5065 tWDA_CbContext *pWDA;
5066 tLinkStateParams *linkStateParams;
5067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(NULL == pWdaParams)
5071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_ASSERT(0) ;
5075 return ;
5076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 /*
5080 * In STA mode start the BA activity check timer after association
5081 * and in AP mode start BA activity check timer after BSS start */
5082 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5083 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005084 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5085 ((status == WDI_STATUS_SUCCESS) &&
5086 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 {
5088 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 /*
5092 * No respone required for WDA_SET_LINK_STATE so free the request
5093 * param here
5094 */
5095 if( pWdaParams != NULL )
5096 {
5097 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5098 {
5099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5100 }
5101 vos_mem_free(pWdaParams);
5102 }
5103 return ;
5104}
Jeff Johnson295189b2012-06-20 16:38:30 -07005105/*
5106 * FUNCTION: WDA_ProcessSetLinkState
5107 * Request to WDI to set the link status.
5108 */
5109VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5110 tLinkStateParams *linkStateParams)
5111{
5112 WDI_Status status = WDI_STATUS_SUCCESS ;
5113 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5114 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5115 sizeof(WDI_SetLinkReqParamsType)) ;
5116 tWDA_ReqParams *pWdaParams ;
5117 tpAniSirGlobal pMac;
5118 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5119
5120 if(NULL == pMac)
5121 {
5122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005123 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005125 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 return VOS_STATUS_E_FAILURE;
5127 }
5128
5129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005130 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 if(NULL == wdiSetLinkStateParam)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
5136 return VOS_STATUS_E_NOMEM;
5137 }
5138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5139 if(NULL == pWdaParams)
5140 {
5141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 VOS_ASSERT(0);
5144 vos_mem_free(wdiSetLinkStateParam);
5145 return VOS_STATUS_E_NOMEM;
5146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(WDA_IGNORE_SET_LINK_STATE ==
5148 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5149 {
5150 status = WDI_STATUS_E_FAILURE;
5151 }
5152 else
5153 {
5154 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5155 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5157 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5159 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 pWdaParams->pWdaContext = pWDA;
5161 /* Store remove key pointer, as this will be used for response */
5162 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 /* store Params pass it to WDI */
5164 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5165 /* Stop Timer only other than GO role and concurrent session */
5166 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005167 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5169 {
5170 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5173 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(IS_WDI_STATUS_FAILURE(status))
5175 {
5176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5177 "Failure in set link state Req WDI API, free all the memory " );
5178 }
5179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 if(IS_WDI_STATUS_FAILURE(status))
5181 {
5182 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005183 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 vos_mem_free(pWdaParams);
5185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 return CONVERT_WDI2VOS_STATUS(status) ;
5187}
Jeff Johnson295189b2012-06-20 16:38:30 -07005188/*
5189 * FUNCTION: WDA_GetStatsReqParamsCallback
5190 * send the response to PE with Stats received from WDI
5191 */
5192void WDA_GetStatsReqParamsCallback(
5193 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5194 void* pUserData)
5195{
5196 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5197 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5198
5199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005200 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 pGetPEStatsRspParams =
5202 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5203 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5204
5205 if(NULL == pGetPEStatsRspParams)
5206 {
5207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 VOS_ASSERT(0);
5210 return;
5211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5213 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5214 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5215 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005216
5217 //Fill the Session Id Properly in PE
5218 pGetPEStatsRspParams->sessionId = 0;
5219 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005220 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5222 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 vos_mem_copy( pGetPEStatsRspParams + 1,
5224 wdiGetStatsRsp + 1,
5225 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 /* send response to UMAC*/
5227 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5228
5229 return;
5230}
5231
Jeff Johnson295189b2012-06-20 16:38:30 -07005232/*
5233 * FUNCTION: WDA_ProcessGetStatsReq
5234 * Request to WDI to get the statistics
5235 */
5236VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5237 tAniGetPEStatsReq *pGetStatsParams)
5238{
5239 WDI_Status status = WDI_STATUS_SUCCESS ;
5240 WDI_GetStatsReqParamsType wdiGetStatsParam;
5241 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5245 pGetStatsParams->staId;
5246 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5247 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 status = WDI_GetStatsReq(&wdiGetStatsParam,
5250 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 if(IS_WDI_STATUS_FAILURE(status))
5252 {
5253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5254 "Failure in Get Stats Req WDI API, free all the memory " );
5255 pGetPEStatsRspParams =
5256 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5257 if(NULL == pGetPEStatsRspParams)
5258 {
5259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005262 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005263 return VOS_STATUS_E_NOMEM;
5264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5266 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5267 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5268 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5269 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5270 (void *)pGetPEStatsRspParams, 0) ;
5271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 /* Free the request message */
5273 vos_mem_free(pGetStatsParams);
5274 return CONVERT_WDI2VOS_STATUS(status);
5275}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005276
5277#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5278/*
5279 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5280 * send the response to PE with roam Rssi received from WDI
5281 */
5282void WDA_GetRoamRssiReqParamsCallback(
5283 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5284 void* pUserData)
5285{
5286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5287 tWDA_CbContext *pWDA = NULL;
5288 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5289 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5291 "<------ %s " ,__func__);
5292 if(NULL == pWdaParams)
5293 {
5294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5295 "%s: pWdaParams received NULL", __func__);
5296 VOS_ASSERT(0) ;
5297 return ;
5298 }
5299 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5300 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5301
5302 if(NULL == pGetRoamRssiReqParams)
5303 {
5304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5305 "%s: pGetRoamRssiReqParams received NULL", __func__);
5306 VOS_ASSERT(0);
5307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5308 vos_mem_free(pWdaParams);
5309 return ;
5310 }
5311 pGetRoamRssiRspParams =
5312 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5313
5314 if(NULL == pGetRoamRssiRspParams)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5317 "%s: VOS MEM Alloc Failure", __func__);
5318 VOS_ASSERT(0);
5319 return;
5320 }
5321 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5322 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005323 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005324 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5325 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5326
5327 /* Assign get roam rssi req (backup) in to the response */
5328 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5329
5330 /* free WDI command buffer */
5331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5332 vos_mem_free(pWdaParams) ;
5333
5334 /* send response to UMAC*/
5335 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5336
5337 return;
5338}
5339
5340
5341
5342/*
5343 * FUNCTION: WDA_ProcessGetRoamRssiReq
5344 * Request to WDI to get the statistics
5345 */
5346VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5347 tAniGetRssiReq *pGetRoamRssiParams)
5348{
5349 WDI_Status status = WDI_STATUS_SUCCESS ;
5350 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5351 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5352 tWDA_ReqParams *pWdaParams = NULL;
5353
5354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5355 "------> %s " ,__func__);
5356 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5357 pGetRoamRssiParams->staId;
5358 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5359
5360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5361 if(NULL == pWdaParams)
5362 {
5363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5364 "%s: VOS MEM Alloc Failure", __func__);
5365 VOS_ASSERT(0);
5366 return VOS_STATUS_E_NOMEM;
5367 }
5368
5369 /* Store Init Req pointer, as this will be used for response */
5370 pWdaParams->pWdaContext = pWDA;
5371
5372 /* Take Get roam Rssi req backup as it stores the callback to be called after
5373 receiving the response */
5374 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5375 pWdaParams->wdaWdiApiMsgParam = NULL;
5376
5377 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5378 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5383 pGetRoamRssiRspParams =
5384 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5385 if(NULL == pGetRoamRssiRspParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5388 "%s: VOS MEM Alloc Failure", __func__);
5389 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305390 vos_mem_free(pGetRoamRssiParams);
5391 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005392 return VOS_STATUS_E_NOMEM;
5393 }
5394 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5395 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5396 pGetRoamRssiRspParams->rssi = 0;
5397 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5398 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5399 (void *)pGetRoamRssiRspParams, 0) ;
5400 }
5401 return CONVERT_WDI2VOS_STATUS(status);
5402}
5403#endif
5404
5405
Jeff Johnson295189b2012-06-20 16:38:30 -07005406/*
5407 * FUNCTION: WDA_UpdateEDCAParamCallback
5408 * call back function for Update EDCA params from WDI
5409 */
5410void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5411{
5412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5413 tEdcaParams *pEdcaParams;
5414
5415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 if(NULL == pWdaParams)
5418 {
5419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 VOS_ASSERT(0) ;
5422 return ;
5423 }
5424 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5426 vos_mem_free(pWdaParams);
5427 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 return ;
5429}
Jeff Johnson295189b2012-06-20 16:38:30 -07005430/*
5431 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5432 * Request to WDI to Update the EDCA params.
5433 */
5434VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5435 tEdcaParams *pEdcaParams)
5436{
5437 WDI_Status status = WDI_STATUS_SUCCESS ;
5438 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5439 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5440 sizeof(WDI_UpdateEDCAParamsType)) ;
5441 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005443 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(NULL == wdiEdcaParam)
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005448 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005449 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005450 return VOS_STATUS_E_NOMEM;
5451 }
5452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5453 if(NULL == pWdaParams)
5454 {
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 VOS_ASSERT(0);
5458 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005459 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 return VOS_STATUS_E_NOMEM;
5461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005463 /*
5464 Since firmware is not using highperformance flag, we have removed
5465 this flag from wdiEDCAInfo structure to match sizeof the structure
5466 between host and firmware.In future if we are planning to use
5467 highperformance flag then Please define this flag in wdiEDCAInfo
5468 structure, update it here and send it to firmware. i.e.
5469 Following is the original line which we removed as part of the fix
5470 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5471 pEdcaParams->highPerformance;
5472 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5474 &pEdcaParams->acbe);
5475 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5476 &pEdcaParams->acbk);
5477 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5478 &pEdcaParams->acvi);
5479 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5480 &pEdcaParams->acvo);
5481 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 pWdaParams->pWdaContext = pWDA;
5483 /* Store remove key pointer, as this will be used for response */
5484 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 /* store Params pass it to WDI */
5486 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5488 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 if(IS_WDI_STATUS_FAILURE(status))
5490 {
5491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5492 "Failure in Update EDCA Params WDI API, free all the memory " );
5493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5494 vos_mem_free(pWdaParams);
5495 vos_mem_free(pEdcaParams);
5496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 return CONVERT_WDI2VOS_STATUS(status) ;
5498}
Jeff Johnson295189b2012-06-20 16:38:30 -07005499/*
5500 * FUNCTION: WDA_AddBAReqCallback
5501 * send ADD BA RSP back to PE
5502 */
5503void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5504 void* pUserData)
5505{
5506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5507 tWDA_CbContext *pWDA;
5508 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 if(NULL == pWdaParams)
5512 {
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 VOS_ASSERT(0) ;
5516 return ;
5517 }
5518 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5519 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5521 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005522 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 return ;
5525}
5526
Jeff Johnson295189b2012-06-20 16:38:30 -07005527/*
5528 * FUNCTION: WDA_ProcessAddBAReq
5529 * Request to WDI to Update the ADDBA REQ params.
5530 */
5531VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5532 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5533{
Jeff Johnson43971f52012-07-17 12:26:56 -07005534 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5536 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5537 sizeof(WDI_AddBAReqParamsType)) ;
5538 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 if(NULL == wdiAddBAReqParam)
5542 {
5543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 VOS_ASSERT(0);
5546 return VOS_STATUS_E_NOMEM;
5547 }
5548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0);
5554 vos_mem_free(wdiAddBAReqParam);
5555 return VOS_STATUS_E_NOMEM;
5556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 do
5558 {
5559 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 wdiAddBaInfo->ucSTAIdx = staIdx ;
5561 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5562 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 } while(0) ;
5564 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 pWdaParams->pWdaContext = pWDA;
5566 /* store Params pass it to WDI */
5567 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5568 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005569 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5570 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005571
Jeff Johnson43971f52012-07-17 12:26:56 -07005572 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 {
5574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005575 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5576 status = CONVERT_WDI2VOS_STATUS(wstatus);
5577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 vos_mem_free(pWdaParams);
5579 pAddBAReqParams->status = eSIR_FAILURE;
5580 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5581 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005582 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_AddBASessionReqCallback
5586 * send ADD BA SESSION RSP back to PE/(or TL)
5587 */
5588void WDA_AddBASessionReqCallback(
5589 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5590{
5591 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5593 tWDA_CbContext *pWDA;
5594 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 if(NULL == pWdaParams)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0) ;
5602 return ;
5603 }
5604 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5605 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 if( NULL == pAddBAReqParams )
5607 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5612 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 return ;
5614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5616 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 /*
5618 * if WDA in update TL state, update TL with BA session parama and send
5619 * another request to HAL(/WDI) (ADD_BA_REQ)
5620 */
5621
5622 if((VOS_STATUS_SUCCESS ==
5623 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5624 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5625 {
5626 /* Update TL with BA info received from HAL/WDI */
5627 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5628 wdiAddBaSession->usBaSessionID,
5629 wdiAddBaSession->ucSTAIdx,
5630 wdiAddBaSession->ucBaTID,
5631 wdiAddBaSession->ucBaBufferSize,
5632 wdiAddBaSession->ucWinSize,
5633 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5635 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5636 }
5637 else
5638 {
5639 pAddBAReqParams->status =
5640 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5641
5642 /* Setting Flag to indicate that Set BA is success */
5643 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5644 {
5645 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5646 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5647 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 /*Reset the WDA state to READY */
5652 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 return ;
5654}
5655
Jeff Johnson295189b2012-06-20 16:38:30 -07005656/*
5657 * FUNCTION: WDA_ProcessAddBASessionReq
5658 * Request to WDI to Update the ADDBA REQ params.
5659 */
5660VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5661 tAddBAParams *pAddBAReqParams)
5662{
5663 WDI_Status status = WDI_STATUS_SUCCESS ;
5664 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5665 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5666 sizeof(WDI_AddBASessionReqParamsType)) ;
5667 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005668 WLANTL_STAStateType tlSTAState = 0;
5669
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 if(NULL == wdiAddBASessionReqParam)
5673 {
5674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 VOS_ASSERT(0);
5677 return VOS_STATUS_E_NOMEM;
5678 }
5679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5680 if(NULL == pWdaParams)
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT(0);
5685 vos_mem_free(wdiAddBASessionReqParam);
5686 return VOS_STATUS_E_NOMEM;
5687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 /*
5689 * Populate ADD BA parameters and pass these paarmeters to WDI.
5690 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5691 * the state to track if these is BA recipient case or BA initiator
5692 * case.
5693 */
5694 do
5695 {
5696 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5697 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5698 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5699 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5700 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5701 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5702 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5705 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5706 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5707 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5708 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 /* check the BA direction and update state accordingly */
5710 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5711 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5712 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5713
5714 }while(0) ;
5715 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 pWdaParams->pWdaContext = pWDA;
5717 /* Store ADD BA pointer, as this will be used for response */
5718 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5719 /* store Params pass it to WDI */
5720 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005721
5722 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5723 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5724 */
5725 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5726 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5727 {
5728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005729 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005730 status = WDI_STATUS_E_NOT_ALLOWED;
5731 pAddBAReqParams->status =
5732 CONVERT_WDI2SIR_STATUS(status) ;
5733 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5734 /*Reset the WDA state to READY */
5735 pWDA->wdaState = WDA_READY_STATE;
5736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5737 vos_mem_free(pWdaParams);
5738
5739 return CONVERT_WDI2VOS_STATUS(status) ;
5740 }
5741
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5743 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 if(IS_WDI_STATUS_FAILURE(status))
5745 {
5746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005747 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005749 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005750 pAddBAReqParams->status =
5751 CONVERT_WDI2SIR_STATUS(status) ;
5752 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005753 /*Reset the WDA state to READY */
5754 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 vos_mem_free(pWdaParams);
5757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005759}
Jeff Johnson295189b2012-06-20 16:38:30 -07005760/*
5761 * FUNCTION: WDA_DelBANotifyTL
5762 * send DEL BA IND to TL
5763 */
5764void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5765 tDelBAParams *pDelBAReqParams)
5766{
5767 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5768 //tSirMsgQ msg;
5769 vos_msg_t vosMsg;
5770 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 if(NULL == pDelBAInd)
5772 {
5773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 VOS_ASSERT(0) ;
5776 return;
5777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5779 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5780 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5781 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005782
Jeff Johnson295189b2012-06-20 16:38:30 -07005783
5784 vosMsg.type = WDA_DELETEBA_IND;
5785 vosMsg.bodyptr = pDelBAInd;
5786 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5787 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5788 {
5789 vosStatus = VOS_STATUS_E_BADMSG;
5790 }
5791}
Jeff Johnson295189b2012-06-20 16:38:30 -07005792/*
5793 * FUNCTION: WDA_DelBAReqCallback
5794 * send DEL BA RSP back to PE
5795 */
5796void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5797{
5798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5799 tWDA_CbContext *pWDA;
5800 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005802 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 if(NULL == pWdaParams)
5804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005806 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 VOS_ASSERT(0) ;
5808 return ;
5809 }
5810 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5811 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 /* Notify TL about DEL BA in case of recipinet */
5813 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5814 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5815 {
5816 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 /*
5819 * No respone required for WDA_DELBA_IND so just free the request
5820 * param here
5821 */
5822 vos_mem_free(pDelBAReqParams);
5823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5824 vos_mem_free(pWdaParams);
5825 return ;
5826}
5827
Jeff Johnson295189b2012-06-20 16:38:30 -07005828/*
5829 * FUNCTION: WDA_ProcessDelBAReq
5830 * Request to WDI to Update the DELBA REQ params.
5831 */
5832VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5833 tDelBAParams *pDelBAReqParams)
5834{
5835 WDI_Status status = WDI_STATUS_SUCCESS ;
5836 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5837 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5838 sizeof(WDI_DelBAReqParamsType)) ;
5839 tWDA_ReqParams *pWdaParams ;
5840 tANI_U16 staIdx = 0;
5841 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 if(NULL == wdiDelBAReqParam)
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_ASSERT(0);
5849 return VOS_STATUS_E_NOMEM;
5850 }
5851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5852 if(NULL == pWdaParams)
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_ASSERT(0);
5857 vos_mem_free(wdiDelBAReqParam);
5858 return VOS_STATUS_E_NOMEM;
5859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5861 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5862 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5863 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 pWdaParams->pWdaContext = pWDA;
5865 /* Store DEL BA pointer, as this will be used for response */
5866 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005867 /* store Params pass it to WDI */
5868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5870 * maintained in WDA, so that WDA can retry for another BA session
5871 */
5872 staIdx = pDelBAReqParams->staIdx;
5873 tid = pDelBAReqParams->baTID;
5874 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 status = WDI_DelBAReq(wdiDelBAReqParam,
5876 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 if(IS_WDI_STATUS_FAILURE(status))
5878 {
5879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5880 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5882 vos_mem_free(pWdaParams->wdaMsgParam);
5883 vos_mem_free(pWdaParams);
5884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005886}
Jeff Johnson295189b2012-06-20 16:38:30 -07005887/*
5888 * FUNCTION: WDA_AddTSReqCallback
5889 * send ADD TS RSP back to PE
5890 */
5891void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5892{
5893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5894 tWDA_CbContext *pWDA;
5895 tAddTsParams *pAddTsReqParams;
5896
5897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 if(NULL == pWdaParams)
5900 {
5901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_ASSERT(0) ;
5904 return ;
5905 }
5906 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5907 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5909 vos_mem_free(pWdaParams);
5910
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005911 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 return ;
5914}
5915
Jeff Johnson295189b2012-06-20 16:38:30 -07005916/*
5917 * FUNCTION: WDA_ProcessAddTSReq
5918 * Request to WDI to Update the ADD TS REQ params.
5919 */
5920VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5921 tAddTsParams *pAddTsReqParams)
5922{
5923 WDI_Status status = WDI_STATUS_SUCCESS ;
5924 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5925 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5926 sizeof(WDI_AddTSReqParamsType)) ;
5927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 if(NULL == wdiAddTSReqParam)
5931 {
5932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 VOS_ASSERT(0);
5935 return VOS_STATUS_E_NOMEM;
5936 }
5937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5938 if(NULL == pWdaParams)
5939 {
5940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_ASSERT(0);
5943 vos_mem_free(wdiAddTSReqParam);
5944 return VOS_STATUS_E_NOMEM;
5945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5947 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 //TS IE
5949 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5950 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5951 pAddTsReqParams->tspec.length;
5952
5953 //TS IE : TS INFO : TRAFFIC
5954 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5955 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5956 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5957 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5958 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5959 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5960 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5961 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5962 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5963 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5964 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5965 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5966 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5967 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5968 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5969 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5970
5971 //TS IE : TS INFO : SCHEDULE
5972 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5973 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5974 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5975 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 //TS IE
5977 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5978 pAddTsReqParams->tspec.nomMsduSz;
5979 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5980 pAddTsReqParams->tspec.maxMsduSz;
5981 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5982 pAddTsReqParams->tspec.minSvcInterval;
5983 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5984 pAddTsReqParams->tspec.maxSvcInterval;
5985 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5986 pAddTsReqParams->tspec.inactInterval;
5987 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5988 pAddTsReqParams->tspec.suspendInterval;
5989 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5990 pAddTsReqParams->tspec.svcStartTime;
5991 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5992 pAddTsReqParams->tspec.minDataRate;
5993 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5994 pAddTsReqParams->tspec.meanDataRate;
5995 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5996 pAddTsReqParams->tspec.peakDataRate;
5997 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5998 pAddTsReqParams->tspec.maxBurstSz;
5999 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6000 pAddTsReqParams->tspec.delayBound;
6001 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6002 pAddTsReqParams->tspec.minPhyRate;
6003 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6004 pAddTsReqParams->tspec.surplusBw;
6005 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6006 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 /* TODO: tAddTsParams doesn't have the following fields */
6008#if 0
6009 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6010 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6011 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6012 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6013#endif
6014 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6015
6016 pWdaParams->pWdaContext = pWDA;
6017 /* Store ADD TS pointer, as this will be used for response */
6018 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 /* store Params pass it to WDI */
6020 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 status = WDI_AddTSReq(wdiAddTSReqParam,
6022 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 if(IS_WDI_STATUS_FAILURE(status))
6024 {
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6026 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6028 vos_mem_free(pWdaParams);
6029 pAddTsReqParams->status = eSIR_FAILURE ;
6030 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033}
6034
Jeff Johnson295189b2012-06-20 16:38:30 -07006035/*
6036 * FUNCTION: WDA_DelTSReqCallback
6037 * send DEL TS RSP back to PE
6038 */
6039void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6040{
6041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6045 vos_mem_free(pWdaParams->wdaMsgParam) ;
6046 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 /*
6048 * No respone required for WDA_DEL_TS_REQ so just free the request
6049 * param here
6050 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 return ;
6052}
6053
Jeff Johnson295189b2012-06-20 16:38:30 -07006054/*
6055 * FUNCTION: WDA_ProcessDelTSReq
6056 * Request to WDI to Update the DELTS REQ params.
6057 */
6058VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6059 tDelTsParams *pDelTSReqParams)
6060{
6061 WDI_Status status = WDI_STATUS_SUCCESS ;
6062 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6063 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6064 sizeof(WDI_DelTSReqParamsType)) ;
6065 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 if(NULL == wdiDelTSReqParam)
6069 {
6070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 VOS_ASSERT(0);
6073 return VOS_STATUS_E_NOMEM;
6074 }
6075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6076 if(NULL == pWdaParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0);
6081 vos_mem_free(wdiDelTSReqParam);
6082 return VOS_STATUS_E_NOMEM;
6083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6085 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6086 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6087 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6088 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 pWdaParams->pWdaContext = pWDA;
6090 /* Store DEL TS pointer, as this will be used for response */
6091 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 /* store Params pass it to WDI */
6093 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 status = WDI_DelTSReq(wdiDelTSReqParam,
6095 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 if(IS_WDI_STATUS_FAILURE(status))
6097 {
6098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6099 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6101 vos_mem_free(pWdaParams->wdaMsgParam);
6102 vos_mem_free(pWdaParams);
6103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006104 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006105}
Jeff Johnson295189b2012-06-20 16:38:30 -07006106/*
6107 * FUNCTION: WDA_UpdateBeaconParamsCallback
6108 * Free the memory. No need to send any response to PE in this case
6109 */
6110void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6111{
6112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006114 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 if(NULL == pWdaParams)
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_ASSERT(0) ;
6120 return ;
6121 }
6122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6123 vos_mem_free(pWdaParams->wdaMsgParam) ;
6124 vos_mem_free(pWdaParams);
6125 /*
6126 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6127 * param here
6128 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 return ;
6130}
Jeff Johnson295189b2012-06-20 16:38:30 -07006131/*
6132 * FUNCTION: WDA_ProcessUpdateBeaconParams
6133 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6134 */
6135VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6136 tUpdateBeaconParams *pUpdateBeaconParams)
6137{
6138 WDI_Status status = WDI_STATUS_SUCCESS ;
6139 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6140 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6141 sizeof(WDI_UpdateBeaconParamsType)) ;
6142 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 if(NULL == wdiUpdateBeaconParams)
6146 {
6147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_ASSERT(0);
6150 return VOS_STATUS_E_NOMEM;
6151 }
6152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6153 if(NULL == pWdaParams)
6154 {
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 VOS_ASSERT(0);
6158 vos_mem_free(wdiUpdateBeaconParams);
6159 return VOS_STATUS_E_NOMEM;
6160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6162 pUpdateBeaconParams->bssIdx;
6163 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6164 pUpdateBeaconParams->fShortPreamble;
6165 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6166 pUpdateBeaconParams->fShortSlotTime;
6167 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6168 pUpdateBeaconParams->beaconInterval;
6169 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6170 pUpdateBeaconParams->llaCoexist;
6171 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6172 pUpdateBeaconParams->llbCoexist;
6173 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6174 pUpdateBeaconParams->llgCoexist;
6175 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6176 pUpdateBeaconParams->ht20MhzCoexist;
6177 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6178 pUpdateBeaconParams->llnNonGFCoexist;
6179 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6180 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6181 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6182 pUpdateBeaconParams->fRIFSMode;
6183 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6184 pUpdateBeaconParams->paramChangeBitmap;
6185 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6186
6187 pWdaParams->pWdaContext = pWDA;
6188 /* Store UpdateBeacon Req pointer, as this will be used for response */
6189 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 /* store Params pass it to WDI */
6191 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6193 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6194 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 if(IS_WDI_STATUS_FAILURE(status))
6196 {
6197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6198 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6200 vos_mem_free(pWdaParams->wdaMsgParam);
6201 vos_mem_free(pWdaParams);
6202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204}
Jeff Johnson295189b2012-06-20 16:38:30 -07006205#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006206/*
6207 * FUNCTION: WDA_TSMStatsReqCallback
6208 * send TSM Stats RSP back to PE
6209 */
6210void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6211{
6212 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6213 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006214 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6215 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006216
6217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006218 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 if(NULL == pWdaParams)
6220 {
6221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006222 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 VOS_ASSERT(0) ;
6224 return ;
6225 }
6226 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006227 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6228
6229 if(NULL == pGetTsmStatsReqParams)
6230 {
6231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6232 "%s: pGetTsmStatsReqParams received NULL", __func__);
6233 VOS_ASSERT(0);
6234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6235 vos_mem_free(pWdaParams);
6236 return;
6237 }
6238
6239 pTsmRspParams =
6240 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 if( NULL == pTsmRspParams )
6242 {
6243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006244 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 VOS_ASSERT( 0 );
6246 return ;
6247 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006248 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6249 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6250 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6251
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6253 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6254 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6255 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6256 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6257 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6258 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6259 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6260 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6261 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006262
6263 /* Assign get tsm stats req req (backup) in to the response */
6264 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6265
6266 /* free WDI command buffer */
6267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6268 vos_mem_free(pWdaParams);
6269
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 return ;
6272}
6273
6274
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_ProcessTsmStatsReq
6277 * Request to WDI to get the TSM Stats params.
6278 */
6279VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006280 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006281{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006282 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006284 tWDA_ReqParams *pWdaParams = NULL;
6285 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6286
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006288 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6290 sizeof(WDI_TSMStatsReqParamsType));
6291 if(NULL == wdiTSMReqParam)
6292 {
6293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 VOS_ASSERT(0);
6296 return VOS_STATUS_E_NOMEM;
6297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6299 if(NULL == pWdaParams)
6300 {
6301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 VOS_ASSERT(0);
6304 vos_mem_free(wdiTSMReqParam);
6305 return VOS_STATUS_E_NOMEM;
6306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6308 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6309 pTsmStats->bssId,
6310 sizeof(wpt_macAddr));
6311 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6312
6313 pWdaParams->pWdaContext = pWDA;
6314 /* Store TSM Stats pointer, as this will be used for response */
6315 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006316 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 status = WDI_TSMStatsReq(wdiTSMReqParam,
6318 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 if(IS_WDI_STATUS_FAILURE(status))
6320 {
6321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6322 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006323 vos_mem_free(pWdaParams);
6324
6325 pGetTsmStatsRspParams =
6326 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6327 if(NULL == pGetTsmStatsRspParams)
6328 {
6329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6330 "%s: VOS MEM Alloc Failure", __func__);
6331 VOS_ASSERT(0);
6332 vos_mem_free(pTsmStats);
6333 return VOS_STATUS_E_NOMEM;
6334 }
6335 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6336 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6337 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6338
6339 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 return CONVERT_WDI2VOS_STATUS(status) ;
6342}
6343#endif
6344/*
6345 * FUNCTION: WDA_SendBeaconParamsCallback
6346 * No need to send any response to PE in this case
6347 */
6348void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6349{
6350
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006352 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 return ;
6354}
Jeff Johnson295189b2012-06-20 16:38:30 -07006355/*
6356 * FUNCTION: WDA_ProcessSendBeacon
6357 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6358 * start beacon trasmission
6359 */
6360VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6361 tSendbeaconParams *pSendbeaconParams)
6362{
6363 WDI_Status status = WDI_STATUS_SUCCESS ;
6364 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6368 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6369 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6370 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6372 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306373 /* p2pIeOffset should be atleast greater than timIeOffset */
6374 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6375 (pSendbeaconParams->p2pIeOffset <
6376 pSendbeaconParams->timIeOffset))
6377 {
6378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6379 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6380 VOS_ASSERT( 0 );
6381 return WDI_STATUS_E_FAILURE;
6382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6384 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 /* Copy the beacon template to local buffer */
6386 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6387 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6388 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6389
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6391 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 if(IS_WDI_STATUS_FAILURE(status))
6393 {
6394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6395 "Failure in SEND BEACON REQ Params WDI API" );
6396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 vos_mem_free(pSendbeaconParams);
6398 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006399}
Jeff Johnson295189b2012-06-20 16:38:30 -07006400/*
6401 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6402 * No need to send any response to PE in this case
6403 */
6404void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6405{
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006407 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 return ;
6409}
6410
Jeff Johnson295189b2012-06-20 16:38:30 -07006411/*
6412 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6413 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6414 * send probe response
6415 */
6416VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6417 tSendProbeRespParams *pSendProbeRspParams)
6418{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006419 WDI_Status status = WDI_STATUS_SUCCESS;
6420 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6421 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006423 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006424
6425 if (!wdiSendProbeRspParam)
6426 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6427
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006429 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006431 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 /* Copy the Probe Response template to local buffer */
6434 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006435 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 pSendProbeRspParams->pProbeRespTemplate,
6437 pSendProbeRspParams->probeRespTemplateLen);
6438 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006439 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6441 WDI_PROBE_REQ_BITMAP_IE_LEN);
6442
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006443 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006444
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006445 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 if(IS_WDI_STATUS_FAILURE(status))
6448 {
6449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6450 "Failure in SEND Probe RSP Params WDI API" );
6451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006453 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006455}
Jeff Johnson295189b2012-06-20 16:38:30 -07006456#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6457/*
6458 * FUNCTION: WDA_SetMaxTxPowerCallBack
6459 * send the response to PE with power value received from WDI
6460 */
6461void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6462 void* pUserData)
6463{
6464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6465 tWDA_CbContext *pWDA = NULL;
6466 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6467
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006469 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 if(NULL == pWdaParams)
6471 {
6472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006473 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 VOS_ASSERT(0) ;
6475 return ;
6476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6478 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 if( NULL == pMaxTxPowerParams )
6480 {
6481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006482 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006483 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6485 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 return ;
6487 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006488
Jeff Johnson295189b2012-06-20 16:38:30 -07006489
6490 /*need to free memory for the pointers used in the
6491 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6493 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006495
Jeff Johnson295189b2012-06-20 16:38:30 -07006496
6497 /* send response to UMAC*/
6498 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6499
6500 return;
6501}
Jeff Johnson295189b2012-06-20 16:38:30 -07006502/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006503 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 * Request to WDI to send set Max Tx Power Request
6505 */
6506 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6507 tMaxTxPowerParams *MaxTxPowerParams)
6508{
6509 WDI_Status status = WDI_STATUS_SUCCESS;
6510 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6511 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006512
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006514 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006515
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6517 sizeof(WDI_SetMaxTxPowerParamsType));
6518 if(NULL == wdiSetMaxTxPowerParams)
6519 {
6520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 VOS_ASSERT(0);
6523 return VOS_STATUS_E_NOMEM;
6524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6526 if(NULL == pWdaParams)
6527 {
6528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 vos_mem_free(wdiSetMaxTxPowerParams);
6531 VOS_ASSERT(0);
6532 return VOS_STATUS_E_NOMEM;
6533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 /* Copy.Max.Tx.Power Params to WDI structure */
6535 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6536 MaxTxPowerParams->bssId,
6537 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6539 MaxTxPowerParams->selfStaMacAddr,
6540 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6542 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 pWdaParams->pWdaContext = pWDA;
6545 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 /* store Params pass it to WDI */
6547 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6549 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 if(IS_WDI_STATUS_FAILURE(status))
6551 {
6552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6553 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6555 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006556 /* send response to UMAC*/
6557 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 }
6559 return CONVERT_WDI2VOS_STATUS(status);
6560
6561}
Jeff Johnson295189b2012-06-20 16:38:30 -07006562#endif
schang86c22c42013-03-13 18:41:24 -07006563
6564/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006565 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6566 * send the response to PE with power value received from WDI
6567 */
6568void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6569 *pwdiSetMaxTxPowerPerBandRsp,
6570 void* pUserData)
6571{
6572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6573 tWDA_CbContext *pWDA = NULL;
6574 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6575
6576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6577 "<------ %s ", __func__);
6578 if (NULL == pWdaParams)
6579 {
6580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6581 "%s: pWdaParams received NULL", __func__);
6582 VOS_ASSERT(0);
6583 return ;
6584 }
6585 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6586 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6587 if ( NULL == pMxTxPwrPerBandParams )
6588 {
6589 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6590 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6591 VOS_ASSERT(0);
6592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6593 vos_mem_free(pWdaParams);
6594 return;
6595 }
6596
6597 /*need to free memory for the pointers used in the
6598 WDA Process.Set Max Tx Power Req function*/
6599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6600 vos_mem_free(pWdaParams);
6601 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6602
6603 /* send response to UMAC*/
6604 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6605 pMxTxPwrPerBandParams, 0);
6606
6607 return;
6608}
6609
6610/*
6611 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6612 * Request to WDI to send set Max Tx Power Per band Request
6613 */
6614 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6615 tMaxTxPowerPerBandParams
6616 *MaxTxPowerPerBandParams)
6617{
6618 WDI_Status status = WDI_STATUS_SUCCESS;
6619 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6620 tWDA_ReqParams *pWdaParams = NULL;
6621
6622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6623 "------> %s ", __func__);
6624
6625 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6626 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6627
6628 if (NULL == wdiSetMxTxPwrPerBandParams)
6629 {
6630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6631 "%s: VOS MEM Alloc Failure", __func__);
6632 VOS_ASSERT(0);
6633 return VOS_STATUS_E_NOMEM;
6634 }
6635 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6636 if (NULL == pWdaParams)
6637 {
6638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6639 "%s: VOS MEM Alloc Failure", __func__);
6640 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6641 VOS_ASSERT(0);
6642 return VOS_STATUS_E_NOMEM;
6643 }
6644 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6645 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6646 MaxTxPowerPerBandParams->bandInfo;
6647 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6648 MaxTxPowerPerBandParams->power;
6649 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6650 pWdaParams->pWdaContext = pWDA;
6651 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6652 /* store Params pass it to WDI */
6653 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6654 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6655 WDA_SetMaxTxPowerPerBandCallBack,
6656 pWdaParams);
6657 if (IS_WDI_STATUS_FAILURE(status))
6658 {
6659 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6660 "Failure in SET MAX TX Power REQ Params WDI API,"
6661 " free all the memory");
6662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6663 vos_mem_free(pWdaParams);
6664 /* send response to UMAC*/
6665 WDA_SendMsg(pWDA,
6666 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6667 MaxTxPowerPerBandParams, 0);
6668 }
6669 return CONVERT_WDI2VOS_STATUS(status);
6670}
6671
6672/*
schang86c22c42013-03-13 18:41:24 -07006673 * FUNCTION: WDA_SetTxPowerCallBack
6674 * send the response to PE with power value received from WDI
6675 */
6676void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6677 void* pUserData)
6678{
6679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6680 tWDA_CbContext *pWDA = NULL;
6681 tSirSetTxPowerReq *pTxPowerParams = NULL;
6682
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6684 "<------ %s ", __func__);
6685 if(NULL == pWdaParams)
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6688 "%s: pWdaParams received NULL", __func__);
6689 VOS_ASSERT(0) ;
6690 return ;
6691 }
6692 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6693 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6694 if(NULL == pTxPowerParams)
6695 {
6696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6697 "%s: pTxPowerParams received NULL " ,__func__);
6698 VOS_ASSERT(0);
6699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6700 vos_mem_free(pWdaParams);
6701 return ;
6702 }
6703
6704 /*need to free memory for the pointers used in the
6705 WDA Process.Set Max Tx Power Req function*/
6706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6707 vos_mem_free(pWdaParams);
6708
6709 /* send response to UMAC*/
6710 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6711 return;
6712}
6713
6714/*
6715 * FUNCTION: WDA_ProcessSetTxPowerReq
6716 * Request to WDI to send set Tx Power Request
6717 */
6718 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6719 tSirSetTxPowerReq *txPowerParams)
6720{
6721 WDI_Status status = WDI_STATUS_SUCCESS;
6722 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6723 tWDA_ReqParams *pWdaParams = NULL;
6724
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6726 "------> %s ", __func__);
6727
6728 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6729 sizeof(WDI_SetTxPowerParamsType));
6730 if(NULL == wdiSetTxPowerParams)
6731 {
6732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6733 "%s: VOS MEM Alloc Failure", __func__);
6734 VOS_ASSERT(0);
6735 return VOS_STATUS_E_NOMEM;
6736 }
6737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6738 if(NULL == pWdaParams)
6739 {
6740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6741 "%s: VOS MEM Alloc Failure", __func__);
6742 vos_mem_free(wdiSetTxPowerParams);
6743 VOS_ASSERT(0);
6744 return VOS_STATUS_E_NOMEM;
6745 }
6746 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6747 txPowerParams->bssIdx;
6748 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6749 txPowerParams->mwPower;
6750 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6751 pWdaParams->pWdaContext = pWDA;
6752 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6753 /* store Params pass it to WDI */
6754 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6755 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6756 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6757 if(IS_WDI_STATUS_FAILURE(status))
6758 {
6759 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6760 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6762 vos_mem_free(pWdaParams);
6763 /* send response to UMAC*/
6764 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6765 }
6766 return CONVERT_WDI2VOS_STATUS(status);
6767}
6768
Jeff Johnson295189b2012-06-20 16:38:30 -07006769/*
6770 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6771 * Free the memory. No need to send any response to PE in this case
6772 */
6773void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6774{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6776
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006779
6780 if(NULL == pWdaParams)
6781 {
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006784 VOS_ASSERT(0) ;
6785 return ;
6786 }
6787
6788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6789 vos_mem_free(pWdaParams->wdaMsgParam) ;
6790 vos_mem_free(pWdaParams);
6791
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 /*
6793 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6794 * so just free the request param here
6795 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 return ;
6797}
6798
Jeff Johnson295189b2012-06-20 16:38:30 -07006799/*
6800 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6801 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6802 */
6803VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6804 tP2pPsParams *pP2pPsConfigParams)
6805{
6806 WDI_Status status = WDI_STATUS_SUCCESS ;
6807 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6808 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6809 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006810 tWDA_ReqParams *pWdaParams = NULL;
6811
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006813 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 if(NULL == wdiSetP2PGONOAReqParam)
6815 {
6816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006817 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 VOS_ASSERT(0);
6819 return VOS_STATUS_E_NOMEM;
6820 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006821
6822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6823 if(NULL == pWdaParams)
6824 {
6825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006826 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006827 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006828 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006829 VOS_ASSERT(0);
6830 return VOS_STATUS_E_NOMEM;
6831 }
6832
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6834 pP2pPsConfigParams->opp_ps;
6835 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6836 pP2pPsConfigParams->ctWindow;
6837 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6838 pP2pPsConfigParams->count;
6839 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6840 pP2pPsConfigParams->duration;
6841 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6842 pP2pPsConfigParams->interval;
6843 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6844 pP2pPsConfigParams->single_noa_duration;
6845 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6846 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006847
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6849 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006850 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6851
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006853 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6854 pWdaParams->pWdaContext = pWDA;
6855
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006857 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6858
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 if(IS_WDI_STATUS_FAILURE(status))
6860 {
6861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6862 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6864 vos_mem_free(pWdaParams->wdaMsgParam);
6865 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 return CONVERT_WDI2VOS_STATUS(status);
6868
Jeff Johnson295189b2012-06-20 16:38:30 -07006869}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306870
6871#ifdef FEATURE_WLAN_TDLS
6872/*
6873 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6874 * Free the memory. No need to send any response to PE in this case
6875 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306876void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6877 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306878{
6879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6880 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306881 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306882
6883
6884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6885 "<------ %s " ,__func__);
6886 if(NULL == pWdaParams)
6887 {
6888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6889 "%s: pWdaParams received NULL", __func__);
6890 VOS_ASSERT(0) ;
6891 return ;
6892 }
6893 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6894
6895 if(NULL == pWdaParams)
6896 {
6897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6898 "%s: pWdaParams received NULL", __func__);
6899 VOS_ASSERT(0) ;
6900 return ;
6901 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306902 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6903 if( NULL == pTdlsLinkEstablishParams )
6904 {
6905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6906 "%s: pTdlsLinkEstablishParams "
6907 "received NULL " ,__func__);
6908 VOS_ASSERT(0);
6909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6910 vos_mem_free(pWdaParams);
6911 return ;
6912 }
6913 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6914 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306916 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306917 /* send response to UMAC*/
6918 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6919
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306920 return ;
6921}
6922
6923VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6924 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6925{
6926 WDI_Status status = WDI_STATUS_SUCCESS ;
6927 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6928 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6929 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6930 tWDA_ReqParams *pWdaParams = NULL;
6931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6932 "------> %s " ,__func__);
6933 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6936 "%s: VOS MEM Alloc Failure", __func__);
6937 VOS_ASSERT(0);
6938 return VOS_STATUS_E_NOMEM;
6939 }
6940 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6941 if(NULL == pWdaParams)
6942 {
6943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6944 "%s: VOS MEM Alloc Failure", __func__);
6945 vos_mem_free(pTdlsLinkEstablishParams);
6946 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6947 VOS_ASSERT(0);
6948 return VOS_STATUS_E_NOMEM;
6949 }
6950 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306951 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306952 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306953 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306954 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306955 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306956 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306957 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306958 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306959 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306960
6961 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6962 /* Store msg pointer from PE, as this will be used for response */
6963 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6964 /* store Params pass it to WDI */
6965 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6966 pWdaParams->pWdaContext = pWDA;
6967
6968 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6969 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6970 WDA_SetTDLSLinkEstablishReqParamsCallback,
6971 pWdaParams);
6972 if(IS_WDI_STATUS_FAILURE(status))
6973 {
6974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6975 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6977 vos_mem_free(pWdaParams->wdaMsgParam);
6978 vos_mem_free(pWdaParams);
6979 }
6980 return CONVERT_WDI2VOS_STATUS(status);
6981}
6982#endif
6983
6984
Jeff Johnson295189b2012-06-20 16:38:30 -07006985#ifdef WLAN_FEATURE_VOWIFI_11R
6986/*
6987 * FUNCTION: WDA_AggrAddTSReqCallback
6988 * send ADD AGGREGATED TS RSP back to PE
6989 */
6990void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6991{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6993 tWDA_CbContext *pWDA;
6994 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006997 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006998 if(NULL == pWdaParams)
6999 {
7000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007001 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007002 VOS_ASSERT(0) ;
7003 return ;
7004 }
7005
7006 pWDA = pWdaParams->pWdaContext;
7007 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008
7009 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7010 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007011 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007014
7015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 return ;
7018}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007019/*
7020 * FUNCTION: WDA_ProcessAddTSReq
7021 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7022 */
7023VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7024 tAggrAddTsParams *pAggrAddTsReqParams)
7025{
7026 WDI_Status status = WDI_STATUS_SUCCESS ;
7027 int i;
7028 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007029 tWDA_ReqParams *pWdaParams = NULL;
7030
7031
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7035 sizeof(WDI_AggrAddTSReqParamsType)) ;
7036 if(NULL == wdiAggrAddTSReqParam)
7037 {
7038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_ASSERT(0);
7041 return VOS_STATUS_E_NOMEM;
7042 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007043
7044
7045 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7046 if(NULL == pWdaParams)
7047 {
7048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007049 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007050 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007051 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007052 VOS_ASSERT(0);
7053 return VOS_STATUS_E_NOMEM;
7054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7056 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7057 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7059 {
7060 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7061 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7062 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7064 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7065 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7066 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7067 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7068 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7069 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7070 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7071 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7072 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7073 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7074 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7075 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7076 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7077 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7078 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7080 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7082 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7083 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7084 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7085 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7086 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7087 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7088 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7089 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7090 pAggrAddTsReqParams->tspec[i].inactInterval;
7091 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7092 pAggrAddTsReqParams->tspec[i].suspendInterval;
7093 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7094 pAggrAddTsReqParams->tspec[i].svcStartTime;
7095 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7096 pAggrAddTsReqParams->tspec[i].minDataRate;
7097 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7098 pAggrAddTsReqParams->tspec[i].meanDataRate;
7099 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7100 pAggrAddTsReqParams->tspec[i].peakDataRate;
7101 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7102 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7103 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7104 pAggrAddTsReqParams->tspec[i].delayBound;
7105 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7106 pAggrAddTsReqParams->tspec[i].minPhyRate;
7107 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7108 pAggrAddTsReqParams->tspec[i].surplusBw;
7109 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7110 pAggrAddTsReqParams->tspec[i].mediumTime;
7111 }
7112
7113 /* TODO: tAggrAddTsParams doesn't have the following fields */
7114#if 0
7115 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7116 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7117 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7118 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7119#endif
7120 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7121
7122 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007123 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007125 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7126
7127 pWdaParams->pWdaContext = pWDA;
7128
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007130 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7131
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 if(IS_WDI_STATUS_FAILURE(status))
7133 {
7134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7135 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7137 vos_mem_free(pWdaParams);
7138
7139 /* send the failure response back to PE*/
7140 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7141 {
7142 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7143 }
7144
7145 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7146 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007148 return CONVERT_WDI2VOS_STATUS(status) ;
7149}
7150#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007151/*
7152 * FUNCTION: WDA_EnterImpsReqCallback
7153 * send Enter IMPS RSP back to PE
7154 */
7155void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7156{
7157 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007160 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 return ;
7162}
Jeff Johnson295189b2012-06-20 16:38:30 -07007163/*
7164 * FUNCTION: WDA_ProcessEnterImpsReq
7165 * Request to WDI to Enter IMPS power state.
7166 */
7167VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7168{
7169 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 if(IS_WDI_STATUS_FAILURE(status))
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7176 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007177 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 return CONVERT_WDI2VOS_STATUS(status) ;
7180}
Jeff Johnson295189b2012-06-20 16:38:30 -07007181/*
7182 * FUNCTION: WDA_ExitImpsReqCallback
7183 * send Exit IMPS RSP back to PE
7184 */
7185void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7186{
7187 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007189 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007190 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 return ;
7192}
Jeff Johnson295189b2012-06-20 16:38:30 -07007193/*
7194 * FUNCTION: WDA_ProcessExitImpsReq
7195 * Request to WDI to Exit IMPS power state.
7196 */
7197VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7198{
7199 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 if(IS_WDI_STATUS_FAILURE(status))
7204 {
7205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7206 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007207 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007209 return CONVERT_WDI2VOS_STATUS(status) ;
7210}
Jeff Johnson295189b2012-06-20 16:38:30 -07007211/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007212 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 * send Enter BMPS RSP back to PE
7214 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007215void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007216{
7217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7218 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007219 tEnterBmpsParams *pEnterBmpsRspParams;
7220
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007222 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 if(NULL == pWdaParams)
7224 {
7225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 VOS_ASSERT(0) ;
7228 return ;
7229 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007230
7231 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7232 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7233
7234 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007235 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007236
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007239 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7240
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 return ;
7242}
Jeff Johnson295189b2012-06-20 16:38:30 -07007243/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007244 * FUNCTION: WDA_EnterBmpsReqCallback
7245 * Free memory and send Enter BMPS RSP back to PE.
7246 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7247 */
7248void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7249{
7250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7251 tWDA_CbContext *pWDA;
7252 tEnterBmpsParams *pEnterBmpsRspParams;
7253
7254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7255 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7256
7257 if(NULL == pWdaParams)
7258 {
7259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7260 "%s: pWdaParams received NULL", __func__);
7261 VOS_ASSERT(0);
7262 return;
7263 }
7264
7265 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7266 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7267 pEnterBmpsRspParams->status = wdiStatus;
7268
7269 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7270 {
7271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7272 vos_mem_free(pWdaParams);
7273 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7274 }
7275
7276 return;
7277}
7278/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 * FUNCTION: WDA_ProcessEnterBmpsReq
7280 * Request to WDI to Enter BMPS power state.
7281 */
7282VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7283 tEnterBmpsParams *pEnterBmpsReqParams)
7284{
7285 WDI_Status status = WDI_STATUS_SUCCESS;
7286 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7287 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007289 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007290 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7291 {
7292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007293 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 VOS_ASSERT(0);
7295 return VOS_STATUS_E_FAILURE;
7296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7298 if (NULL == wdiEnterBmpsReqParams)
7299 {
7300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007301 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007303 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7304 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 return VOS_STATUS_E_NOMEM;
7306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7308 if (NULL == pWdaParams)
7309 {
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 VOS_ASSERT(0);
7313 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007314 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7315 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 return VOS_STATUS_E_NOMEM;
7317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7319 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7320 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7321 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 // For CCX and 11R Roaming
7323 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7324 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7325 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007326 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7327 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007328
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 /* Store param pointer as passed in by caller */
7330 /* store Params pass it to WDI */
7331 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007332 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007335 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007336 if (IS_WDI_STATUS_FAILURE(status))
7337 {
7338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7339 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007341 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 return CONVERT_WDI2VOS_STATUS(status);
7346}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007347
7348
7349static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7350 WDI_Status wdiStatus,
7351 tExitBmpsParams *pExitBmpsReqParams)
7352{
7353 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7354
7355 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7356}
7357
7358
Jeff Johnson295189b2012-06-20 16:38:30 -07007359/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007360 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 * send Exit BMPS RSP back to PE
7362 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007363void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007364{
7365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7366 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007367 tExitBmpsParams *pExitBmpsRspParams;
7368
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007370 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 if(NULL == pWdaParams)
7372 {
7373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007374 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 VOS_ASSERT(0) ;
7376 return ;
7377 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007378
7379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7380 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7381
7382 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007383 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7386 vos_mem_free(pWdaParams) ;
7387
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007388 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 return ;
7390}
Jeff Johnson295189b2012-06-20 16:38:30 -07007391/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007392 * FUNCTION: WDA_ExitBmpsReqCallback
7393 * Free memory and send Exit BMPS RSP back to PE.
7394 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7395 */
7396void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7397{
7398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7399 tWDA_CbContext *pWDA;
7400 tExitBmpsParams *pExitBmpsRspParams;
7401
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7403 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7404
7405 if(NULL == pWdaParams)
7406 {
7407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7408 "%s: pWdaParams received NULL", __func__);
7409 VOS_ASSERT(0);
7410 return;
7411 }
7412
7413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7414 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7415 pExitBmpsRspParams->status = wdiStatus;
7416
7417 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7418 {
7419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7420 vos_mem_free(pWdaParams);
7421 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7422 }
7423
7424 return;
7425}
7426/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 * FUNCTION: WDA_ProcessExitBmpsReq
7428 * Request to WDI to Exit BMPS power state.
7429 */
7430VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7431 tExitBmpsParams *pExitBmpsReqParams)
7432{
7433 WDI_Status status = WDI_STATUS_SUCCESS ;
7434 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7435 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7436 sizeof(WDI_ExitBmpsReqParamsType)) ;
7437 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007439 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 if(NULL == wdiExitBmpsReqParams)
7441 {
7442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007445 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 return VOS_STATUS_E_NOMEM;
7447 }
7448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7449 if(NULL == pWdaParams)
7450 {
7451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 VOS_ASSERT(0);
7454 vos_mem_free(wdiExitBmpsReqParams);
7455 return VOS_STATUS_E_NOMEM;
7456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007458
7459 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7460
Yue Ma7f44bbe2013-04-12 11:47:39 -07007461 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7462 wdiExitBmpsReqParams->pUserData = pWdaParams;
7463
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 /* Store param pointer as passed in by caller */
7465 /* store Params pass it to WDI */
7466 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7467 pWdaParams->pWdaContext = pWDA;
7468 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007470 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 if(IS_WDI_STATUS_FAILURE(status))
7472 {
7473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7474 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7476 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007477 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 return CONVERT_WDI2VOS_STATUS(status) ;
7480}
Jeff Johnson295189b2012-06-20 16:38:30 -07007481/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007482 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 * send Enter UAPSD RSP back to PE
7484 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007485void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007486{
7487 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7488 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007489 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007491 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 if(NULL == pWdaParams)
7493 {
7494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007495 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 VOS_ASSERT(0) ;
7497 return ;
7498 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007499
7500 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7501 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7502
7503 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007504 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7507 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007508 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 return ;
7510}
Jeff Johnson295189b2012-06-20 16:38:30 -07007511/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007512 * FUNCTION: WDA_EnterUapsdReqCallback
7513 * Free memory and send Enter UAPSD RSP back to PE.
7514 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7515 */
7516void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7517{
7518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7519 tWDA_CbContext *pWDA;
7520 tUapsdParams *pEnterUapsdRsqParams;
7521
7522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7523 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7524
7525 if(NULL == pWdaParams)
7526 {
7527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7528 "%s: pWdaParams received NULL", __func__);
7529 VOS_ASSERT(0);
7530 return;
7531 }
7532
7533 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7534 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7535 pEnterUapsdRsqParams->status = wdiStatus;
7536
7537 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7538 {
7539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7540 vos_mem_free(pWdaParams);
7541 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7542 }
7543
7544 return;
7545}
7546/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 * FUNCTION: WDA_ProcessEnterUapsdReq
7548 * Request to WDI to Enter UAPSD power state.
7549 */
7550VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7551 tUapsdParams *pEnterUapsdReqParams)
7552{
7553 WDI_Status status = WDI_STATUS_SUCCESS ;
7554 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7555 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7556 sizeof(WDI_EnterUapsdReqParamsType)) ;
7557 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 if(NULL == wdiEnterUapsdReqParams)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_ASSERT(0);
7565 return VOS_STATUS_E_NOMEM;
7566 }
7567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7568 if(NULL == pWdaParams)
7569 {
7570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 VOS_ASSERT(0);
7573 vos_mem_free(wdiEnterUapsdReqParams);
7574 return VOS_STATUS_E_NOMEM;
7575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7577 pEnterUapsdReqParams->beDeliveryEnabled;
7578 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7579 pEnterUapsdReqParams->beTriggerEnabled;
7580 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7581 pEnterUapsdReqParams->bkDeliveryEnabled;
7582 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7583 pEnterUapsdReqParams->bkTriggerEnabled;
7584 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7585 pEnterUapsdReqParams->viDeliveryEnabled;
7586 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7587 pEnterUapsdReqParams->viTriggerEnabled;
7588 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7589 pEnterUapsdReqParams->voDeliveryEnabled;
7590 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7591 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007592 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007593
Yue Ma7f44bbe2013-04-12 11:47:39 -07007594 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7595 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007596
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 /* Store param pointer as passed in by caller */
7598 /* store Params pass it to WDI */
7599 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7600 pWdaParams->pWdaContext = pWDA;
7601 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007603 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007604 if(IS_WDI_STATUS_FAILURE(status))
7605 {
7606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7607 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7608 vos_mem_free(pWdaParams->wdaMsgParam) ;
7609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7610 vos_mem_free(pWdaParams) ;
7611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 return CONVERT_WDI2VOS_STATUS(status) ;
7613}
Jeff Johnson295189b2012-06-20 16:38:30 -07007614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007615 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 * send Exit UAPSD RSP back to PE
7617 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007618void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007619{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007620
7621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7622 tWDA_CbContext *pWDA;
7623 tExitUapsdParams *pExitUapsdRspParams;
7624
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007626 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007627 if(NULL == pWdaParams)
7628 {
7629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007630 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007631 VOS_ASSERT(0);
7632 return;
7633 }
7634
7635 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7636 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7637
7638 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007639 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007640
7641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7642 vos_mem_free(pWdaParams) ;
7643
7644 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 return ;
7646}
Jeff Johnson295189b2012-06-20 16:38:30 -07007647/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007648 * FUNCTION: WDA_ExitUapsdReqCallback
7649 * Free memory and send Exit UAPSD RSP back to PE.
7650 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7651 */
7652void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7653{
7654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7655 tWDA_CbContext *pWDA;
7656 tExitUapsdParams *pExitUapsdRspParams;
7657
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7659 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7660
7661 if(NULL == pWdaParams)
7662 {
7663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7664 "%s: pWdaParams received NULL", __func__);
7665 VOS_ASSERT(0);
7666 return;
7667 }
7668
7669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7670 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7671 pExitUapsdRspParams->status = wdiStatus;
7672
7673 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7674 {
7675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7676 vos_mem_free(pWdaParams);
7677 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7678 }
7679
7680 return;
7681}
7682/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 * FUNCTION: WDA_ProcessExitUapsdReq
7684 * Request to WDI to Exit UAPSD power state.
7685 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007686VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7687 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007688{
7689 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007690 tWDA_ReqParams *pWdaParams ;
7691 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7692 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7693 sizeof(WDI_ExitUapsdReqParamsType)) ;
7694
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007696 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007697
7698 if(NULL == wdiExitUapsdReqParams)
7699 {
7700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007701 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007702 VOS_ASSERT(0);
7703 return VOS_STATUS_E_NOMEM;
7704 }
7705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7706 if(NULL == pWdaParams)
7707 {
7708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007709 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007710 VOS_ASSERT(0);
7711 vos_mem_free(wdiExitUapsdReqParams);
7712 return VOS_STATUS_E_NOMEM;
7713 }
7714
7715 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007716 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7717 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007718
7719 /* Store param pointer as passed in by caller */
7720 /* store Params pass it to WDI */
7721 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7722 pWdaParams->pWdaContext = pWDA;
7723 pWdaParams->wdaMsgParam = pExitUapsdParams;
7724
Yue Ma7f44bbe2013-04-12 11:47:39 -07007725 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 if(IS_WDI_STATUS_FAILURE(status))
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7729 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007730 vos_mem_free(pWdaParams->wdaMsgParam) ;
7731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7732 vos_mem_free(pWdaParams) ;
7733
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 return CONVERT_WDI2VOS_STATUS(status) ;
7736}
7737
Jeff Johnson295189b2012-06-20 16:38:30 -07007738/*
7739 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7740 *
7741 */
7742void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7743{
7744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 if(NULL == pWdaParams)
7748 {
7749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 VOS_ASSERT(0) ;
7752 return ;
7753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 if( pWdaParams != NULL )
7755 {
7756 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7757 {
7758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7759 }
7760 if( pWdaParams->wdaMsgParam != NULL )
7761 {
7762 vos_mem_free(pWdaParams->wdaMsgParam) ;
7763 }
7764 vos_mem_free(pWdaParams) ;
7765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 return ;
7767}
Jeff Johnson295189b2012-06-20 16:38:30 -07007768/*
7769 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7770 * Request to WDI to set the power save params at start.
7771 */
7772VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7773 tSirPowerSaveCfg *pPowerSaveCfg)
7774{
7775 WDI_Status status = WDI_STATUS_SUCCESS ;
7776 tHalCfg *tlvStruct = NULL ;
7777 tANI_U8 *tlvStructStart = NULL ;
7778 v_PVOID_t *configParam;
7779 tANI_U32 configParamSize;
7780 tANI_U32 *configDataValue;
7781 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7782 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007784 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007788 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007790 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 return VOS_STATUS_E_FAILURE;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7794 if (NULL == wdiPowerSaveCfg)
7795 {
7796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007799 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 return VOS_STATUS_E_NOMEM;
7801 }
7802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7803 if(NULL == pWdaParams)
7804 {
7805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 VOS_ASSERT(0);
7808 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007809 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 return VOS_STATUS_E_NOMEM;
7811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7813 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 if(NULL == configParam)
7815 {
7816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007817 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007818 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 vos_mem_free(pWdaParams);
7820 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007821 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 return VOS_STATUS_E_NOMEM;
7823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 vos_mem_set(configParam, configParamSize, 0);
7825 wdiPowerSaveCfg->pConfigBuffer = configParam;
7826 tlvStruct = (tHalCfg *)configParam;
7827 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7829 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7830 tlvStruct->length = sizeof(tANI_U32);
7831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7832 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7836 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7837 tlvStruct->length = sizeof(tANI_U32);
7838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7839 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7843 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7844 tlvStruct->length = sizeof(tANI_U32);
7845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7846 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7848 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7850 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7851 tlvStruct->length = sizeof(tANI_U32);
7852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7853 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7855 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7857 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7858 tlvStruct->length = sizeof(tANI_U32);
7859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7860 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7864 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7865 tlvStruct->length = sizeof(tANI_U32);
7866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7867 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7871 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7872 tlvStruct->length = sizeof(tANI_U32);
7873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7874 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7876 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7878 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7879 tlvStruct->length = sizeof(tANI_U32);
7880 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7881 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7882 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7883 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7885 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7886 tlvStruct->length = sizeof(tANI_U32);
7887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7888 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7889 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7890 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7892 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7893 tlvStruct->length = sizeof(tANI_U32);
7894 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7895 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7897 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7899 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7900 tlvStruct->length = sizeof(tANI_U32);
7901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7902 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007903 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7904 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 /* store Params pass it to WDI */
7908 pWdaParams->wdaMsgParam = configParam;
7909 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7910 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7912 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 if(IS_WDI_STATUS_FAILURE(status))
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7916 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7917 vos_mem_free(pWdaParams->wdaMsgParam);
7918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7919 vos_mem_free(pWdaParams);
7920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 return CONVERT_WDI2VOS_STATUS(status);
7923}
Jeff Johnson295189b2012-06-20 16:38:30 -07007924/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007925 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 *
7927 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007928void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007929{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007930 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7931
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007933 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007934
7935 if(NULL == pWdaParams)
7936 {
7937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7938 "%s: pWdaParams received NULL", __func__);
7939 VOS_ASSERT(0);
7940 return ;
7941 }
7942
7943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 vos_mem_free(pWdaParams);
7945
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 return ;
7947}
Jeff Johnson295189b2012-06-20 16:38:30 -07007948/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007949 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7950 * Free memory.
7951 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7952 */
7953void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7954{
7955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7956
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7958 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7959
7960 if(NULL == pWdaParams)
7961 {
7962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7963 "%s: pWdaParams received NULL", __func__);
7964 VOS_ASSERT(0);
7965 return;
7966 }
7967
7968 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7969 {
7970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7971 vos_mem_free(pWdaParams);
7972 }
7973
7974 return;
7975}
7976/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 * FUNCTION: WDA_SetUapsdAcParamsReq
7978 * Request to WDI to set the UAPSD params for an ac (sta mode).
7979 */
7980VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7981 tUapsdInfo *pUapsdInfo)
7982{
7983 WDI_Status status = WDI_STATUS_SUCCESS;
7984 tWDA_CbContext *pWDA = NULL ;
7985 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7986 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7987 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7988 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 if(NULL == wdiUapsdParams)
7992 {
7993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 VOS_ASSERT(0);
7996 return VOS_STATUS_E_NOMEM;
7997 }
7998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7999 if(NULL == pWdaParams)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_ASSERT(0);
8004 vos_mem_free(wdiUapsdParams);
8005 return VOS_STATUS_E_NOMEM;
8006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8008 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8009 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8010 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8011 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8012 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008013 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8014 wdiUapsdParams->pUserData = pWdaParams;
8015
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 pWdaParams->pWdaContext = pWDA;
8018 /* Store param pointer as passed in by caller */
8019 pWdaParams->wdaMsgParam = pUapsdInfo;
8020 /* store Params pass it to WDI */
8021 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008023 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 if(IS_WDI_STATUS_FAILURE(status))
8026 {
8027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8028 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8030 vos_mem_free(pWdaParams);
8031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8033 return VOS_STATUS_SUCCESS;
8034 else
8035 return VOS_STATUS_E_FAILURE;
8036
Jeff Johnson295189b2012-06-20 16:38:30 -07008037}
8038/*
8039 * FUNCTION: WDA_ClearUapsdAcParamsReq
8040 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8041 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8042 * and again enter the UPASD with the modified params. Hence the disable
8043 * function was kept empty.
8044 *
8045 */
8046VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8047{
8048 /* do nothing */
8049 return VOS_STATUS_SUCCESS;
8050}
Jeff Johnson295189b2012-06-20 16:38:30 -07008051/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008052 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 *
8054 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008055void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008056{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8058
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008061
8062 if(NULL == pWdaParams)
8063 {
8064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008065 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008066 VOS_ASSERT(0) ;
8067 return ;
8068 }
8069
8070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8071 vos_mem_free(pWdaParams->wdaMsgParam);
8072 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008073
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 //print a msg, nothing else to do
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008076 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 return ;
8078}
Jeff Johnson295189b2012-06-20 16:38:30 -07008079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008080 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8081 * Free memory.
8082 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8083 */
8084void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8085{
8086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8087
8088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8090
8091 if(NULL == pWdaParams)
8092 {
8093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8094 "%s: pWdaParams received NULL", __func__);
8095 VOS_ASSERT(0);
8096 return;
8097 }
8098
8099 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8100 {
8101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8102 vos_mem_free(pWdaParams->wdaMsgParam);
8103 vos_mem_free(pWdaParams);
8104 }
8105
8106 return;
8107}
8108/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 * FUNCTION: WDA_UpdateUapsdParamsReq
8110 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8111 */
8112VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8113 tUpdateUapsdParams* pUpdateUapsdInfo)
8114{
8115 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008116 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8118 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8119 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008120 tWDA_ReqParams *pWdaParams = NULL;
8121
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 if(NULL == wdiUpdateUapsdParams)
8125 {
8126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 VOS_ASSERT(0);
8129 return VOS_STATUS_E_NOMEM;
8130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8132 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8133 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008134 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8135 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008136
8137 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8138 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 {
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008141 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008143 vos_mem_free(pUpdateUapsdInfo);
8144 vos_mem_free(wdiUpdateUapsdParams);
8145 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008148 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008150 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8151 pWdaParams->pWdaContext = pWDA;
8152
Jeff Johnson43971f52012-07-17 12:26:56 -07008153 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008154 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008155 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008156
Jeff Johnson43971f52012-07-17 12:26:56 -07008157 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 {
8159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8160 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008161 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8163 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008164 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008166 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008167}
Jeff Johnson295189b2012-06-20 16:38:30 -07008168/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008169 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 *
8171 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008172void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008173{
8174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 if(WDI_STATUS_SUCCESS != wdiStatus)
8178 {
8179 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008180 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 if(NULL == pWdaParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_ASSERT(0) ;
8187 return ;
8188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8190 vos_mem_free(pWdaParams->wdaMsgParam);
8191 vos_mem_free(pWdaParams);
8192 return ;
8193}
Jeff Johnson295189b2012-06-20 16:38:30 -07008194/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008195 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8196 * Free memory.
8197 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8198 */
8199void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8200{
8201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8202
8203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8204 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8205
8206 if(NULL == pWdaParams)
8207 {
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8209 "%s: pWdaParams received NULL", __func__);
8210 VOS_ASSERT(0);
8211 return;
8212 }
8213
8214 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8215 {
8216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8217 vos_mem_free(pWdaParams->wdaMsgParam);
8218 vos_mem_free(pWdaParams);
8219 }
8220
8221 return;
8222}
8223/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8225 *
8226 */
8227VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8228 tSirWlanSetRxpFilters *pWlanSuspendParam)
8229{
Jeff Johnson295189b2012-06-20 16:38:30 -07008230 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008231 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008232 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8233 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8234 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8235 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 if(NULL == wdiRxpFilterParams)
8239 {
8240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 VOS_ASSERT(0);
8243 vos_mem_free(pWlanSuspendParam);
8244 return VOS_STATUS_E_NOMEM;
8245 }
8246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8247 if(NULL == pWdaParams)
8248 {
8249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 VOS_ASSERT(0);
8252 vos_mem_free(wdiRxpFilterParams);
8253 vos_mem_free(pWlanSuspendParam);
8254 return VOS_STATUS_E_NOMEM;
8255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8257 pWlanSuspendParam->setMcstBcstFilter;
8258 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8259 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8260
Yue Ma7f44bbe2013-04-12 11:47:39 -07008261 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8262 wdiRxpFilterParams->pUserData = pWdaParams;
8263
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 pWdaParams->pWdaContext = pWDA;
8265 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8266 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008267 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008268 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008269 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008270 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 {
8272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8273 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008274 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8276 vos_mem_free(pWdaParams->wdaMsgParam);
8277 vos_mem_free(pWdaParams);
8278 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008279 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008280}
Jeff Johnson295189b2012-06-20 16:38:30 -07008281/*
8282 * FUNCTION: WDA_WdiIndicationCallback
8283 *
8284 */
8285void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8286 void* pUserData)
8287{
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008290}
Jeff Johnson295189b2012-06-20 16:38:30 -07008291/*
8292 * FUNCTION: WDA_ProcessWlanSuspendInd
8293 *
8294 */
8295VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8296 tSirWlanSuspendParam *pWlanSuspendParam)
8297{
8298 WDI_Status wdiStatus;
8299 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8303 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8304 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8305 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8308 if(WDI_STATUS_PENDING == wdiStatus)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 }
8313 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8314 {
8315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008316 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 vos_mem_free(pWlanSuspendParam);
8319 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8320}
8321
Chet Lanctot186b5732013-03-18 10:26:30 -07008322#ifdef WLAN_FEATURE_11W
8323/*
8324 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8325 *
8326 */
8327VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8328 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8329{
8330 WDI_Status wdiStatus;
8331 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8333 "------> %s ", __func__);
8334
8335 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8336 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8337 sizeof(tSirMacAddr));
8338
8339 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8340 wdiExclUnencryptParams.pUserData = pWDA;
8341
8342 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8343 if(WDI_STATUS_PENDING == wdiStatus)
8344 {
8345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8346 "Pending received for %s:%d ", __func__, __LINE__ );
8347 }
8348 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8351 "Failure in %s:%d ", __func__, __LINE__ );
8352 }
8353 vos_mem_free(pExclUnencryptParam);
8354 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8355}
8356#endif
8357
Jeff Johnson295189b2012-06-20 16:38:30 -07008358/*
8359 * FUNCTION: WDA_ProcessWlanResumeCallback
8360 *
8361 */
8362void WDA_ProcessWlanResumeCallback(
8363 WDI_SuspendResumeRspParamsType *resumeRspParams,
8364 void* pUserData)
8365{
8366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 if(NULL == pWdaParams)
8370 {
8371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 VOS_ASSERT(0) ;
8374 return ;
8375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8377 {
8378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008379 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8382 vos_mem_free(pWdaParams->wdaMsgParam);
8383 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 return ;
8385}
Jeff Johnson295189b2012-06-20 16:38:30 -07008386/*
8387 * FUNCTION: WDA_ProcessWlanResumeReq
8388 *
8389 */
8390VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8391 tSirWlanResumeParam *pWlanResumeParam)
8392{
8393 WDI_Status wdiStatus;
8394 WDI_ResumeParamsType *wdiResumeParams =
8395 (WDI_ResumeParamsType *)vos_mem_malloc(
8396 sizeof(WDI_ResumeParamsType) ) ;
8397 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 if(NULL == wdiResumeParams)
8401 {
8402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 VOS_ASSERT(0);
8405 return VOS_STATUS_E_NOMEM;
8406 }
8407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8408 if(NULL == pWdaParams)
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 VOS_ASSERT(0);
8413 vos_mem_free(wdiResumeParams);
8414 return VOS_STATUS_E_NOMEM;
8415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8417 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 wdiResumeParams->wdiReqStatusCB = NULL;
8420 pWdaParams->wdaMsgParam = pWlanResumeParam;
8421 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8422 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8424 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8425 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8429 "Failure in Host Resume REQ WDI API, free all the memory " );
8430 VOS_ASSERT(0);
8431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8432 vos_mem_free(pWdaParams->wdaMsgParam);
8433 vos_mem_free(pWdaParams);
8434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8436}
8437
Jeff Johnson295189b2012-06-20 16:38:30 -07008438/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008439 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 *
8441 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008442void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008443{
8444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 if(NULL == pWdaParams)
8448 {
8449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 VOS_ASSERT(0) ;
8452 return ;
8453 }
8454
8455 vos_mem_free(pWdaParams->wdaMsgParam) ;
8456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8457 vos_mem_free(pWdaParams) ;
8458 /*
8459 * No respone required for SetBeaconFilter req so just free the request
8460 * param here
8461 */
8462
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 return ;
8464}
Jeff Johnson295189b2012-06-20 16:38:30 -07008465/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008466 * FUNCTION: WDA_SetBeaconFilterReqCallback
8467 * Free memory.
8468 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8469 */
8470void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8471{
8472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8473
8474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8475 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8476
8477 if(NULL == pWdaParams)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8480 "%s: pWdaParams received NULL", __func__);
8481 VOS_ASSERT(0);
8482 return;
8483 }
8484
8485 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8486 {
8487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8488 vos_mem_free(pWdaParams->wdaMsgParam);
8489 vos_mem_free(pWdaParams);
8490 }
8491
8492 return;
8493}
8494/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 * FUNCTION: WDA_SetBeaconFilterReq
8496 * Request to WDI to send the beacon filtering related information.
8497 */
8498VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8499 tBeaconFilterMsg* pBeaconFilterInfo)
8500{
8501 WDI_Status status = WDI_STATUS_SUCCESS;
8502 tANI_U8 *dstPtr, *srcPtr;
8503 tANI_U8 filterLength;
8504 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8505 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8506 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8507 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 if(NULL == wdiBeaconFilterInfo)
8511 {
8512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 VOS_ASSERT(0);
8515 return VOS_STATUS_E_NOMEM;
8516 }
8517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8518 if(NULL == pWdaParams)
8519 {
8520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 VOS_ASSERT(0);
8523 vos_mem_free(wdiBeaconFilterInfo);
8524 return VOS_STATUS_E_NOMEM;
8525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008526 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8527 pBeaconFilterInfo->beaconInterval;
8528 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8529 pBeaconFilterInfo->capabilityInfo;
8530 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8531 pBeaconFilterInfo->capabilityMask;
8532 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008533
8534 //Fill the BssIdx
8535 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8536
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 //Fill structure with info contained in the beaconFilterTable
8538 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8539 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8540 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8541 if(WDI_BEACON_FILTER_LEN < filterLength)
8542 {
8543 filterLength = WDI_BEACON_FILTER_LEN;
8544 }
8545 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008546 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8547 wdiBeaconFilterInfo->pUserData = pWdaParams;
8548
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 /* Store param pointer as passed in by caller */
8550 /* store Params pass it to WDI */
8551 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8552 pWdaParams->pWdaContext = pWDA;
8553 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8554
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008556 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 if(IS_WDI_STATUS_FAILURE(status))
8558 {
8559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8560 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8561 vos_mem_free(pWdaParams->wdaMsgParam) ;
8562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8563 vos_mem_free(pWdaParams) ;
8564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 return CONVERT_WDI2VOS_STATUS(status) ;
8566}
Jeff Johnson295189b2012-06-20 16:38:30 -07008567/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008568 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 *
8570 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008571void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008572{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008576 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008577
8578 if(NULL == pWdaParams)
8579 {
8580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008581 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008582 VOS_ASSERT(0) ;
8583 return ;
8584 }
8585
8586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8587 vos_mem_free(pWdaParams->wdaMsgParam);
8588 vos_mem_free(pWdaParams);
8589
Jeff Johnson295189b2012-06-20 16:38:30 -07008590 //print a msg, nothing else to do
8591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008592 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 return ;
8594}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008595/*
8596 * FUNCTION: WDA_RemBeaconFilterReqCallback
8597 * Free memory.
8598 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8599 */
8600void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8601{
8602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8603
8604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8605 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8606
8607 if(NULL == pWdaParams)
8608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "%s: pWdaParams received NULL", __func__);
8611 VOS_ASSERT(0);
8612 return;
8613 }
8614
8615 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8616 {
8617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8618 vos_mem_free(pWdaParams->wdaMsgParam);
8619 vos_mem_free(pWdaParams);
8620 }
8621
8622 return;
8623}
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 // TODO: PE does not have this feature for now implemented,
8625 // but the support for removing beacon filter exists between
8626 // HAL and FW. This function can be called whenever PE defines
8627 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008628/*
8629 * FUNCTION: WDA_RemBeaconFilterReq
8630 * Request to WDI to send the removal of beacon filtering related information.
8631 */
8632VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8633 tRemBeaconFilterMsg* pBeaconFilterInfo)
8634{
8635 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008636 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8638 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8639 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008640 tWDA_ReqParams *pWdaParams ;
8641
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008643 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 if(NULL == wdiBeaconFilterInfo)
8645 {
8646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 VOS_ASSERT(0);
8649 return VOS_STATUS_E_NOMEM;
8650 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8652 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 {
8654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008657 vos_mem_free(wdiBeaconFilterInfo);
8658 vos_mem_free(pBeaconFilterInfo);
8659 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008661
8662 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8663 pBeaconFilterInfo->ucIeCount;
8664 //Fill structure with info contained in the ucRemIeId
8665 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8666 pBeaconFilterInfo->ucRemIeId,
8667 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8668 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8669 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670
8671 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008672 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008674 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8675
8676 pWdaParams->pWdaContext = pWDA;
8677
Jeff Johnson43971f52012-07-17 12:26:56 -07008678 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008679 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008680 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 {
8682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8683 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008684 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8686 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008687 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008689 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008690}
Jeff Johnson295189b2012-06-20 16:38:30 -07008691/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008692 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 *
8694 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008695void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008696{
8697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008699 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 if(NULL == pWdaParams)
8701 {
8702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 VOS_ASSERT(0) ;
8705 return ;
8706 }
8707
8708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8709 vos_mem_free(pWdaParams) ;
8710
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 return ;
8712}
Jeff Johnson295189b2012-06-20 16:38:30 -07008713/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008714 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8715 * Free memory.
8716 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8717 */
8718void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8719{
8720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8721
8722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8723 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8724
8725 if(NULL == pWdaParams)
8726 {
8727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8728 "%s: pWdaParams received NULL", __func__);
8729 VOS_ASSERT(0);
8730 return;
8731 }
8732
8733 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8734 {
8735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8736 vos_mem_free(pWdaParams);
8737 }
8738
8739 return;
8740}
8741/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 * FUNCTION: WDA_SetRSSIThresholdsReq
8743 * Request to WDI to set the RSSI thresholds (sta mode).
8744 */
8745VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8746{
8747 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008748 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 tWDA_CbContext *pWDA = NULL ;
8750 v_PVOID_t pVosContext = NULL;
8751 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8752 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8753 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8754 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008757 if(NULL == wdiRSSIThresholdsInfo)
8758 {
8759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
8763 }
8764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8765 if(NULL == pWdaParams)
8766 {
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 VOS_ASSERT(0);
8770 vos_mem_free(wdiRSSIThresholdsInfo);
8771 return VOS_STATUS_E_NOMEM;
8772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8775 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8776 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8778 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8779 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8781 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8782 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008783 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8784 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8786 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8787
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 /* Store param pointer as passed in by caller */
8789 /* store Params pass it to WDI */
8790 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8791 pWdaParams->pWdaContext = pWDA;
8792 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008793 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008794 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008795 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 {
8797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8798 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008799 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8801 vos_mem_free(pWdaParams) ;
8802 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008803 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008804
8805}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008806/*
Yue Madb90ac12013-04-04 13:39:13 -07008807 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008808 *
8809 */
Yue Madb90ac12013-04-04 13:39:13 -07008810void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008811{
8812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8813
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 if(NULL == pWdaParams)
8817 {
8818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 VOS_ASSERT(0) ;
8821 return ;
8822 }
8823
8824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8825 vos_mem_free(pWdaParams->wdaMsgParam);
8826 vos_mem_free(pWdaParams) ;
8827
8828 //print a msg, nothing else to do
8829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008830 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008831 return ;
8832}
Jeff Johnson295189b2012-06-20 16:38:30 -07008833/*
Yue Madb90ac12013-04-04 13:39:13 -07008834 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008835 * Free memory.
8836 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008837 */
8838void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8839{
8840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8841
8842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8843 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8844
8845 if(NULL == pWdaParams)
8846 {
8847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8848 "%s: Invalid pWdaParams pointer", __func__);
8849 VOS_ASSERT(0);
8850 return;
8851 }
8852
8853 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8854 {
8855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8856 vos_mem_free(pWdaParams->wdaMsgParam);
8857 vos_mem_free(pWdaParams);
8858 }
8859
8860 return;
8861}
8862/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 * FUNCTION: WDA_ProcessHostOffloadReq
8864 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8865 * to broadcast traffic (sta mode).
8866 */
8867VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8868 tSirHostOffloadReq *pHostOffloadParams)
8869{
8870 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008871 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8873 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8874 sizeof(WDI_HostOffloadReqParamsType)) ;
8875 tWDA_ReqParams *pWdaParams ;
8876
8877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008878 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008879
8880 if(NULL == wdiHostOffloadInfo)
8881 {
8882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 VOS_ASSERT(0);
8885 return VOS_STATUS_E_NOMEM;
8886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8888 if(NULL == pWdaParams)
8889 {
8890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 VOS_ASSERT(0);
8893 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008894 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 return VOS_STATUS_E_NOMEM;
8896 }
8897
8898 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8899 pHostOffloadParams->offloadType;
8900 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8901 pHostOffloadParams->enableOrDisable;
8902
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008903 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8904 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8905
Jeff Johnson295189b2012-06-20 16:38:30 -07008906 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8907 {
8908 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8909 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8910 pHostOffloadParams->params.hostIpv4Addr,
8911 4);
8912 break;
8913 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8914 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8915 pHostOffloadParams->params.hostIpv6Addr,
8916 16);
8917 break;
8918 case SIR_IPV6_NS_OFFLOAD:
8919 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8920 pHostOffloadParams->params.hostIpv6Addr,
8921 16);
8922
8923#ifdef WLAN_NS_OFFLOAD
8924 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8925 {
8926 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8927 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8928 16);
8929 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8930 }
8931 else
8932 {
8933 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8934 }
8935
8936 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8937 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8938 16);
8939 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8940 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8941 6);
8942
8943 //Only two are supported so let's go through them without a loop
8944 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8945 {
8946 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8947 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8948 16);
8949 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8950 }
8951 else
8952 {
8953 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8954 }
8955
8956 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8957 {
8958 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8959 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8960 16);
8961 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8962 }
8963 else
8964 {
8965 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8966 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308967 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8968 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 break;
8970#endif //WLAN_NS_OFFLOAD
8971 default:
8972 {
8973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8974 "No Handling for Offload Type %x in WDA "
8975 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8976 //WDA_VOS_ASSERT(0) ;
8977 }
8978 }
Yue Madb90ac12013-04-04 13:39:13 -07008979 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8980 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008981
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008983 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 /* store Params pass it to WDI */
8985 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8986 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008987
Jeff Johnson295189b2012-06-20 16:38:30 -07008988
Jeff Johnson43971f52012-07-17 12:26:56 -07008989 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008990 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008991
Jeff Johnson43971f52012-07-17 12:26:56 -07008992 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 {
8994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8995 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008996 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8998 vos_mem_free(pWdaParams->wdaMsgParam);
8999 vos_mem_free(pWdaParams) ;
9000 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009001 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009002
9003}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009004/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009005 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 *
9007 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009008void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009009{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9011
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009013 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009014
9015 if(NULL == pWdaParams)
9016 {
9017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009018 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009019 VOS_ASSERT(0) ;
9020 return ;
9021 }
9022
9023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9024 vos_mem_free(pWdaParams->wdaMsgParam);
9025 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009026
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 //print a msg, nothing else to do
9028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009029 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009030 return ;
9031}
Jeff Johnson295189b2012-06-20 16:38:30 -07009032/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009033 * FUNCTION: WDA_KeepAliveReqCallback
9034 * Free memory.
9035 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9036 */
9037void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9038{
9039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9040
9041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9042 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9043
9044 if(NULL == pWdaParams)
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9047 "%s: pWdaParams received NULL", __func__);
9048 VOS_ASSERT(0);
9049 return;
9050 }
9051
9052 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9053 {
9054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9055 vos_mem_free(pWdaParams->wdaMsgParam);
9056 vos_mem_free(pWdaParams);
9057 }
9058
9059 return;
9060}
9061/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 * FUNCTION: WDA_ProcessKeepAliveReq
9063 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9064 * wakeup due to broadcast traffic (sta mode).
9065 */
9066VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9067 tSirKeepAliveReq *pKeepAliveParams)
9068{
9069 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009070 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9072 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9073 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009074 tWDA_ReqParams *pWdaParams;
9075
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009077 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 if(NULL == wdiKeepAliveInfo)
9079 {
9080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009083 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 return VOS_STATUS_E_NOMEM;
9085 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009086
9087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9088 if(NULL == pWdaParams)
9089 {
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009091 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009092 VOS_ASSERT(0);
9093 vos_mem_free(wdiKeepAliveInfo);
9094 vos_mem_free(pKeepAliveParams);
9095 return VOS_STATUS_E_NOMEM;
9096 }
9097
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9099 pKeepAliveParams->packetType;
9100 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9101 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009102
9103 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9104 pKeepAliveParams->bssId,
9105 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009106
9107 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9108 {
9109 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9110 pKeepAliveParams->hostIpv4Addr,
9111 SIR_IPV4_ADDR_LEN);
9112 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9113 pKeepAliveParams->destIpv4Addr,
9114 SIR_IPV4_ADDR_LEN);
9115 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9116 pKeepAliveParams->destMacAddr,
9117 SIR_MAC_ADDR_LEN);
9118 }
9119 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9120 {
9121 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9122 SIR_IPV4_ADDR_LEN,
9123 0);
9124 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9125 SIR_IPV4_ADDR_LEN,
9126 0);
9127 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9128 SIR_MAC_ADDR_LEN,
9129 0);
9130 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009131 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9132 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009133
Jeff Johnson295189b2012-06-20 16:38:30 -07009134 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009135 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009137 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9138 pWdaParams->pWdaContext = pWDA;
9139
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9141 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9142 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9143 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9144 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9146 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9147 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9148 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9149 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9151 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9152 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9153 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9154 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9155 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9156 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9157 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9159 "TimePeriod %d PacketType %d",
9160 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9161 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009162 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009163 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009164
Jeff Johnson43971f52012-07-17 12:26:56 -07009165 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 {
9167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9168 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009169 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9171 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009172 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009174 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009175
9176}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009178 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 *
9180 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009181void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009182 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9183 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009184{
9185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009187 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 if(NULL == pWdaParams)
9189 {
9190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009191 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 VOS_ASSERT(0) ;
9193 return ;
9194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9196 vos_mem_free(pWdaParams->wdaMsgParam);
9197 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 return ;
9199}
Jeff Johnson295189b2012-06-20 16:38:30 -07009200/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009201 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9202 * Free memory.
9203 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9204 */
9205void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9206{
9207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9208
9209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9210 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9211
9212 if(NULL == pWdaParams)
9213 {
9214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9215 "%s: pWdaParams received NULL", __func__);
9216 VOS_ASSERT(0);
9217 return;
9218 }
9219
9220 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9221 {
9222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9223 vos_mem_free(pWdaParams->wdaMsgParam);
9224 vos_mem_free(pWdaParams);
9225 }
9226
9227 return;
9228}
9229
9230/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9232 * Request to WDI to add WOWL Bcast pattern
9233 */
9234VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9235 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9236{
9237 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009238 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9240 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9241 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9242 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009244 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 if(NULL == wdiWowlAddBcPtrnInfo)
9246 {
9247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 VOS_ASSERT(0);
9250 return VOS_STATUS_E_NOMEM;
9251 }
9252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9253 if(NULL == pWdaParams)
9254 {
9255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 VOS_ASSERT(0);
9258 vos_mem_free(wdiWowlAddBcPtrnInfo);
9259 return VOS_STATUS_E_NOMEM;
9260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9262 pWowlAddBcPtrnParams->ucPatternId;
9263 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9264 pWowlAddBcPtrnParams->ucPatternByteOffset;
9265 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9266 pWowlAddBcPtrnParams->ucPatternMaskSize;
9267 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9268 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9270 {
9271 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9272 pWowlAddBcPtrnParams->ucPattern,
9273 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9274 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9275 pWowlAddBcPtrnParams->ucPatternMask,
9276 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9277 }
9278 else
9279 {
9280 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9281 pWowlAddBcPtrnParams->ucPattern,
9282 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9283 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9284 pWowlAddBcPtrnParams->ucPatternMask,
9285 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9286
9287 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9288 pWowlAddBcPtrnParams->ucPatternExt,
9289 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9290 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9291 pWowlAddBcPtrnParams->ucPatternMaskExt,
9292 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9293 }
9294
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009295 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9296 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9297
Yue Ma7f44bbe2013-04-12 11:47:39 -07009298 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9299 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 /* Store param pointer as passed in by caller */
9301 /* store Params pass it to WDI */
9302 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9303 pWdaParams->pWdaContext = pWDA;
9304 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009305 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009306 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009307 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 {
9309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9310 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009311 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 vos_mem_free(pWdaParams->wdaMsgParam) ;
9313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9314 vos_mem_free(pWdaParams) ;
9315 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009316 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317
9318}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009319/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009320 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 *
9322 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009323void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009324 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9325 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009326{
9327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009329 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 if(NULL == pWdaParams)
9331 {
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 VOS_ASSERT(0) ;
9335 return ;
9336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9338 vos_mem_free(pWdaParams->wdaMsgParam);
9339 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 return ;
9341}
Jeff Johnson295189b2012-06-20 16:38:30 -07009342/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009343 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9344 * Free memory.
9345 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9346 */
9347void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9348{
9349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9350
9351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9353
9354 if(NULL == pWdaParams)
9355 {
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9357 "%s: pWdaParams received NULL", __func__);
9358 VOS_ASSERT(0);
9359 return;
9360 }
9361
9362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9363 {
9364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9365 vos_mem_free(pWdaParams->wdaMsgParam);
9366 vos_mem_free(pWdaParams);
9367 }
9368
9369 return;
9370}
9371/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9373 * Request to WDI to delete WOWL Bcast pattern
9374 */
9375VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9376 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9377{
9378 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009379 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9381 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9382 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9383 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009385 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 if(NULL == wdiWowlDelBcPtrnInfo)
9387 {
9388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 VOS_ASSERT(0);
9391 return VOS_STATUS_E_NOMEM;
9392 }
9393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9394 if(NULL == pWdaParams)
9395 {
9396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 VOS_ASSERT(0);
9399 vos_mem_free(wdiWowlDelBcPtrnInfo);
9400 return VOS_STATUS_E_NOMEM;
9401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9403 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009404
9405 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9406 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9407
Yue Ma7f44bbe2013-04-12 11:47:39 -07009408 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9409 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 /* Store param pointer as passed in by caller */
9411 /* store Params pass it to WDI */
9412 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9413 pWdaParams->pWdaContext = pWDA;
9414 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009415 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009416 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009417 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 {
9419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9420 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009421 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 vos_mem_free(pWdaParams->wdaMsgParam) ;
9423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9424 vos_mem_free(pWdaParams) ;
9425 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009426 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009427
9428}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009429/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009430 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 *
9432 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009433void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009434{
9435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9436 tWDA_CbContext *pWDA;
9437 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 if(NULL == pWdaParams)
9441 {
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009443 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_ASSERT(0) ;
9445 return ;
9446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9448 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9449
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009450 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9451
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9453 vos_mem_free(pWdaParams) ;
9454
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009455 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009456 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009457 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 return ;
9459}
Jeff Johnson295189b2012-06-20 16:38:30 -07009460/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009461 * FUNCTION: WDA_WowlEnterReqCallback
9462 * Free memory and send WOWL Enter RSP back to PE.
9463 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9464 */
9465void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9466{
9467 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9468 tWDA_CbContext *pWDA;
9469 tSirHalWowlEnterParams *pWowlEnterParams;
9470
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9472 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9473
9474 if(NULL == pWdaParams)
9475 {
9476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9477 "%s: pWdaParams received NULL", __func__);
9478 VOS_ASSERT(0);
9479 return;
9480 }
9481
9482 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9483 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9484 pWowlEnterParams->status = wdiStatus;
9485
9486 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9487 {
9488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9489 vos_mem_free(pWdaParams);
9490 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9491 }
9492
9493 return;
9494}
9495/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 * FUNCTION: WDA_ProcessWowlEnterReq
9497 * Request to WDI to enter WOWL
9498 */
9499VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9500 tSirHalWowlEnterParams *pWowlEnterParams)
9501{
9502 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009503 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9505 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9506 sizeof(WDI_WowlEnterReqParamsType)) ;
9507 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 if(NULL == wdiWowlEnterInfo)
9511 {
9512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 VOS_ASSERT(0);
9515 return VOS_STATUS_E_NOMEM;
9516 }
9517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9518 if(NULL == pWdaParams)
9519 {
9520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 VOS_ASSERT(0);
9523 vos_mem_free(wdiWowlEnterInfo);
9524 return VOS_STATUS_E_NOMEM;
9525 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009526
9527 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9528
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9530 pWowlEnterParams->magicPtrn,
9531 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9533 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9535 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9537 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9539 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9541 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9543 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9545 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9547 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009548#ifdef WLAN_WAKEUP_EVENTS
9549 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9550 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9551
9552 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9553 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9554
9555 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9556 pWowlEnterParams->ucWowNetScanOffloadMatch;
9557
9558 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9559 pWowlEnterParams->ucWowGTKRekeyError;
9560
9561 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9562 pWowlEnterParams->ucWoWBSSConnLoss;
9563#endif // WLAN_WAKEUP_EVENTS
9564
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009565 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9566 pWowlEnterParams->bssIdx;
9567
Yue Ma7f44bbe2013-04-12 11:47:39 -07009568 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9569 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 /* Store param pointer as passed in by caller */
9571 /* store Params pass it to WDI */
9572 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9573 pWdaParams->pWdaContext = pWDA;
9574 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009575 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009577 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 {
9579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9580 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009581 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 vos_mem_free(pWdaParams->wdaMsgParam) ;
9583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9584 vos_mem_free(pWdaParams) ;
9585 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009586 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009587
9588}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009589/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009590 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 *
9592 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009593void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009594{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9596 tWDA_CbContext *pWDA;
9597 tSirHalWowlExitParams *pWowlExitParams;
9598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009599 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009600 if(NULL == pWdaParams)
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009604 VOS_ASSERT(0) ;
9605 return ;
9606 }
9607 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9608 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9609
9610 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009611 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009612
9613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9614 vos_mem_free(pWdaParams) ;
9615
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009617 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009618 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 return ;
9620}
Jeff Johnson295189b2012-06-20 16:38:30 -07009621/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009622 * FUNCTION: WDA_WowlExitReqCallback
9623 * Free memory and send WOWL Exit RSP back to PE.
9624 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9625 */
9626void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9627{
9628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9629 tWDA_CbContext *pWDA;
9630 tSirHalWowlExitParams *pWowlExitParams;
9631
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9633 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9634
9635 if(NULL == pWdaParams)
9636 {
9637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9638 "%s: pWdaParams received NULL", __func__);
9639 VOS_ASSERT(0);
9640 return;
9641 }
9642
9643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9644 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9645 pWowlExitParams->status = wdiStatus;
9646
9647 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9648 {
9649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9650 vos_mem_free(pWdaParams);
9651 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9652 }
9653
9654 return;
9655}
9656/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 * FUNCTION: WDA_ProcessWowlExitReq
9658 * Request to WDI to add WOWL Bcast pattern
9659 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009660VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9661 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009662{
9663 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009664 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009665 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9666 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9667 sizeof(WDI_WowlExitReqParamsType)) ;
9668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009670 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009671 if(NULL == wdiWowlExitInfo)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009674 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009675 VOS_ASSERT(0);
9676 return VOS_STATUS_E_NOMEM;
9677 }
9678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9679 if(NULL == pWdaParams)
9680 {
9681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009682 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009683 VOS_ASSERT(0);
9684 vos_mem_free(wdiWowlExitInfo);
9685 return VOS_STATUS_E_NOMEM;
9686 }
9687
9688 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9689 pWowlExitParams->bssIdx;
9690
Yue Ma7f44bbe2013-04-12 11:47:39 -07009691 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9692 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009693
9694 /* Store param pointer as passed in by caller */
9695 /* store Params pass it to WDI */
9696 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9697 pWdaParams->pWdaContext = pWDA;
9698 pWdaParams->wdaMsgParam = pWowlExitParams;
9699
9700 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009701 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009702
Jeff Johnson43971f52012-07-17 12:26:56 -07009703 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9706 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009707 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9709 vos_mem_free(pWdaParams->wdaMsgParam);
9710 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009712 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009714/*
9715 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9716 * Request to WDI to determine whether a given station is capable of
9717 * using HW-based frame translation
9718 */
9719v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9720 tANI_U8 staIdx)
9721{
9722 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9723}
Jeff Johnson295189b2012-06-20 16:38:30 -07009724/*
9725 * FUNCTION: WDA_NvDownloadReqCallback
9726 * send NV Download RSP back to PE
9727 */
9728void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9729 void* pUserData)
9730{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009731
9732 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9733 tWDA_CbContext *pWDA;
9734
Jeff Johnson295189b2012-06-20 16:38:30 -07009735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009736 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009737
9738 if(NULL == pWdaParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009742 VOS_ASSERT(0) ;
9743 return ;
9744 }
9745
9746 pWDA = pWdaParams->pWdaContext;
9747
Jeff Johnson295189b2012-06-20 16:38:30 -07009748 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9750 vos_mem_free(pWdaParams);
9751
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 return ;
9754}
Jeff Johnson295189b2012-06-20 16:38:30 -07009755/*
9756 * FUNCTION: WDA_ProcessNvDownloadReq
9757 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9758 */
9759VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9760{
9761 /* Initialize the local Variables*/
9762 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9763 v_VOID_t *pNvBuffer=NULL;
9764 v_SIZE_t bufferSize = 0;
9765 WDI_Status status = WDI_STATUS_E_FAILURE;
9766 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767 tWDA_ReqParams *pWdaParams ;
9768
Jeff Johnson295189b2012-06-20 16:38:30 -07009769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009770 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 if(NULL == pWDA)
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009774 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009775 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 return VOS_STATUS_E_FAILURE;
9777 }
9778
9779 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009780 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9781
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9783 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 if(NULL == wdiNvDownloadReqParam)
9785 {
9786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 VOS_ASSERT(0);
9789 return VOS_STATUS_E_NOMEM;
9790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 /* Copy Params to wdiNvDownloadReqParam*/
9792 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9793 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009794
9795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9796 if(NULL == pWdaParams)
9797 {
9798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009799 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009800 VOS_ASSERT(0);
9801 vos_mem_free(wdiNvDownloadReqParam);
9802 return VOS_STATUS_E_NOMEM;
9803 }
9804
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009806 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9807 pWdaParams->wdaMsgParam = NULL;
9808 pWdaParams->pWdaContext = pWDA;
9809
9810
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009812
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009814 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9815
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 if(IS_WDI_STATUS_FAILURE(status))
9817 {
9818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9819 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9821 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009824}
9825/*
9826 * FUNCTION: WDA_FlushAcReqCallback
9827 * send Flush AC RSP back to TL
9828 */
9829void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9830{
9831 vos_msg_t wdaMsg = {0} ;
9832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9833 tFlushACReq *pFlushACReqParams;
9834 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 if(NULL == pWdaParams)
9838 {
9839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 VOS_ASSERT(0) ;
9842 return ;
9843 }
9844
9845 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9846 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9847 if(NULL == pFlushACRspParams)
9848 {
9849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009852 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 return ;
9854 }
9855 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9856 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9857 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9858 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9859 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009860 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 vos_mem_free(pWdaParams->wdaMsgParam) ;
9862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9863 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9865 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9866 // POST message to TL
9867 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9868
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 return ;
9870}
Jeff Johnson295189b2012-06-20 16:38:30 -07009871/*
9872 * FUNCTION: WDA_ProcessFlushAcReq
9873 * Request to WDI to Update the DELBA REQ params.
9874 */
9875VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9876 tFlushACReq *pFlushAcReqParams)
9877{
9878 WDI_Status status = WDI_STATUS_SUCCESS ;
9879 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9880 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9881 sizeof(WDI_FlushAcReqParamsType)) ;
9882 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 if(NULL == wdiFlushAcReqParam)
9884 {
9885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 VOS_ASSERT(0);
9888 return VOS_STATUS_E_NOMEM;
9889 }
9890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9891 if(NULL == pWdaParams)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 VOS_ASSERT(0);
9896 vos_mem_free(wdiFlushAcReqParam);
9897 return VOS_STATUS_E_NOMEM;
9898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9902 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9903 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9904 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 /* Store Flush AC pointer, as this will be used for response */
9906 /* store Params pass it to WDI */
9907 pWdaParams->pWdaContext = pWDA;
9908 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9909 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9911 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 if(IS_WDI_STATUS_FAILURE(status))
9913 {
9914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9915 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9916 vos_mem_free(pWdaParams->wdaMsgParam) ;
9917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9918 vos_mem_free(pWdaParams) ;
9919 //TODO: respond to TL with failure
9920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009922}
Jeff Johnson295189b2012-06-20 16:38:30 -07009923/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009924 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 *
9926 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009927void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009928{
9929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9930 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009931 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009932
9933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009934 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 if(NULL == pWdaParams)
9936 {
9937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009938 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 VOS_ASSERT(0) ;
9940 return ;
9941 }
9942 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9943 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9944 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9945 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9946 {
9947 pWDA->wdaAmpSessionOn = VOS_FALSE;
9948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 vos_mem_free(pWdaParams->wdaMsgParam) ;
9950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9951 vos_mem_free(pWdaParams) ;
9952 /*
9953 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9954 * param here
9955 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 return ;
9957}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009958/*
9959 * FUNCTION: WDA_BtAmpEventReqCallback
9960 * Free memory.
9961 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9962 */
9963void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9964{
9965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9966 tWDA_CbContext *pWDA;
9967 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968
Yue Ma7f44bbe2013-04-12 11:47:39 -07009969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9970 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9971
9972 if(NULL == pWdaParams)
9973 {
9974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9975 "%s: pWdaParams received NULL", __func__);
9976 VOS_ASSERT(0);
9977 return;
9978 }
9979
9980 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9981 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9982
9983 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9984 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9985 {
9986 pWDA->wdaAmpSessionOn = VOS_FALSE;
9987 }
9988
9989 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9990 {
9991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9992 vos_mem_free(pWdaParams->wdaMsgParam);
9993 vos_mem_free(pWdaParams);
9994 }
9995
9996 return;
9997}
Jeff Johnson295189b2012-06-20 16:38:30 -07009998/*
9999 * FUNCTION: WDA_ProcessBtAmpEventReq
10000 * Request to WDI to Update with BT AMP events.
10001 */
10002VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10003 tSmeBtAmpEvent *pBtAmpEventParams)
10004{
10005 WDI_Status status = WDI_STATUS_SUCCESS ;
10006 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10007 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10008 sizeof(WDI_BtAmpEventParamsType)) ;
10009 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 if(NULL == wdiBtAmpEventParam)
10013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 VOS_ASSERT(0);
10017 return VOS_STATUS_E_NOMEM;
10018 }
10019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10020 if(NULL == pWdaParams)
10021 {
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 VOS_ASSERT(0);
10025 vos_mem_free(wdiBtAmpEventParam);
10026 return VOS_STATUS_E_NOMEM;
10027 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10029 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010030 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10031 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 /* Store BT AMP event pointer, as this will be used for response */
10033 /* store Params pass it to WDI */
10034 pWdaParams->pWdaContext = pWDA;
10035 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10036 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010038 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 if(IS_WDI_STATUS_FAILURE(status))
10040 {
10041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10042 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10043 vos_mem_free(pWdaParams->wdaMsgParam) ;
10044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10045 vos_mem_free(pWdaParams) ;
10046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010047 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10048 {
10049 pWDA->wdaAmpSessionOn = VOS_TRUE;
10050 }
10051 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052}
10053
Jeff Johnson295189b2012-06-20 16:38:30 -070010054/*
10055 * FUNCTION: WDA_FTMCommandReqCallback
10056 * Handle FTM CMD response came from HAL
10057 * Route responce to HDD FTM
10058 */
10059void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10060 void *usrData)
10061{
10062 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10064 {
10065 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010066 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010067 return;
10068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 /* Release Current FTM Command Request */
10070 vos_mem_free(pWDA->wdaFTMCmdReq);
10071 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 /* Post FTM Responce to HDD FTM */
10073 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 return;
10075}
Jeff Johnson295189b2012-06-20 16:38:30 -070010076/*
10077 * FUNCTION: WDA_ProcessFTMCommand
10078 * Send FTM command to WDI
10079 */
10080VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10081 tPttMsgbuffer *pPTTFtmCmd)
10082{
10083 WDI_Status status = WDI_STATUS_SUCCESS;
10084 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 ftmCMDReq = (WDI_FTMCommandReqType *)
10086 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10087 if(NULL == ftmCMDReq)
10088 {
10089 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10090 "WDA FTM Command buffer alloc fail");
10091 return VOS_STATUS_E_NOMEM;
10092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10094 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010095 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 /* Send command to WDI */
10097 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 return status;
10099}
Jeff Johnsone7245742012-09-05 17:12:55 -070010100#ifdef FEATURE_OEM_DATA_SUPPORT
10101/*
10102 * FUNCTION: WDA_StartOemDataReqCallback
10103 *
10104 */
10105void WDA_StartOemDataReqCallback(
10106 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10107 void* pUserData)
10108{
10109 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010110 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10111 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010112 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113
Jeff Johnsone7245742012-09-05 17:12:55 -070010114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010116
10117 if(NULL == pWdaParams)
10118 {
10119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010120 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010121 VOS_ASSERT(0) ;
10122 return ;
10123 }
10124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10125
Jeff Johnsone7245742012-09-05 17:12:55 -070010126 if(NULL == pWDA)
10127 {
10128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010129 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010130 VOS_ASSERT(0);
10131 return ;
10132 }
10133
10134 /*
10135 * Allocate memory for response params sent to PE
10136 */
10137 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10138
10139 // Check if memory is allocated for OemdataMeasRsp Params.
10140 if(NULL == pOemDataRspParams)
10141 {
10142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10143 "OEM DATA WDA callback alloc fail");
10144 VOS_ASSERT(0) ;
10145 return;
10146 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010147
Jeff Johnsone7245742012-09-05 17:12:55 -070010148 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10150 vos_mem_free(pWdaParams->wdaMsgParam);
10151 vos_mem_free(pWdaParams) ;
10152
Jeff Johnsone7245742012-09-05 17:12:55 -070010153 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010154 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010155 * Also, here success always means that we have atleast one BSSID.
10156 */
10157 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10158
10159 //enable Tx
10160 status = WDA_ResumeDataTx(pWDA);
10161 if(status != VOS_STATUS_SUCCESS)
10162 {
10163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10164 }
10165 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10166 return ;
10167}
10168/*
10169 * FUNCTION: WDA_ProcessStartOemDataReq
10170 * Send Start Oem Data Req to WDI
10171 */
10172VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10173 tStartOemDataReq *pOemDataReqParams)
10174{
10175 WDI_Status status = WDI_STATUS_SUCCESS;
10176 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010177 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010178
10179 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10180
10181 if(NULL == wdiOemDataReqParams)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010185 VOS_ASSERT(0);
10186 return VOS_STATUS_E_NOMEM;
10187 }
10188
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010189 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10190 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10191 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10192 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010193
10194 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10195
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10197 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010198 {
10199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010201 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010202 vos_mem_free(pOemDataReqParams);
10203 VOS_ASSERT(0);
10204 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010205 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010206
Bernald44a1ae2013-01-09 08:30:39 -080010207 pWdaParams->pWdaContext = (void*)pWDA;
10208 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10209 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010210
10211 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10212 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010213
10214 if(IS_WDI_STATUS_FAILURE(status))
10215 {
10216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10217 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10219 vos_mem_free(pWdaParams->wdaMsgParam);
10220 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010221 }
10222 return CONVERT_WDI2VOS_STATUS(status) ;
10223}
10224#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010225/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010226 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 *
10228 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010229void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010230{
10231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010233 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 if(NULL == pWdaParams)
10235 {
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010237 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 VOS_ASSERT(0) ;
10239 return ;
10240 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010241
10242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10243 vos_mem_free(pWdaParams->wdaMsgParam);
10244 vos_mem_free(pWdaParams);
10245
10246 return ;
10247}
10248/*
10249 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10250 * Free memory.
10251 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10252 */
10253void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10254{
10255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10256
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10258 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10259
10260 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10263 "%s: pWdaParams received NULL", __func__);
10264 VOS_ASSERT(0);
10265 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010267
10268 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 {
10270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010271 vos_mem_free(pWdaParams->wdaMsgParam);
10272 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010274
10275 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010276}
Jeff Johnson295189b2012-06-20 16:38:30 -070010277#ifdef WLAN_FEATURE_GTK_OFFLOAD
10278/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010279 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 *
10281 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010282void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010283 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010284{
10285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10286
10287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010288 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010289 if(NULL == pWdaParams)
10290 {
10291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10292 "%s: pWdaParams received NULL", __func__);
10293 VOS_ASSERT(0);
10294 return;
10295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010296
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 vos_mem_free(pWdaParams->wdaMsgParam) ;
10298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10299 vos_mem_free(pWdaParams) ;
10300
10301 //print a msg, nothing else to do
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010303 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010304
10305 return ;
10306}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010307/*
10308 * FUNCTION: WDA_GTKOffloadReqCallback
10309 * Free memory.
10310 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10311 */
10312void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10313{
10314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010315
Yue Ma7f44bbe2013-04-12 11:47:39 -070010316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10317 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10318
10319 if(NULL == pWdaParams)
10320 {
10321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10322 "%s: pWdaParams received NULL", __func__);
10323 VOS_ASSERT(0);
10324 return;
10325 }
10326
10327 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10328 {
10329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10330 vos_mem_free(pWdaParams->wdaMsgParam);
10331 vos_mem_free(pWdaParams);
10332 }
10333
10334 return;
10335}
Jeff Johnson295189b2012-06-20 16:38:30 -070010336/*
10337 * FUNCTION: WDA_ProcessGTKOffloadReq
10338 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10339 * to broadcast traffic (sta mode).
10340 */
10341VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10342 tpSirGtkOffloadParams pGtkOffloadParams)
10343{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010344 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10346 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10347 sizeof(WDI_GtkOffloadReqMsg)) ;
10348 tWDA_ReqParams *pWdaParams ;
10349
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010351 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010352
10353 if(NULL == wdiGtkOffloadReqMsg)
10354 {
10355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 VOS_ASSERT(0);
10358 return VOS_STATUS_E_NOMEM;
10359 }
10360
10361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10362 if(NULL == pWdaParams)
10363 {
10364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 VOS_ASSERT(0);
10367 vos_mem_free(wdiGtkOffloadReqMsg);
10368 return VOS_STATUS_E_NOMEM;
10369 }
10370
10371 //
10372 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10373 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010374
10375 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010376 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010377
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10379 // Copy KCK
10380 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10381 // Copy KEK
10382 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10383 // Copy KeyReplayCounter
10384 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10385 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10386
Yue Ma7f44bbe2013-04-12 11:47:39 -070010387 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10388 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389
Jeff Johnson295189b2012-06-20 16:38:30 -070010390
10391 /* Store Params pass it to WDI */
10392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10393 pWdaParams->pWdaContext = pWDA;
10394 /* Store param pointer as passed in by caller */
10395 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10396
Yue Ma7f44bbe2013-04-12 11:47:39 -070010397 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398
10399 if(IS_WDI_STATUS_FAILURE(status))
10400 {
10401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10402 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10404 vos_mem_free(pWdaParams->wdaMsgParam);
10405 vos_mem_free(pWdaParams);
10406 }
10407
10408 return CONVERT_WDI2VOS_STATUS(status) ;
10409}
10410
10411/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010412 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 *
10414 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010416 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010417{
10418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10419 tWDA_CbContext *pWDA;
10420 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010421 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 vos_msg_t vosMsg;
10423
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010425 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010426 if(NULL == pWdaParams)
10427 {
10428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10429 "%s: pWdaParams received NULL", __func__);
10430 VOS_ASSERT(0);
10431 return;
10432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010433
10434 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10435 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10436
10437 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10438 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10439
10440 /* Message Header */
10441 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010442 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010443
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010444 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10445 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10446 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10447 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10448 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010450 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10451 pwdiGtkOffloadGetInfoRsparams->bssId,
10452 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 /* VOS message wrapper */
10454 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10455 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10456 vosMsg.bodyval = 0;
10457
10458 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10459 {
10460 /* free the mem and return */
10461 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10462 }
10463
10464 vos_mem_free(pWdaParams->wdaMsgParam) ;
10465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10466 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010467
10468 return;
10469}
10470/*
10471 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10472 * Free memory and send RSP back to SME.
10473 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10474 */
10475void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10476{
10477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10478 vos_msg_t vosMsg;
10479
10480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10481 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10482
10483 if(NULL == pWdaParams)
10484 {
10485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10486 "%s: pWdaParams received NULL", __func__);
10487 VOS_ASSERT(0);
10488 return;
10489 }
10490
10491 /* VOS message wrapper */
10492 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10493 vosMsg.bodyptr = NULL;
10494 vosMsg.bodyval = 0;
10495
10496 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10497 {
10498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10499 vos_mem_free(pWdaParams->wdaMsgParam);
10500 vos_mem_free(pWdaParams);
10501 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10502 }
10503
10504 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010505}
10506#endif
10507
10508/*
10509 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10510 * Request to WDI to set Tx Per Tracking configurations
10511 */
10512VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10513{
10514 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010515 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10517 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10518 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10519 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010521 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 if(NULL == pwdiSetTxPerTrackingReqParams)
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 vos_mem_free(pTxPerTrackingParams);
10527 VOS_ASSERT(0);
10528 return VOS_STATUS_E_NOMEM;
10529 }
10530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10531 if(NULL == pWdaParams)
10532 {
10533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010534 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010535 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10536 vos_mem_free(pTxPerTrackingParams);
10537 VOS_ASSERT(0);
10538 return VOS_STATUS_E_NOMEM;
10539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10541 pTxPerTrackingParams->ucTxPerTrackingEnable;
10542 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10543 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10544 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10545 pTxPerTrackingParams->ucTxPerTrackingRatio;
10546 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10547 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010548 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10549 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 /* Store param pointer as passed in by caller */
10551 /* store Params pass it to WDI
10552 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10553 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10554 pWdaParams->pWdaContext = pWDA;
10555 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010556 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010557 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010558 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010559 {
10560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10561 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010562 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 vos_mem_free(pWdaParams->wdaMsgParam) ;
10564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10565 vos_mem_free(pWdaParams) ;
10566 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010567 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010568
10569}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010570/*
10571 * FUNCTION: WDA_HALDumpCmdCallback
10572 * Send the VOS complete .
10573 */
10574void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10575 void* pUserData)
10576{
10577 tANI_U8 *buffer = NULL;
10578 tWDA_CbContext *pWDA = NULL;
10579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 if(NULL == pWdaParams)
10581 {
10582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010583 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 VOS_ASSERT(0) ;
10585 return ;
10586 }
10587
10588 pWDA = pWdaParams->pWdaContext;
10589 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 if(wdiRspParams->usBufferLen > 0)
10591 {
10592 /*Copy the Resp data to UMAC supplied buffer*/
10593 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10596 vos_mem_free(pWdaParams);
10597
10598 /* Indicate VOSS about the start complete */
10599 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 return ;
10601}
10602
Jeff Johnson295189b2012-06-20 16:38:30 -070010603/*
10604 * FUNCTION: WDA_ProcessHALDumpCmdReq
10605 * Send Dump command to WDI
10606 */
10607VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10608 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10609 tANI_U32 arg4, tANI_U8 *pBuffer)
10610{
10611 WDI_Status status = WDI_STATUS_SUCCESS;
10612 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10613 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10614 tWDA_ReqParams *pWdaParams ;
10615 pVosContextType pVosContext = NULL;
10616 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010617 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10618 (void *)pMac);
10619
10620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10621 if(NULL == pWdaParams)
10622 {
10623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 return VOS_STATUS_E_NOMEM;
10626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 /* Allocate memory WDI request structure*/
10628 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10629 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10630 if(NULL == wdiHALDumpCmdReqParam)
10631 {
10632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10633 "WDA HAL DUMP Command buffer alloc fail");
10634 vos_mem_free(pWdaParams);
10635 return WDI_STATUS_E_FAILURE;
10636 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010637 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 /* Extract the arguments */
10639 wdiHalDumpCmdInfo->command = cmd;
10640 wdiHalDumpCmdInfo->argument1 = arg1;
10641 wdiHalDumpCmdInfo->argument2 = arg2;
10642 wdiHalDumpCmdInfo->argument3 = arg3;
10643 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10646
10647 /* Response message will be passed through the buffer */
10648 pWdaParams->wdaMsgParam = (void *)pBuffer;
10649
10650 /* store Params pass it to WDI */
10651 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 /* Send command to WDI */
10653 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010654 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 if ( vStatus != VOS_STATUS_SUCCESS )
10656 {
10657 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10658 {
10659 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010660 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010661 }
10662 else
10663 {
10664 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010665 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 }
10667 VOS_ASSERT(0);
10668 }
10669 return status;
10670}
Jeff Johnson295189b2012-06-20 16:38:30 -070010671#ifdef WLAN_FEATURE_GTK_OFFLOAD
10672/*
10673 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10674 * Request to WDI to get GTK Offload Information
10675 */
10676VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10677 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10678{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010679 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10681 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10682 tWDA_ReqParams *pWdaParams ;
10683
10684 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10685 {
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 VOS_ASSERT(0);
10689 return VOS_STATUS_E_NOMEM;
10690 }
10691
10692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10693 if(NULL == pWdaParams)
10694 {
10695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 VOS_ASSERT(0);
10698 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10699 return VOS_STATUS_E_NOMEM;
10700 }
10701
Yue Ma7f44bbe2013-04-12 11:47:39 -070010702 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10703 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010704
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 /* Store Params pass it to WDI */
10706 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10707 pWdaParams->pWdaContext = pWDA;
10708 /* Store param pointer as passed in by caller */
10709 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10710
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010711 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010712 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010713
Yue Ma7f44bbe2013-04-12 11:47:39 -070010714 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010715
10716 if(IS_WDI_STATUS_FAILURE(status))
10717 {
10718 /* failure returned by WDI API */
10719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10720 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10722 vos_mem_free(pWdaParams) ;
10723 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10724 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10725 }
10726
10727 return CONVERT_WDI2VOS_STATUS(status) ;
10728}
10729#endif // WLAN_FEATURE_GTK_OFFLOAD
10730
10731/*
Yue Mab9c86f42013-08-14 15:59:08 -070010732 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10733 *
10734 */
10735VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10736 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10737{
10738 WDI_Status wdiStatus;
10739 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10740
10741 addPeriodicTxPtrnParams =
10742 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10743
10744 if (NULL == addPeriodicTxPtrnParams)
10745 {
10746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10747 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10748 __func__);
10749
10750 return VOS_STATUS_E_NOMEM;
10751 }
10752
10753 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10754 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10755
10756 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10757 addPeriodicTxPtrnParams->pUserData = pWDA;
10758
10759 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10760
10761 if (WDI_STATUS_PENDING == wdiStatus)
10762 {
10763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10764 "Pending received for %s:%d", __func__, __LINE__ );
10765 }
10766 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10767 {
10768 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10769 "Failure in %s:%d", __func__, __LINE__ );
10770 }
10771
10772 vos_mem_free(addPeriodicTxPtrnParams);
10773
10774 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10775}
10776
10777/*
10778 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10779 *
10780 */
10781VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10782 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10783{
10784 WDI_Status wdiStatus;
10785 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10786
10787 delPeriodicTxPtrnParams =
10788 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10789
10790 if (NULL == delPeriodicTxPtrnParams)
10791 {
10792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10793 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10794 __func__);
10795
10796 return VOS_STATUS_E_NOMEM;
10797 }
10798
10799 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10800 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10801
10802 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10803 delPeriodicTxPtrnParams->pUserData = pWDA;
10804
10805 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10806
10807 if (WDI_STATUS_PENDING == wdiStatus)
10808 {
10809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10810 "Pending received for %s:%d", __func__, __LINE__ );
10811 }
10812 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10813 {
10814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10815 "Failure in %s:%d", __func__, __LINE__ );
10816 }
10817
10818 vos_mem_free(delPeriodicTxPtrnParams);
10819
10820 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10821}
10822
Rajeev79dbe4c2013-10-05 11:03:42 +053010823#ifdef FEATURE_WLAN_BATCH_SCAN
10824/*
10825 * FUNCTION: WDA_ProcessStopBatchScanInd
10826 *
10827 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10828 *
10829 * PARAM:
10830 * pWDA: pointer to WDA context
10831 * pReq: pointer to stop batch scan request
10832 */
10833VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10834 tSirStopBatchScanInd *pReq)
10835{
10836 WDI_Status wdiStatus;
10837 WDI_StopBatchScanIndType wdiReq;
10838
10839 wdiReq.param = pReq->param;
10840
10841 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10842
10843 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10844 {
10845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10846 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10847 }
10848
10849 vos_mem_free(pReq);
10850
10851 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10852}
10853/*==========================================================================
10854 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10855
10856 DESCRIPTION
10857 API to pull batch scan result from FW
10858
10859 PARAMETERS
10860 pWDA: Pointer to WDA context
10861 pGetBatchScanReq: Pointer to get batch scan result indication
10862
10863 RETURN VALUE
10864 NONE
10865
10866===========================================================================*/
10867VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10868 tSirTriggerBatchScanResultInd *pReq)
10869{
10870 WDI_Status wdiStatus;
10871 WDI_TriggerBatchScanResultIndType wdiReq;
10872
10873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10874 "------> %s " ,__func__);
10875
10876 wdiReq.param = pReq->param;
10877
10878 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10879
10880 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10881 {
10882 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10883 "Trigger batch scan result ind failed %s:%d",
10884 __func__, wdiStatus);
10885 }
10886
10887 vos_mem_free(pReq);
10888
10889 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10890}
10891
10892/*==========================================================================
10893 FUNCTION WDA_SetBatchScanRespCallback
10894
10895 DESCRIPTION
10896 API to process set batch scan response from FW
10897
10898 PARAMETERS
10899 pRsp: Pointer to set batch scan response
10900 pUserData: Pointer to user data
10901
10902 RETURN VALUE
10903 NONE
10904
10905===========================================================================*/
10906void WDA_SetBatchScanRespCallback
10907(
10908 WDI_SetBatchScanRspType *pRsp,
10909 void* pUserData
10910)
10911{
10912 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10913 tpAniSirGlobal pMac;
10914 void *pCallbackContext;
10915 tWDA_CbContext *pWDA = NULL ;
10916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10917
10918
10919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10920 "<------ %s " ,__func__);
10921 if (NULL == pWdaParams)
10922 {
10923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10924 "%s: pWdaParams received NULL", __func__);
10925 VOS_ASSERT(0) ;
10926 return ;
10927 }
10928
10929 /*extract WDA context*/
10930 pWDA = pWdaParams->pWdaContext;
10931 if (NULL == pWDA)
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10934 "%s:pWDA is NULL can't invole HDD callback",
10935 __func__);
10936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10937 vos_mem_free(pWdaParams->wdaMsgParam);
10938 vos_mem_free(pWdaParams);
10939 VOS_ASSERT(0);
10940 return;
10941 }
10942
10943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10944 vos_mem_free(pWdaParams->wdaMsgParam);
10945 vos_mem_free(pWdaParams);
10946
10947 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10948 if (NULL == pMac)
10949 {
10950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10951 "%s:pMac is NULL", __func__);
10952 VOS_ASSERT(0);
10953 return;
10954 }
10955
10956 pHddSetBatchScanRsp =
10957 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10958 if (NULL == pHddSetBatchScanRsp)
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10961 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10962 VOS_ASSERT(0);
10963 return;
10964 }
10965
10966 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10967
10968 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10969 /*call hdd callback with set batch scan response data*/
10970 if(pMac->pmc.setBatchScanReqCallback)
10971 {
10972 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
10973 }
10974 else
10975 {
10976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10977 "%s:HDD callback is null", __func__);
10978 VOS_ASSERT(0);
10979 }
10980
10981 vos_mem_free(pHddSetBatchScanRsp);
10982 return ;
10983}
10984
10985/*==========================================================================
10986 FUNCTION WDA_ProcessSetBatchScanReq
10987
10988 DESCRIPTION
10989 API to send set batch scan request to WDI
10990
10991 PARAMETERS
10992 pWDA: Pointer to WDA context
10993 pSetBatchScanReq: Pointer to set batch scan req
10994
10995 RETURN VALUE
10996 NONE
10997
10998===========================================================================*/
10999VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11000 tSirSetBatchScanReq *pSetBatchScanReq)
11001{
11002 WDI_Status status;
11003 tWDA_ReqParams *pWdaParams ;
11004 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11005
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11007 "------> %s " ,__func__);
11008
11009 pWdiSetBatchScanReq =
11010 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11011 if (NULL == pWdiSetBatchScanReq)
11012 {
11013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11014 "%s: VOS MEM Alloc Failure", __func__);
11015 vos_mem_free(pSetBatchScanReq);
11016 VOS_ASSERT(0);
11017 return VOS_STATUS_E_NOMEM;
11018 }
11019
11020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11021 if (NULL == pWdaParams)
11022 {
11023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11024 "%s: VOS MEM Alloc Failure", __func__);
11025 VOS_ASSERT(0);
11026 vos_mem_free(pSetBatchScanReq);
11027 vos_mem_free(pWdiSetBatchScanReq);
11028 return VOS_STATUS_E_NOMEM;
11029 }
11030
11031 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11032 pWdiSetBatchScanReq->numberOfScansToBatch =
11033 pSetBatchScanReq->numberOfScansToBatch;
11034 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11035 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11036 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11037
11038 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11039 pWdaParams->pWdaContext = pWDA;
11040 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11041
11042 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11043 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11044 if (IS_WDI_STATUS_FAILURE(status))
11045 {
11046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11047 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11049 vos_mem_free(pWdaParams->wdaMsgParam);
11050 vos_mem_free(pWdaParams);
11051 }
11052 return CONVERT_WDI2VOS_STATUS(status);
11053}
11054
11055#endif
11056
Yue Mab9c86f42013-08-14 15:59:08 -070011057/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011058 * FUNCTION: WDA_ProcessRateUpdateInd
11059 *
11060 */
11061VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11062 tSirRateUpdateInd *pRateUpdateParams)
11063{
11064 WDI_Status wdiStatus;
11065 WDI_RateUpdateIndParams rateUpdateParams;
11066
11067 vos_mem_copy(rateUpdateParams.bssid,
11068 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11069
11070 rateUpdateParams.ucastDataRateTxFlag =
11071 pRateUpdateParams->ucastDataRateTxFlag;
11072 rateUpdateParams.reliableMcastDataRateTxFlag =
11073 pRateUpdateParams->reliableMcastDataRateTxFlag;
11074 rateUpdateParams.mcastDataRate24GHzTxFlag =
11075 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11076 rateUpdateParams.mcastDataRate5GHzTxFlag =
11077 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11078
11079 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11080 rateUpdateParams.reliableMcastDataRate =
11081 pRateUpdateParams->reliableMcastDataRate;
11082 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11083 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11084
11085 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11086 rateUpdateParams.pUserData = pWDA;
11087
11088 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11089
11090 if (WDI_STATUS_PENDING == wdiStatus)
11091 {
11092 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11093 "Pending received for %s:%d", __func__, __LINE__ );
11094 }
11095 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11096 {
11097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11098 "Failure in %s:%d", __func__, __LINE__ );
11099 }
11100
11101 vos_mem_free(pRateUpdateParams);
11102
11103 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11104}
11105
11106/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 * -------------------------------------------------------------------------
11108 * DATA interface with WDI for Mgmt Frames
11109 * -------------------------------------------------------------------------
11110 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011111/*
11112 * FUNCTION: WDA_TxComplete
11113 * Callback function for the WDA_TxPacket
11114 */
11115VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11116 VOS_STATUS status )
11117{
11118
11119 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11120 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011121 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011122
11123 if(NULL == wdaContext)
11124 {
11125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11126 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011127 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 VOS_ASSERT(0);
11129 return VOS_STATUS_E_FAILURE;
11130 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011131
11132 /*Check if frame was timed out or not*/
11133 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11134 (v_PVOID_t)&uUserData);
11135
11136 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11137 {
11138 /*Discard frame - no further processing is needed*/
11139 vos_pkt_return_packet(pData);
11140 return VOS_STATUS_SUCCESS;
11141 }
11142
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11144 if( NULL!=wdaContext->pTxCbFunc)
11145 {
11146 /*check if packet is freed already*/
11147 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11148 {
11149 wdaContext->pTxCbFunc(pMac, pData);
11150 }
11151 else
11152 {
11153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011154 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011155 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 //Return from here since we reaching here because the packet already timeout
11157 return status;
11158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 }
11160
11161 /*
11162 * Trigger the event to bring the HAL TL Tx complete function to come
11163 * out of wait
11164 * Let the coe above to complete the packet first. When this event is set,
11165 * the thread waiting for the event may run and set Vospacket_freed causing the original
11166 * packet not being freed.
11167 */
11168 status = vos_event_set(&wdaContext->txFrameEvent);
11169 if(!VOS_IS_STATUS_SUCCESS(status))
11170 {
11171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011172 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011174 return status;
11175}
Jeff Johnson295189b2012-06-20 16:38:30 -070011176/*
11177 * FUNCTION: WDA_TxPacket
11178 * Forward TX management frame to WDI
11179 */
11180VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11181 void *pFrmBuf,
11182 tANI_U16 frmLen,
11183 eFrameType frmType,
11184 eFrameTxDir txDir,
11185 tANI_U8 tid,
11186 pWDATxRxCompFunc pCompFunc,
11187 void *pData,
11188 pWDAAckFnTxComp pAckTxComp,
11189 tANI_U8 txFlag)
11190{
11191 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11192 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11193 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11194 tANI_U8 eventIdx = 0;
11195 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11196 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 if((NULL == pWDA)||(NULL == pFrmBuf))
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011200 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011201 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011202 VOS_ASSERT(0);
11203 return VOS_STATUS_E_FAILURE;
11204 }
11205
11206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011207 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11209 if(NULL == pMac)
11210 {
11211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011212 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 VOS_ASSERT(0);
11214 return VOS_STATUS_E_FAILURE;
11215 }
11216
11217
11218
11219 /* store the call back function in WDA context */
11220 pWDA->pTxCbFunc = pCompFunc;
11221 /* store the call back for the function of ackTxComplete */
11222 if( pAckTxComp )
11223 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011224 if( NULL != pWDA->pAckTxCbFunc )
11225 {
11226 /* Already TxComp is active no need to active again */
11227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011228 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011229 pWDA->pAckTxCbFunc( pMac, 0);
11230 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011231
Jeff Johnsone7245742012-09-05 17:12:55 -070011232 if( VOS_STATUS_SUCCESS !=
11233 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11234 {
11235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11236 "Tx Complete timeout Timer Stop Failed ");
11237 }
11238 else
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011241 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011242 }
11243 }
11244
11245 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11246 pWDA->pAckTxCbFunc = pAckTxComp;
11247 if( VOS_STATUS_SUCCESS !=
11248 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11249 {
11250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11251 "Tx Complete Timer Start Failed ");
11252 pWDA->pAckTxCbFunc = NULL;
11253 return eHAL_STATUS_FAILURE;
11254 }
11255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 /* Reset the event to be not signalled */
11257 status = vos_event_reset(&pWDA->txFrameEvent);
11258 if(!VOS_IS_STATUS_SUCCESS(status))
11259 {
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011261 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11263 if( pAckTxComp )
11264 {
11265 pWDA->pAckTxCbFunc = NULL;
11266 if( VOS_STATUS_SUCCESS !=
11267 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11268 {
11269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11270 "Tx Complete timeout Timer Stop Failed ");
11271 }
11272 }
11273 return VOS_STATUS_E_FAILURE;
11274 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011275
11276 /* If Peer Sta mask is set don't overwrite to self sta */
11277 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011279 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011281 else
11282 {
Ganesh K08bce952012-12-13 15:04:41 -080011283 /* Get system role, use the self station if in unknown role or STA role */
11284 systemRole = wdaGetGlobalSystemRole(pMac);
11285 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11286 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011287#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011288 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011289#endif
Ganesh K08bce952012-12-13 15:04:41 -080011290 ))
11291 {
11292 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11293 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011295
Jeff Johnsone7245742012-09-05 17:12:55 -070011296 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11297 disassoc frame reaches the HW, HAL has already deleted the peer station */
11298 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011300 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011301 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011303 /*Send Probe request frames on self sta idx*/
11304 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011305 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 /* Since we donot want probe responses to be retried, send probe responses
11307 through the NO_ACK queues */
11308 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11309 {
11310 //probe response is sent out using self station and no retries options.
11311 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11312 }
11313 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11314 {
11315 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11316 }
11317 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11319
11320 /*Set frame tag to 0
11321 We will use the WDA user data in order to tag a frame as expired*/
11322 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11323 (v_PVOID_t)0);
11324
11325
11326 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11327 frmLen, ucTypeSubType, tid,
11328 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11329 {
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011331 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11333 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11334 if( pAckTxComp )
11335 {
11336 pWDA->pAckTxCbFunc = NULL;
11337 if( VOS_STATUS_SUCCESS !=
11338 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11339 {
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11341 "Tx Complete timeout Timer Stop Failed ");
11342 }
11343 }
11344 return VOS_STATUS_E_FAILURE;
11345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011346 /*
11347 * Wait for the event to be set by the TL, to get the response of TX
11348 * complete, this event should be set by the Callback function called by TL
11349 */
11350 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11351 &eventIdx);
11352 if(!VOS_IS_STATUS_SUCCESS(status))
11353 {
11354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11355 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011356 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011357 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11358 after the packet gets completed(packet freed once)*/
11359
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011360 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011361 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011362
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011363 /*Tag Frame as timed out for later deletion*/
11364 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11365 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11366
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 /* check whether the packet was freed already,so need not free again when
11368 * TL calls the WDA_Txcomplete routine
11369 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011370 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11371 /*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 -070011372 {
11373 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011374 } */
11375
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 if( pAckTxComp )
11377 {
11378 pWDA->pAckTxCbFunc = NULL;
11379 if( VOS_STATUS_SUCCESS !=
11380 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11383 "Tx Complete timeout Timer Stop Failed ");
11384 }
11385 }
11386 status = VOS_STATUS_E_FAILURE;
11387 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011388#ifdef WLAN_DUMP_MGMTFRAMES
11389 if (VOS_IS_STATUS_SUCCESS(status))
11390 {
11391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11392 "%s() TX packet : SubType %d", __func__,pFc->subType);
11393 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11394 pData, frmLen);
11395 }
11396#endif
11397
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 return status;
11399}
Jeff Johnson295189b2012-06-20 16:38:30 -070011400/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011401 * FUNCTION: WDA_ProcessDHCPStartInd
11402 * Forward DHCP Start to WDI
11403 */
11404static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11405 tAniDHCPInd *dhcpStartInd)
11406{
11407 WDI_Status status;
11408 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11409 if (NULL == wdiDHCPInd)
11410 {
11411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11412 "%s: VOS MEM Alloc Failure", __func__);
11413 VOS_ASSERT(0);
11414 vos_mem_free(dhcpStartInd);
11415 return VOS_STATUS_E_NOMEM;
11416 }
11417
11418 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11419 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11420 sizeof(tSirMacAddr));
11421
11422 status = WDI_dhcpStartInd(wdiDHCPInd);
11423
11424 if (IS_WDI_STATUS_FAILURE(status))
11425 {
11426 vos_mem_free(wdiDHCPInd);
11427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11428 "DHCP Start Indication failed");
11429 }
11430 vos_mem_free(dhcpStartInd);
11431 return CONVERT_WDI2VOS_STATUS(status) ;
11432}
11433
11434 /*
11435 * FUNCTION: WDA_ProcessDHCPStopInd
11436 * Forward DHCP Stop to WDI
11437 */
11438 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11439 tAniDHCPInd *dhcpStopInd)
11440 {
11441 WDI_Status status;
11442 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11443 if (NULL == wdiDHCPInd)
11444 {
11445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11446 "%s: VOS MEM Alloc Failure", __func__);
11447 VOS_ASSERT(0);
11448 vos_mem_free(dhcpStopInd);
11449 return VOS_STATUS_E_NOMEM;
11450 }
11451 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11452 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11453 status = WDI_dhcpStopInd(wdiDHCPInd);
11454 if (IS_WDI_STATUS_FAILURE(status))
11455 {
11456 vos_mem_free(wdiDHCPInd);
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "DHCP Start Indication failed");
11459 }
11460 vos_mem_free(dhcpStopInd);
11461 return CONVERT_WDI2VOS_STATUS(status) ;
11462 }
11463
11464/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 * FUNCTION: WDA_McProcessMsg
11466 * Trigger DAL-AL to start CFG download
11467 */
11468VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11469{
11470 VOS_STATUS status = VOS_STATUS_SUCCESS;
11471 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 if(NULL == pMsg)
11473 {
11474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011475 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 VOS_ASSERT(0);
11477 return VOS_STATUS_E_FAILURE;
11478 }
11479
11480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011481 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011482
11483 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11484 if(NULL == pWDA )
11485 {
11486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011487 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011489 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 return VOS_STATUS_E_FAILURE;
11491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 /* Process all the WDA messages.. */
11493 switch( pMsg->type )
11494 {
11495 case WNI_CFG_DNLD_REQ:
11496 {
11497 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 /* call WDA complete event if config download success */
11499 if( VOS_IS_STATUS_SUCCESS(status) )
11500 {
11501 vos_WDAComplete_cback(pVosContext);
11502 }
11503 else
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11506 "WDA Config Download failure" );
11507 }
11508 break ;
11509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 /*
11511 * Init SCAN request from PE, convert it into DAL format
11512 * and send it to DAL
11513 */
11514 case WDA_INIT_SCAN_REQ:
11515 {
11516 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11517 break ;
11518 }
11519 /* start SCAN request from PE */
11520 case WDA_START_SCAN_REQ:
11521 {
11522 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11523 break ;
11524 }
11525 /* end SCAN request from PE */
11526 case WDA_END_SCAN_REQ:
11527 {
11528 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11529 break ;
11530 }
11531 /* end SCAN request from PE */
11532 case WDA_FINISH_SCAN_REQ:
11533 {
11534 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11535 break ;
11536 }
11537 /* join request from PE */
11538 case WDA_CHNL_SWITCH_REQ:
11539 {
11540 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11541 {
11542 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11543 }
11544 else
11545 {
11546 WDA_ProcessChannelSwitchReq(pWDA,
11547 (tSwitchChannelParams*)pMsg->bodyptr) ;
11548 }
11549 break ;
11550 }
11551 /* ADD BSS request from PE */
11552 case WDA_ADD_BSS_REQ:
11553 {
11554 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11555 break ;
11556 }
11557 case WDA_ADD_STA_REQ:
11558 {
11559 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11560 break ;
11561 }
11562 case WDA_DELETE_BSS_REQ:
11563 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11565 break ;
11566 }
11567 case WDA_DELETE_STA_REQ:
11568 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11570 break ;
11571 }
11572 case WDA_CONFIG_PARAM_UPDATE_REQ:
11573 {
11574 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11575 break ;
11576 }
11577 case WDA_SET_BSSKEY_REQ:
11578 {
11579 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11580 break ;
11581 }
11582 case WDA_SET_STAKEY_REQ:
11583 {
11584 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11585 break ;
11586 }
11587 case WDA_SET_STA_BCASTKEY_REQ:
11588 {
11589 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11590 break ;
11591 }
11592 case WDA_REMOVE_BSSKEY_REQ:
11593 {
11594 WDA_ProcessRemoveBssKeyReq(pWDA,
11595 (tRemoveBssKeyParams *)pMsg->bodyptr);
11596 break ;
11597 }
11598 case WDA_REMOVE_STAKEY_REQ:
11599 {
11600 WDA_ProcessRemoveStaKeyReq(pWDA,
11601 (tRemoveStaKeyParams *)pMsg->bodyptr);
11602 break ;
11603 }
11604 case WDA_REMOVE_STA_BCASTKEY_REQ:
11605 {
11606 /* TODO: currently UMAC is not sending this request, Add the code for
11607 handling this request when UMAC supports */
11608 break;
11609 }
11610#ifdef FEATURE_WLAN_CCX
11611 case WDA_TSM_STATS_REQ:
11612 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011613 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011614 break;
11615 }
11616#endif
11617 case WDA_UPDATE_EDCA_PROFILE_IND:
11618 {
11619 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11620 break;
11621 }
11622 case WDA_ADD_TS_REQ:
11623 {
11624 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11625 break;
11626 }
11627 case WDA_DEL_TS_REQ:
11628 {
11629 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11630 break;
11631 }
11632 case WDA_ADDBA_REQ:
11633 {
11634 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11635 break;
11636 }
11637 case WDA_DELBA_IND:
11638 {
11639 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11640 break;
11641 }
11642 case WDA_SET_LINK_STATE:
11643 {
11644 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11645 break;
11646 }
11647 case WDA_GET_STATISTICS_REQ:
11648 {
11649 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11650 break;
11651 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011652#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11653 case WDA_GET_ROAM_RSSI_REQ:
11654 {
11655 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11656 break;
11657 }
11658#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 case WDA_PWR_SAVE_CFG:
11660 {
11661 if(pWDA->wdaState == WDA_READY_STATE)
11662 {
11663 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11664 }
11665 else
11666 {
11667 if(NULL != pMsg->bodyptr)
11668 {
11669 vos_mem_free(pMsg->bodyptr);
11670 }
11671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11672 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11673 }
11674 break;
11675 }
11676 case WDA_ENTER_IMPS_REQ:
11677 {
11678 if(pWDA->wdaState == WDA_READY_STATE)
11679 {
11680 WDA_ProcessEnterImpsReq(pWDA);
11681 }
11682 else
11683 {
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11685 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11686 }
11687 break;
11688 }
11689 case WDA_EXIT_IMPS_REQ:
11690 {
11691 if(pWDA->wdaState == WDA_READY_STATE)
11692 {
11693 WDA_ProcessExitImpsReq(pWDA);
11694 }
11695 else
11696 {
11697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11698 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11699 }
11700 break;
11701 }
11702 case WDA_ENTER_BMPS_REQ:
11703 {
11704 if(pWDA->wdaState == WDA_READY_STATE)
11705 {
11706 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11707 }
11708 else
11709 {
11710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11711 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11712 }
11713 break;
11714 }
11715 case WDA_EXIT_BMPS_REQ:
11716 {
11717 if(pWDA->wdaState == WDA_READY_STATE)
11718 {
11719 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11720 }
11721 else
11722 {
11723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11724 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11725 }
11726 break;
11727 }
11728 case WDA_ENTER_UAPSD_REQ:
11729 {
11730 if(pWDA->wdaState == WDA_READY_STATE)
11731 {
11732 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11733 }
11734 else
11735 {
11736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11737 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11738 }
11739 break;
11740 }
11741 case WDA_EXIT_UAPSD_REQ:
11742 {
11743 if(pWDA->wdaState == WDA_READY_STATE)
11744 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011745 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 }
11747 else
11748 {
11749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11750 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11751 }
11752 break;
11753 }
11754 case WDA_UPDATE_UAPSD_IND:
11755 {
11756 if(pWDA->wdaState == WDA_READY_STATE)
11757 {
11758 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11759 }
11760 else
11761 {
11762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11763 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11764 }
11765 break;
11766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 case WDA_REGISTER_PE_CALLBACK :
11768 {
11769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11770 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11771 /*TODO: store the PE callback */
11772 /* Do Nothing? MSG Body should be freed at here */
11773 if(NULL != pMsg->bodyptr)
11774 {
11775 vos_mem_free(pMsg->bodyptr);
11776 }
11777 break;
11778 }
11779 case WDA_SYS_READY_IND :
11780 {
11781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11782 "Handling msg type WDA_SYS_READY_IND " );
11783 pWDA->wdaState = WDA_READY_STATE;
11784 if(NULL != pMsg->bodyptr)
11785 {
11786 vos_mem_free(pMsg->bodyptr);
11787 }
11788 break;
11789 }
11790 case WDA_BEACON_FILTER_IND :
11791 {
11792 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11793 break;
11794 }
11795 case WDA_BTC_SET_CFG:
11796 {
11797 /*TODO: handle this while dealing with BTC */
11798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11799 "Handling msg type WDA_BTC_SET_CFG " );
11800 /* Do Nothing? MSG Body should be freed at here */
11801 if(NULL != pMsg->bodyptr)
11802 {
11803 vos_mem_free(pMsg->bodyptr);
11804 }
11805 break;
11806 }
11807 case WDA_SIGNAL_BT_EVENT:
11808 {
11809 /*TODO: handle this while dealing with BTC */
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11811 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11812 /* Do Nothing? MSG Body should be freed at here */
11813 if(NULL != pMsg->bodyptr)
11814 {
11815 vos_mem_free(pMsg->bodyptr);
11816 }
11817 break;
11818 }
11819 case WDA_CFG_RXP_FILTER_REQ:
11820 {
11821 WDA_ProcessConfigureRxpFilterReq(pWDA,
11822 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11823 break;
11824 }
11825 case WDA_SET_HOST_OFFLOAD:
11826 {
11827 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11828 break;
11829 }
11830 case WDA_SET_KEEP_ALIVE:
11831 {
11832 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11833 break;
11834 }
11835#ifdef WLAN_NS_OFFLOAD
11836 case WDA_SET_NS_OFFLOAD:
11837 {
11838 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11839 break;
11840 }
11841#endif //WLAN_NS_OFFLOAD
11842 case WDA_ADD_STA_SELF_REQ:
11843 {
11844 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11845 break;
11846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 case WDA_DEL_STA_SELF_REQ:
11848 {
11849 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11850 break;
11851 }
11852 case WDA_WOWL_ADD_BCAST_PTRN:
11853 {
11854 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11855 break;
11856 }
11857 case WDA_WOWL_DEL_BCAST_PTRN:
11858 {
11859 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11860 break;
11861 }
11862 case WDA_WOWL_ENTER_REQ:
11863 {
11864 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11865 break;
11866 }
11867 case WDA_WOWL_EXIT_REQ:
11868 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011869 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 break;
11871 }
11872 case WDA_TL_FLUSH_AC_REQ:
11873 {
11874 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11875 break;
11876 }
11877 case WDA_SIGNAL_BTAMP_EVENT:
11878 {
11879 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11880 break;
11881 }
11882#ifdef WDA_UT
11883 case WDA_WDI_EVENT_MSG:
11884 {
11885 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11886 break ;
11887 }
11888#endif
11889 case WDA_UPDATE_BEACON_IND:
11890 {
11891 WDA_ProcessUpdateBeaconParams(pWDA,
11892 (tUpdateBeaconParams *)pMsg->bodyptr);
11893 break;
11894 }
11895 case WDA_SEND_BEACON_REQ:
11896 {
11897 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11898 break;
11899 }
11900 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11901 {
11902 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11903 (tSendProbeRespParams *)pMsg->bodyptr);
11904 break;
11905 }
11906#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11907 case WDA_SET_MAX_TX_POWER_REQ:
11908 {
11909 WDA_ProcessSetMaxTxPowerReq(pWDA,
11910 (tMaxTxPowerParams *)pMsg->bodyptr);
11911 break;
11912 }
11913#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070011914 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
11915 {
11916 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
11917 pMsg->bodyptr);
11918 break;
11919 }
schang86c22c42013-03-13 18:41:24 -070011920 case WDA_SET_TX_POWER_REQ:
11921 {
11922 WDA_ProcessSetTxPowerReq(pWDA,
11923 (tSirSetTxPowerReq *)pMsg->bodyptr);
11924 break;
11925 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 case WDA_SET_P2P_GO_NOA_REQ:
11927 {
11928 WDA_ProcessSetP2PGONOAReq(pWDA,
11929 (tP2pPsParams *)pMsg->bodyptr);
11930 break;
11931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 /* timer related messages */
11933 case WDA_TIMER_BA_ACTIVITY_REQ:
11934 {
11935 WDA_BaCheckActivity(pWDA) ;
11936 break ;
11937 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011938
11939 /* timer related messages */
11940 case WDA_TIMER_TRAFFIC_STATS_IND:
11941 {
11942 WDA_TimerTrafficStatsInd(pWDA);
11943 break;
11944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011945#ifdef WLAN_FEATURE_VOWIFI_11R
11946 case WDA_AGGR_QOS_REQ:
11947 {
11948 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11949 break;
11950 }
11951#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 case WDA_FTM_CMD_REQ:
11953 {
11954 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11955 break ;
11956 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011957#ifdef FEATURE_OEM_DATA_SUPPORT
11958 case WDA_START_OEM_DATA_REQ:
11959 {
11960 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11961 break;
11962 }
11963#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 /* Tx Complete Time out Indication */
11965 case WDA_TX_COMPLETE_TIMEOUT_IND:
11966 {
11967 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11968 break;
11969 }
11970 case WDA_WLAN_SUSPEND_IND:
11971 {
11972 WDA_ProcessWlanSuspendInd(pWDA,
11973 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11974 break;
11975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 case WDA_WLAN_RESUME_REQ:
11977 {
11978 WDA_ProcessWlanResumeReq(pWDA,
11979 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11980 break;
11981 }
11982
11983 case WDA_UPDATE_CF_IND:
11984 {
11985 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11986 pMsg->bodyptr = NULL;
11987 break;
11988 }
11989#ifdef FEATURE_WLAN_SCAN_PNO
11990 case WDA_SET_PNO_REQ:
11991 {
11992 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11993 break;
11994 }
11995 case WDA_UPDATE_SCAN_PARAMS_REQ:
11996 {
11997 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11998 break;
11999 }
12000 case WDA_SET_RSSI_FILTER_REQ:
12001 {
12002 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12003 break;
12004 }
12005#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012006#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012007 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012008 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012009 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012010 break;
12011 }
12012#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012013 case WDA_SET_TX_PER_TRACKING_REQ:
12014 {
12015 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12016 break;
12017 }
12018
12019#ifdef WLAN_FEATURE_PACKET_FILTERING
12020 case WDA_8023_MULTICAST_LIST_REQ:
12021 {
12022 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12023 break;
12024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012025 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12026 {
12027 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12028 break;
12029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012030 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12031 {
12032 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12033 break;
12034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12036 {
12037 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12038 break;
12039 }
12040#endif // WLAN_FEATURE_PACKET_FILTERING
12041
12042
12043 case WDA_TRANSMISSION_CONTROL_IND:
12044 {
12045 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12046 break;
12047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 case WDA_SET_POWER_PARAMS_REQ:
12049 {
12050 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12051 break;
12052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012053#ifdef WLAN_FEATURE_GTK_OFFLOAD
12054 case WDA_GTK_OFFLOAD_REQ:
12055 {
12056 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12057 break;
12058 }
12059
12060 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12061 {
12062 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12063 break;
12064 }
12065#endif //WLAN_FEATURE_GTK_OFFLOAD
12066
12067 case WDA_SET_TM_LEVEL_REQ:
12068 {
12069 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12070 break;
12071 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070012072#ifdef WLAN_FEATURE_11AC
12073 case WDA_UPDATE_OP_MODE:
12074 {
12075 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
12076 {
12077 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12078 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12079 else
12080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012081 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012082 }
12083 else
12084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012085 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012086 break;
12087 }
12088#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070012089#ifdef WLAN_FEATURE_11W
12090 case WDA_EXCLUDE_UNENCRYPTED_IND:
12091 {
12092 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12093 break;
12094 }
12095#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012096#ifdef FEATURE_WLAN_TDLS
12097 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12098 {
12099 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12100 break;
12101 }
12102#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012103 case WDA_DHCP_START_IND:
12104 {
12105 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12106 break;
12107 }
12108 case WDA_DHCP_STOP_IND:
12109 {
12110 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12111 break;
12112 }
Leo Chang9056f462013-08-01 19:21:11 -070012113#ifdef FEATURE_WLAN_LPHB
12114 case WDA_LPHB_CONF_REQ:
12115 {
12116 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12117 break;
12118 }
12119#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012120 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12121 {
12122 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12123 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12124 break;
12125 }
12126 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12127 {
12128 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12129 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12130 break;
12131 }
12132
Rajeev79dbe4c2013-10-05 11:03:42 +053012133#ifdef FEATURE_WLAN_BATCH_SCAN
12134 case WDA_SET_BATCH_SCAN_REQ:
12135 {
12136 WDA_ProcessSetBatchScanReq(pWDA,
12137 (tSirSetBatchScanReq *)pMsg->bodyptr);
12138 break;
12139 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012140 case WDA_RATE_UPDATE_IND:
12141 {
12142 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12143 break;
12144 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012145 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12146 {
12147 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12148 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12149 break;
12150 }
12151 case WDA_STOP_BATCH_SCAN_IND:
12152 {
12153 WDA_ProcessStopBatchScanInd(pWDA,
12154 (tSirStopBatchScanInd *)pMsg->bodyptr);
12155 break;
12156 }
12157#endif
12158
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 default:
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12162 "No Handling for msg type %x in WDA "
12163 ,pMsg->type);
12164 /* Do Nothing? MSG Body should be freed at here */
12165 if(NULL != pMsg->bodyptr)
12166 {
12167 vos_mem_free(pMsg->bodyptr);
12168 }
12169 //WDA_VOS_ASSERT(0) ;
12170 }
12171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 return status ;
12173}
12174
Jeff Johnson295189b2012-06-20 16:38:30 -070012175/*
12176 * FUNCTION: WDA_LowLevelIndCallback
12177 * IND API callback from WDI, send Ind to PE
12178 */
12179void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12180 void* pUserData )
12181{
12182 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12183#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12184 tSirRSSINotification rssiNotification;
12185#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 if(NULL == pWDA)
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012189 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 VOS_ASSERT(0);
12191 return ;
12192 }
12193
12194 switch(wdiLowLevelInd->wdiIndicationType)
12195 {
12196 case WDI_RSSI_NOTIFICATION_IND:
12197 {
12198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12199 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012200#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12201 rssiNotification.bReserved =
12202 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12203 rssiNotification.bRssiThres1NegCross =
12204 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12205 rssiNotification.bRssiThres1PosCross =
12206 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12207 rssiNotification.bRssiThres2NegCross =
12208 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12209 rssiNotification.bRssiThres2PosCross =
12210 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12211 rssiNotification.bRssiThres3NegCross =
12212 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12213 rssiNotification.bRssiThres3PosCross =
12214 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012215 rssiNotification.avgRssi = (v_S7_t)
12216 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012217 WLANTL_BMPSRSSIRegionChangedNotification(
12218 pWDA->pVosContext,
12219 &rssiNotification);
12220#endif
12221 break ;
12222 }
12223 case WDI_MISSED_BEACON_IND:
12224 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012225 tpSirSmeMissedBeaconInd pMissBeacInd =
12226 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12228 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012229 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012230 if(NULL == pMissBeacInd)
12231 {
12232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12233 "%s: VOS MEM Alloc Failure", __func__);
12234 break;
12235 }
12236 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12237 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12238 pMissBeacInd->bssIdx =
12239 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12240 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012241 break ;
12242 }
12243 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12244 {
12245 /* TODO: Decode Ind and send Ind to PE */
12246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12247 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12248 break ;
12249 }
12250
12251 case WDI_MIC_FAILURE_IND:
12252 {
12253 tpSirSmeMicFailureInd pMicInd =
12254 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12255
12256 if(NULL == pMicInd)
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 break;
12261 }
12262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12263 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012264 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12265 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12266 vos_mem_copy(pMicInd->bssId,
12267 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12268 sizeof(tSirMacAddr));
12269 vos_mem_copy(pMicInd->info.srcMacAddr,
12270 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12271 sizeof(tSirMacAddr));
12272 vos_mem_copy(pMicInd->info.taMacAddr,
12273 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12274 sizeof(tSirMacAddr));
12275 vos_mem_copy(pMicInd->info.dstMacAddr,
12276 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12277 sizeof(tSirMacAddr));
12278 vos_mem_copy(pMicInd->info.rxMacAddr,
12279 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12280 sizeof(tSirMacAddr));
12281 pMicInd->info.multicast =
12282 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12283 pMicInd->info.keyId=
12284 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12285 pMicInd->info.IV1=
12286 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12287 vos_mem_copy(pMicInd->info.TSC,
12288 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12290 (void *)pMicInd , 0) ;
12291 break ;
12292 }
12293 case WDI_FATAL_ERROR_IND:
12294 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012295 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 /* TODO: Decode Ind and send Ind to PE */
12297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12298 "Received WDI_FATAL_ERROR_IND from WDI ");
12299 break ;
12300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 case WDI_DEL_STA_IND:
12302 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 tpDeleteStaContext pDelSTACtx =
12304 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12305
12306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12307 "Received WDI_DEL_STA_IND from WDI ");
12308 if(NULL == pDelSTACtx)
12309 {
12310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012312 break;
12313 }
12314 vos_mem_copy(pDelSTACtx->addr2,
12315 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12316 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012317 vos_mem_copy(pDelSTACtx->bssId,
12318 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12319 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 pDelSTACtx->assocId =
12321 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12322 pDelSTACtx->reasonCode =
12323 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12324 pDelSTACtx->staId =
12325 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12327 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012328 break ;
12329 }
12330 case WDI_COEX_IND:
12331 {
12332 tANI_U32 index;
12333 vos_msg_t vosMsg;
12334 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12335 if(NULL == pSmeCoexInd)
12336 {
12337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012338 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 break;
12340 }
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12342 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012343 /* Message Header */
12344 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12345 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 /* Info from WDI Indication */
12347 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12348 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12349 {
12350 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12351 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 /* VOS message wrapper */
12353 vosMsg.type = eWNI_SME_COEX_IND;
12354 vosMsg.bodyptr = (void *)pSmeCoexInd;
12355 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012356 /* Send message to SME */
12357 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12358 {
12359 /* free the mem and return */
12360 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12361 }
12362 else
12363 {
12364 /* DEBUG */
12365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12366 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12367 pSmeCoexInd->coexIndType,
12368 pSmeCoexInd->coexIndData[0],
12369 pSmeCoexInd->coexIndData[1],
12370 pSmeCoexInd->coexIndData[2],
12371 pSmeCoexInd->coexIndData[3]);
12372 }
12373 break;
12374 }
12375 case WDI_TX_COMPLETE_IND:
12376 {
12377 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12378 /* Calling TxCompleteAck Indication from wda context*/
12379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12380 "Complete Indication received from HAL");
12381 if( pWDA->pAckTxCbFunc )
12382 {
12383 if( VOS_STATUS_SUCCESS !=
12384 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12387 "Tx Complete timeout Timer Stop Failed ");
12388 }
12389 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12390 pWDA->pAckTxCbFunc = NULL;
12391 }
12392 else
12393 {
12394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12395 "Tx Complete Indication is received after timeout ");
12396 }
12397 break;
12398 }
Viral Modid86bde22012-12-10 13:09:21 -080012399 case WDI_P2P_NOA_START_IND :
12400 {
12401 tSirP2PNoaStart *pP2pNoaStart =
12402 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12403
12404 if (NULL == pP2pNoaStart)
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12407 "Memory allocation failure, "
12408 "WDI_P2P_NOA_START_IND not forwarded");
12409 break;
12410 }
12411 pP2pNoaStart->status =
12412 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12413 pP2pNoaStart->bssIdx =
12414 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12415 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12416 (void *)pP2pNoaStart , 0) ;
12417 break;
12418 }
12419
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012420#ifdef FEATURE_WLAN_TDLS
12421 case WDI_TDLS_IND :
12422 {
12423 tSirTdlsInd *pTdlsInd =
12424 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12425
12426 if (NULL == pTdlsInd)
12427 {
12428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12429 "Memory allocation failure, "
12430 "WDI_TDLS_IND not forwarded");
12431 break;
12432 }
12433 pTdlsInd->status =
12434 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12435 pTdlsInd->assocId =
12436 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12437 pTdlsInd->staIdx =
12438 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12439 pTdlsInd->reasonCode =
12440 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12441 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12442 (void *)pTdlsInd , 0) ;
12443 break;
12444 }
12445#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 case WDI_P2P_NOA_ATTR_IND :
12447 {
12448 tSirP2PNoaAttr *pP2pNoaAttr =
12449 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12451 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 if (NULL == pP2pNoaAttr)
12453 {
12454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12455 "Memory allocation failure, "
12456 "WDI_P2P_NOA_ATTR_IND not forwarded");
12457 break;
12458 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 pP2pNoaAttr->index =
12460 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12461 pP2pNoaAttr->oppPsFlag =
12462 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12463 pP2pNoaAttr->ctWin =
12464 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12465
12466 pP2pNoaAttr->uNoa1IntervalCnt =
12467 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12468 pP2pNoaAttr->uNoa1Duration =
12469 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12470 pP2pNoaAttr->uNoa1Interval =
12471 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12472 pP2pNoaAttr->uNoa1StartTime =
12473 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012474 pP2pNoaAttr->uNoa2IntervalCnt =
12475 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12476 pP2pNoaAttr->uNoa2Duration =
12477 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12478 pP2pNoaAttr->uNoa2Interval =
12479 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12480 pP2pNoaAttr->uNoa2StartTime =
12481 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012482 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12483 (void *)pP2pNoaAttr , 0) ;
12484 break;
12485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012486#ifdef FEATURE_WLAN_SCAN_PNO
12487 case WDI_PREF_NETWORK_FOUND_IND:
12488 {
12489 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012490 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12491 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12492 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12493 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12494
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12496 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012497 if (NULL == pPrefNetworkFoundInd)
12498 {
12499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12500 "Memory allocation failure, "
12501 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012502 if (NULL !=
12503 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12504 {
12505 wpalMemoryFree(
12506 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12507 );
12508 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 break;
12511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 /* Message Header */
12513 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012514 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012515
12516 /* Info from WDI Indication */
12517 pPrefNetworkFoundInd->ssId.length =
12518 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012520 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12521 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12522 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012523 if (NULL !=
12524 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12525 {
12526 pPrefNetworkFoundInd->frameLength =
12527 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12528 vos_mem_copy( pPrefNetworkFoundInd->data,
12529 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12530 pPrefNetworkFoundInd->frameLength);
12531 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12532 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12533 }
12534 else
12535 {
12536 pPrefNetworkFoundInd->frameLength = 0;
12537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012539 /* VOS message wrapper */
12540 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12541 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12542 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 /* Send message to SME */
12544 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12545 {
12546 /* free the mem and return */
12547 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 break;
12550 }
12551#endif // FEATURE_WLAN_SCAN_PNO
12552
12553#ifdef WLAN_WAKEUP_EVENTS
12554 case WDI_WAKE_REASON_IND:
12555 {
12556 vos_msg_t vosMsg;
12557 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12558 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12559 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12560
12561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12562 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12563 wdiLowLevelInd->wdiIndicationType,
12564 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12565 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12566 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12567
12568 if (NULL == pWakeReasonInd)
12569 {
12570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12571 "Memory allocation failure, "
12572 "WDI_WAKE_REASON_IND not forwarded");
12573 break;
12574 }
12575
12576 vos_mem_zero(pWakeReasonInd, allocSize);
12577
12578 /* Message Header */
12579 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12580 pWakeReasonInd->mesgLen = allocSize;
12581
12582 /* Info from WDI Indication */
12583 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12584 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12585 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12586 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12587 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12588 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12589 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12590 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12591
12592 /* VOS message wrapper */
12593 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12594 vosMsg.bodyptr = (void *) pWakeReasonInd;
12595 vosMsg.bodyval = 0;
12596
12597 /* Send message to SME */
12598 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12599 {
12600 /* free the mem and return */
12601 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12602 }
12603
12604 break;
12605 }
12606#endif // WLAN_WAKEUP_EVENTS
12607
12608 case WDI_TX_PER_HIT_IND:
12609 {
12610 vos_msg_t vosMsg;
12611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12612 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12613 /* VOS message wrapper */
12614 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12615 vosMsg.bodyptr = NULL;
12616 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012617 /* Send message to SME */
12618 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12619 {
12620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12621 }
12622 break;
12623 }
12624
Leo Chang9056f462013-08-01 19:21:11 -070012625#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012626 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012627 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012628 vos_msg_t vosMsg;
12629 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012630
Leo Changd9df8aa2013-09-26 13:32:26 -070012631 lphbInd =
12632 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12633 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012634 {
12635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12636 "%s: LPHB IND buffer alloc Fail", __func__);
12637 return ;
12638 }
12639
Leo Changd9df8aa2013-09-26 13:32:26 -070012640 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012641 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012642 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012643 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012644 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012645 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12646
12647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012648 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012649 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12650
Leo Changd9df8aa2013-09-26 13:32:26 -070012651 vosMsg.type = eWNI_SME_LPHB_IND;
12652 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012653 vosMsg.bodyval = 0;
12654 /* Send message to SME */
12655 if (VOS_STATUS_SUCCESS !=
12656 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12657 {
12658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12659 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012660 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012661 }
12662 break;
12663 }
12664#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012665 case WDI_PERIODIC_TX_PTRN_FW_IND:
12666 {
12667 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12668 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12669 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12670 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12671 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12672 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12673 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12674
12675 break;
12676 }
Leo Chang9056f462013-08-01 19:21:11 -070012677
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012678 case WDI_IBSS_PEER_INACTIVITY_IND:
12679 {
12680 tSirIbssPeerInactivityInd *pIbssInd =
12681 (tSirIbssPeerInactivityInd *)
12682 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12683
12684 if (NULL == pIbssInd)
12685 {
12686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12687 "Memory allocation failure, "
12688 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12689 break;
12690 }
12691
12692 pIbssInd->bssIdx =
12693 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12694 pIbssInd->staIdx =
12695 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12696 vos_mem_copy(pIbssInd->peerAddr,
12697 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12698 sizeof(tSirMacAddr));
12699 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12700 break;
12701 }
12702
Rajeev79dbe4c2013-10-05 11:03:42 +053012703#ifdef FEATURE_WLAN_BATCH_SCAN
12704 case WDI_BATCH_SCAN_RESULT_IND:
12705 {
12706 void *pBatchScanResult;
12707 void *pCallbackContext;
12708 tpAniSirGlobal pMac;
12709
12710 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12711 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12712
12713 /*sanity check*/
12714 if(NULL == pWDA)
12715 {
12716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12717 "%s:pWDA is NULL", __func__);
12718 VOS_ASSERT(0);
12719 return;
12720 }
12721
12722 pBatchScanResult =
12723 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12724 if (NULL == pBatchScanResult)
12725 {
12726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12727 "%s:Batch scan result from FW is null can't invoke HDD callback",
12728 __func__);
12729 VOS_ASSERT(0);
12730 return;
12731 }
12732
12733 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12734 if (NULL == pMac)
12735 {
12736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12737 "%s:pMac is NULL", __func__);
12738 VOS_ASSERT(0);
12739 return;
12740 }
12741
12742 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12743 /*call hdd callback with set batch scan response data*/
12744 if(pMac->pmc.batchScanResultCallback)
12745 {
12746 pMac->pmc.batchScanResultCallback(pCallbackContext,
12747 pBatchScanResult);
12748 }
12749 else
12750 {
12751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12752 "%s:HDD callback is null", __func__);
12753 VOS_ASSERT(0);
12754 }
12755 break;
12756 }
12757#endif
12758
Leo Chang0b0e45a2013-12-15 15:18:55 -080012759#ifdef FEATURE_WLAN_CH_AVOID
12760 case WDI_CH_AVOID_IND:
12761 {
12762 vos_msg_t vosMsg;
12763 tSirChAvoidIndType *chAvoidInd;
12764
12765 chAvoidInd =
12766 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
12767 if (NULL == chAvoidInd)
12768 {
12769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12770 "%s: CH_AVOID IND buffer alloc Fail", __func__);
12771 return ;
12772 }
12773
12774 chAvoidInd->avoidRangeCount =
12775 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
12776 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
12777 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
12778 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
12779
12780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12781 "%s : WDA CH avoid notification", __func__);
12782
12783 vosMsg.type = eWNI_SME_CH_AVOID_IND;
12784 vosMsg.bodyptr = chAvoidInd;
12785 vosMsg.bodyval = 0;
12786 /* Send message to SME */
12787 if (VOS_STATUS_SUCCESS !=
12788 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12789 {
12790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12791 "post eWNI_SME_CH_AVOID_IND to SME Failed");
12792 vos_mem_free(chAvoidInd);
12793 }
12794 break;
12795 }
12796#endif /* FEATURE_WLAN_CH_AVOID */
12797
Jeff Johnson295189b2012-06-20 16:38:30 -070012798 default:
12799 {
12800 /* TODO error */
12801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12802 "Received UNKNOWN Indication from WDI ");
12803 }
12804 }
12805 return ;
12806}
12807
Jeff Johnson295189b2012-06-20 16:38:30 -070012808/*
12809 * BA related processing in WDA.
12810 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012811void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12812 void* pUserData)
12813{
12814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12815 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 if(NULL == pWdaParams)
12817 {
12818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012820 VOS_ASSERT(0) ;
12821 return ;
12822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012823 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 vos_mem_free(pWdaParams->wdaMsgParam) ;
12825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12826 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012828 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12830 {
12831 tANI_U8 i = 0 ;
12832 tBaActivityInd *baActivityInd = NULL ;
12833 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12834 tANI_U8 allocSize = sizeof(tBaActivityInd)
12835 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12836 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12837 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012839 if(NULL == baActivityInd)
12840 {
12841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012843 VOS_ASSERT(0) ;
12844 return;
12845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12847 sizeof(tSirMacAddr)) ;
12848 baActivityInd->baCandidateCnt = baCandidateCount ;
12849
12850 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12851 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12852
12853 for(i = 0 ; i < baCandidateCount ; i++)
12854 {
12855 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12857 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12859 {
12860 baCandidate->baInfo[tid].fBaEnable =
12861 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12862 baCandidate->baInfo[tid].startingSeqNum =
12863 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12864 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012865 wdiBaCandidate++ ;
12866 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012868 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12869 }
12870 else
12871 {
12872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12873 "BA Trigger RSP with Failure received ");
12874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012876}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012877
12878
12879/*
12880 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12881 * during MCC
12882 */
12883void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12884{
12885 wpt_uint32 enabled;
12886 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12887 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12888 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12889
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012890 if (NULL == pMac )
12891 {
12892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12893 "%s: Invoked with invalid MAC context ", __func__ );
12894 VOS_ASSERT(0);
12895 return;
12896 }
12897
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012898 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12899 != eSIR_SUCCESS)
12900 {
12901 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12902 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12903 return;
12904 }
12905
12906 if(!enabled)
12907 {
12908 return;
12909 }
12910
12911 if(NULL == pWDA)
12912 {
12913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12914 "%s:WDA context is NULL", __func__);
12915 VOS_ASSERT(0);
12916 return;
12917 }
12918
12919 if(activate)
12920 {
12921 if( VOS_STATUS_SUCCESS !=
12922 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12923 {
12924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12925 "Traffic Stats Timer Start Failed ");
12926 return;
12927 }
12928 WDI_DS_ActivateTrafficStats();
12929 }
12930 else
12931 {
12932 WDI_DS_DeactivateTrafficStats();
12933 WDI_DS_ClearTrafficStats();
12934
12935 if( VOS_STATUS_SUCCESS !=
12936 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12937 {
12938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12939 "Traffic Stats Timer Stop Failed ");
12940 return;
12941 }
12942 }
12943}
12944
12945/*
12946 * Traffic Stats Timer handler
12947 */
12948void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12949{
12950 WDI_Status wdiStatus;
12951 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12952 WDI_TrafficStatsIndType trafficStatsIndParams;
12953 wpt_uint32 length, enabled;
12954 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12955
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012956 if (NULL == pMac )
12957 {
12958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12959 "%s: Invoked with invalid MAC context ", __func__ );
12960 VOS_ASSERT(0);
12961 return;
12962 }
12963
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012964 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12965 != eSIR_SUCCESS)
12966 {
12967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12968 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12969 return;
12970 }
12971
12972 if(!enabled)
12973 {
12974 WDI_DS_DeactivateTrafficStats();
12975 return;
12976 }
12977
12978 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12979
12980 if(pWdiTrafficStats != NULL)
12981 {
12982 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12983 trafficStatsIndParams.length = length;
12984 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012985 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012986 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12987 trafficStatsIndParams.pUserData = pWDA;
12988
12989 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12990
12991 if(WDI_STATUS_PENDING == wdiStatus)
12992 {
12993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12994 "Pending received for %s:%d ",__func__,__LINE__ );
12995 }
12996 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12997 {
12998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12999 "Failure in %s:%d ",__func__,__LINE__ );
13000 }
13001
13002 WDI_DS_ClearTrafficStats();
13003 }
13004 else
13005 {
13006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13007 "pWdiTrafficStats is Null");
13008 }
13009
13010 if( VOS_STATUS_SUCCESS !=
13011 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13014 "Traffic Stats Timer Start Failed ");
13015 return;
13016 }
13017}
13018
Jeff Johnson295189b2012-06-20 16:38:30 -070013019/*
13020 * BA Activity check timer handler
13021 */
13022void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13023{
13024 tANI_U8 curSta = 0 ;
13025 tANI_U8 tid = 0 ;
13026 tANI_U8 size = 0 ;
13027 tANI_U8 baCandidateCount = 0 ;
13028 tANI_U8 newBaCandidate = 0 ;
13029 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13030
13031 if(NULL == pWDA)
13032 {
13033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013034 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 VOS_ASSERT(0);
13036 return ;
13037 }
13038 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13039 {
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13041 "Inconsistent STA entries in WDA");
13042 VOS_ASSERT(0) ;
13043 }
13044 /* walk through all STA entries and find out TX packet count */
13045 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13046 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013047#ifdef WLAN_SOFTAP_VSTA_FEATURE
13048 // We can only do BA on "hard" STAs.
13049 if (!(IS_HWSTA_IDX(curSta)))
13050 {
13051 continue;
13052 }
13053#endif //WLAN_SOFTAP_VSTA_FEATURE
13054 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13055 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013056 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 tANI_U32 txPktCount = 0 ;
13058 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013060 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13061 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013062 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13063 curSta, tid, &txPktCount)))
13064 {
13065#if 0
13066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13067 "************* %d:%d, %d ",curSta, txPktCount,
13068 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13069#endif
13070 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013071 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013072 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13073 curSta, tid)))
13074 {
13075 /* get prepare for sending message to HAL */
13076 //baCandidate[baCandidateCount].staIdx = curSta ;
13077 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13078 newBaCandidate = WDA_ENABLE_BA ;
13079 }
13080 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13081 }
13082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013083 /* fill the entry for all the sta with given TID's */
13084 if(WDA_ENABLE_BA == newBaCandidate)
13085 {
13086 /* move to next BA candidate */
13087 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13088 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13089 baCandidateCount++ ;
13090 newBaCandidate = WDA_DISABLE_BA ;
13091 }
13092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013093 /* prepare and send message to hal */
13094 if( 0 < baCandidateCount)
13095 {
13096 WDI_Status status = WDI_STATUS_SUCCESS ;
13097 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13098 tWDA_ReqParams *pWdaParams =
13099 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100 if(NULL == pWdaParams)
13101 {
13102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013103 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 VOS_ASSERT(0) ;
13105 return;
13106 }
13107 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13108 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13109 if(NULL == wdiTriggerBaReq)
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 VOS_ASSERT(0) ;
13114 vos_mem_free(pWdaParams);
13115 return;
13116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 do
13118 {
13119 WDI_TriggerBAReqinfoType *triggerBaInfo =
13120 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13121 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13122 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13123 * for each request */
13124 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13125 triggerBaInfo->ucBASessionID = 0;
13126 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13127 } while(0) ;
13128 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013130 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 pWdaParams->pWdaContext = pWDA;
13132 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13133 pWdaParams->wdaMsgParam = NULL;
13134 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13135 WDA_TriggerBaReqCallback, pWdaParams) ;
13136 if(IS_WDI_STATUS_FAILURE(status))
13137 {
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13139 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13140 vos_mem_free(pWdaParams->wdaMsgParam) ;
13141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13142 vos_mem_free(pWdaParams) ;
13143 }
13144 }
13145 else
13146 {
13147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13148 "There is no TID for initiating BA");
13149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 if( VOS_STATUS_SUCCESS !=
13151 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13152 {
13153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13154 "BA Activity Timer Stop Failed ");
13155 return ;
13156 }
13157 if( VOS_STATUS_SUCCESS !=
13158 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13159 {
13160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13161 "BA Activity Timer Start Failed ");
13162 return;
13163 }
13164 return ;
13165}
Jeff Johnson295189b2012-06-20 16:38:30 -070013166/*
13167 * WDA common routine to create timer used by WDA.
13168 */
13169static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13170{
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13172 tANI_U32 val = 0 ;
13173 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13174
13175 if(NULL == pMac)
13176 {
13177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013178 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 VOS_ASSERT(0);
13180 return VOS_STATUS_E_FAILURE;
13181 }
13182 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13183 != eSIR_SUCCESS)
13184 {
13185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13186 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13187 return VOS_STATUS_E_FAILURE;
13188 }
13189 val = SYS_MS_TO_TICKS(val) ;
13190
13191 /* BA activity check timer */
13192 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13193 "BA Activity Check timer", WDA_TimerHandler,
13194 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13195 if(status != TX_SUCCESS)
13196 {
13197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13198 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013199 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013202 /* Tx Complete Timeout timer */
13203 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13204 "Tx Complete Check timer", WDA_TimerHandler,
13205 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 if(status != TX_SUCCESS)
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13209 "Unable to create Tx Complete Timeout timer");
13210 /* Destroy timer of BA activity check timer */
13211 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13212 if(status != TX_SUCCESS)
13213 {
13214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13215 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013216 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013217 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013218 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013220
13221 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13222
13223 /* Traffic Stats timer */
13224 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13225 "Traffic Stats timer", WDA_TimerHandler,
13226 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13227 if(status != TX_SUCCESS)
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13230 "Unable to create traffic stats timer");
13231 /* Destroy timer of BA activity check timer */
13232 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13233 if(status != TX_SUCCESS)
13234 {
13235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13236 "Unable to Destroy BA activity timer");
13237 }
13238 /* Destroy timer of tx complete timer */
13239 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13240 if(status != TX_SUCCESS)
13241 {
13242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13243 "Unable to Tx complete timer");
13244 }
13245 return VOS_STATUS_E_FAILURE ;
13246 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013247 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013248}
Jeff Johnson295189b2012-06-20 16:38:30 -070013249/*
13250 * WDA common routine to destroy timer used by WDA.
13251 */
13252static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13253{
13254 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013255 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13256 if(status != TX_SUCCESS)
13257 {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13259 "Unable to Destroy Tx Complete Timeout timer");
13260 return eSIR_FAILURE ;
13261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13263 if(status != TX_SUCCESS)
13264 {
13265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13266 "Unable to Destroy BA activity timer");
13267 return eSIR_FAILURE ;
13268 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013269 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13270 if(status != TX_SUCCESS)
13271 {
13272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13273 "Unable to Destroy traffic stats timer");
13274 return eSIR_FAILURE ;
13275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 return eSIR_SUCCESS ;
13277}
Jeff Johnson295189b2012-06-20 16:38:30 -070013278/*
13279 * WDA timer handler.
13280 */
13281void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13282{
13283 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13284 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 /*
13286 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13287 */
13288 wdaMsg.type = timerInfo ;
13289 wdaMsg.bodyptr = NULL;
13290 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013291 /* post the message.. */
13292 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13293 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13294 {
13295 vosStatus = VOS_STATUS_E_BADMSG;
13296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013297}
Jeff Johnson295189b2012-06-20 16:38:30 -070013298/*
13299 * WDA Tx Complete timeout Indication.
13300 */
13301void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13302{
13303 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 if( pWDA->pAckTxCbFunc )
13305 {
13306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013307 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 pWDA->pAckTxCbFunc( pMac, 0);
13309 pWDA->pAckTxCbFunc = NULL;
13310 }
13311 else
13312 {
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013314 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013316}
Jeff Johnson295189b2012-06-20 16:38:30 -070013317/*
13318 * WDA Set REG Domain to VOS NV
13319 */
Abhishek Singha306a442013-11-07 18:39:01 +053013320eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13321 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013322{
Abhishek Singha306a442013-11-07 18:39:01 +053013323 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 {
13325 return eHAL_STATUS_INVALID_PARAMETER;
13326 }
13327 return eHAL_STATUS_SUCCESS;
13328}
Jeff Johnson295189b2012-06-20 16:38:30 -070013329
Jeff Johnson295189b2012-06-20 16:38:30 -070013330#ifdef FEATURE_WLAN_SCAN_PNO
13331/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013332 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 *
13334 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013335void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013336{
13337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013339 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013340 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_ASSERT(0) ;
13345 return ;
13346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013347
Yue Ma7f44bbe2013-04-12 11:47:39 -070013348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13349 vos_mem_free(pWdaParams->wdaMsgParam);
13350 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013351
13352 return ;
13353}
Jeff Johnson295189b2012-06-20 16:38:30 -070013354/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013355 * FUNCTION: WDA_PNOScanReqCallback
13356 * Free memory.
13357 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13358 */
13359void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013360{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13362
13363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13364 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13365
13366 if(NULL == pWdaParams)
13367 {
13368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13369 "%s: pWdaParams received NULL", __func__);
13370 VOS_ASSERT(0);
13371 return;
13372 }
13373
13374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13375 {
13376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13377 vos_mem_free(pWdaParams->wdaMsgParam);
13378 vos_mem_free(pWdaParams);
13379 }
13380
13381 return;
13382}
13383/*
13384 * FUNCTION: WDA_UpdateScanParamsRespCallback
13385 *
13386 */
13387void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13388{
13389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013391 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013392 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 {
13394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013395 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013396 VOS_ASSERT(0) ;
13397 return ;
13398 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013399
13400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13401 vos_mem_free(pWdaParams->wdaMsgParam);
13402 vos_mem_free(pWdaParams);
13403
Jeff Johnson295189b2012-06-20 16:38:30 -070013404 return ;
13405}
Jeff Johnson295189b2012-06-20 16:38:30 -070013406/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013407 * FUNCTION: WDA_UpdateScanParamsReqCallback
13408 * Free memory.
13409 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13410 */
13411void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13412{
13413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13414
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13416 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13417
13418 if(NULL == pWdaParams)
13419 {
13420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13421 "%s: pWdaParams received NULL", __func__);
13422 VOS_ASSERT(0);
13423 return;
13424 }
13425
13426 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13427 {
13428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13429 vos_mem_free(pWdaParams->wdaMsgParam);
13430 vos_mem_free(pWdaParams);
13431 }
13432
13433 return;
13434}
13435/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13437 * Request to WDI to set Preferred Network List.Offload
13438 */
13439VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13440 tSirPNOScanReq *pPNOScanReqParams)
13441{
Jeff Johnson43971f52012-07-17 12:26:56 -070013442 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13444 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13445 tWDA_ReqParams *pWdaParams ;
13446 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 if(NULL == pwdiPNOScanReqInfo)
13450 {
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 VOS_ASSERT(0);
13454 return VOS_STATUS_E_NOMEM;
13455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13457 if(NULL == pWdaParams)
13458 {
13459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 VOS_ASSERT(0);
13462 vos_mem_free(pwdiPNOScanReqInfo);
13463 return VOS_STATUS_E_NOMEM;
13464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 //
13466 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13467 //
13468 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13469 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13471 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13472 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13474 {
13475 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13476 &pPNOScanReqParams->aNetworks[i],
13477 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 /*Scan timer intervals*/
13480 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13481 &pPNOScanReqParams->scanTimers,
13482 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013483 /*Probe template for 2.4GHz band*/
13484 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13485 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13486 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13488 pPNOScanReqParams->p24GProbeTemplate,
13489 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013490 /*Probe template for 5GHz band*/
13491 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13492 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13493 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13495 pPNOScanReqParams->p5GProbeTemplate,
13496 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013497 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13498 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013499
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 /* Store Params pass it to WDI */
13501 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13502 pWdaParams->pWdaContext = pWDA;
13503 /* Store param pointer as passed in by caller */
13504 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013506 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013507 if(IS_WDI_STATUS_FAILURE(status))
13508 {
13509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13510 "Failure in Set PNO REQ WDI API, free all the memory " );
13511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13512 vos_mem_free(pWdaParams->wdaMsgParam);
13513 pWdaParams->wdaWdiApiMsgParam = NULL;
13514 pWdaParams->wdaMsgParam = NULL;
13515 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 return CONVERT_WDI2VOS_STATUS(status) ;
13517}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013518
13519#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13520
13521void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13522{
13523 /*Convert the CSR Auth types to WDI Auth types */
13524 switch (csrAuthType)
13525 {
13526 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13527 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13528 break;
13529#ifdef FEATURE_WLAN_CCX
13530 case eCSR_AUTH_TYPE_CCKM_WPA:
13531 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13532 break;
13533#endif
13534 case eCSR_AUTH_TYPE_WPA:
13535 *AuthType = eWDA_AUTH_TYPE_WPA;
13536 break;
13537 case eCSR_AUTH_TYPE_WPA_PSK:
13538 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13539 break;
13540#ifdef FEATURE_WLAN_CCX
13541 case eCSR_AUTH_TYPE_CCKM_RSN:
13542 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13543 break;
13544#endif
13545 case eCSR_AUTH_TYPE_RSN:
13546 *AuthType = eWDA_AUTH_TYPE_RSN;
13547 break;
13548 case eCSR_AUTH_TYPE_RSN_PSK:
13549 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13550 break;
13551#if defined WLAN_FEATURE_VOWIFI_11R
13552 case eCSR_AUTH_TYPE_FT_RSN:
13553 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13554 break;
13555 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13556 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13557 break;
13558#endif
13559#ifdef FEATURE_WLAN_WAPI
13560 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13561 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13562 break;
13563 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13564 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13565 break;
13566#endif /* FEATURE_WLAN_WAPI */
13567 case eCSR_AUTH_TYPE_SHARED_KEY:
13568 case eCSR_AUTH_TYPE_AUTOSWITCH:
13569 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13570 break;
13571#if 0
13572 case eCSR_AUTH_TYPE_SHARED_KEY:
13573 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13574 break;
13575 case eCSR_AUTH_TYPE_AUTOSWITCH:
13576 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13577#endif
13578 default:
13579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13580 "%s: Unknown Auth Type", __func__);
13581 break;
13582 }
13583}
13584void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13585{
13586 switch (csrEncrType)
13587 {
13588 case eCSR_ENCRYPT_TYPE_NONE:
13589 *EncrType = WDI_ED_NONE;
13590 break;
13591 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13592 case eCSR_ENCRYPT_TYPE_WEP40:
13593 *EncrType = WDI_ED_WEP40;
13594 break;
13595 case eCSR_ENCRYPT_TYPE_WEP104:
13596 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13597 *EncrType = WDI_ED_WEP104;
13598 break;
13599 case eCSR_ENCRYPT_TYPE_TKIP:
13600 *EncrType = WDI_ED_TKIP;
13601 break;
13602 case eCSR_ENCRYPT_TYPE_AES:
13603 *EncrType = WDI_ED_CCMP;
13604 break;
13605#ifdef WLAN_FEATURE_11W
13606 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13607 *EncrType = WDI_ED_AES_128_CMAC;
13608 break;
13609#endif
13610#ifdef FEATURE_WLAN_WAPI
13611 case eCSR_ENCRYPT_TYPE_WPI:
13612 *EncrType = WDI_ED_WPI;
13613 break;
13614#endif
13615 case eCSR_ENCRYPT_TYPE_ANY:
13616 *EncrType = WDI_ED_ANY;
13617 break;
13618
13619 default:
13620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13621 "%s: Unknown Encryption Type", __func__);
13622 break;
13623 }
13624}
13625
13626/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013627 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013628 * Request to WDI to set Roam Offload Scan
13629 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013630VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013631 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13632{
13633 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013634 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13635 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013636 tWDA_ReqParams *pWdaParams ;
13637 v_U8_t csrAuthType;
13638 WDI_RoamNetworkType *pwdiRoamNetworkType;
13639 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13641 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013642 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013643 {
13644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13645 "%s: VOS MEM Alloc Failure", __func__);
13646 VOS_ASSERT(0);
13647 return VOS_STATUS_E_NOMEM;
13648 }
13649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13650 if (NULL == pWdaParams)
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13653 "%s: VOS MEM Alloc Failure", __func__);
13654 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013655 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013656 return VOS_STATUS_E_NOMEM;
13657 }
13658
13659 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013660 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013661 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013662 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13663 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013664 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13665 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13666 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13667 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13668 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13669 sizeof(pwdiRoamNetworkType->currAPbssid));
13670 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13671 csrAuthType);
13672 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13673 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13674 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13675 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13676 pwdiRoamOffloadScanInfo->LookupThreshold =
13677 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080013678 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
13679 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013680 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13681 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013682 pwdiRoamOffloadScanInfo->MAWCEnabled =
13683 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013684 pwdiRoamOffloadScanInfo->Command =
13685 pRoamOffloadScanReqParams->Command ;
13686 pwdiRoamOffloadScanInfo->StartScanReason =
13687 pRoamOffloadScanReqParams->StartScanReason ;
13688 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13689 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13690 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13691 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13692 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13693 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13694 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13695 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13696 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13697 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13698 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13699 pRoamOffloadScanReqParams->IsCCXEnabled ;
13700 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13701 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13702 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13703 pwdiRoamNetworkType->ssId.ucLength =
13704 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13705 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13706 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13707 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13708 pwdiRoamNetworkType->ChannelCount =
13709 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13710 pwdiRoamOffloadScanInfo->ChannelCacheType =
13711 pRoamOffloadScanReqParams->ChannelCacheType;
13712 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13713 pRoamOffloadScanReqParams->ValidChannelList,
13714 pRoamOffloadScanReqParams->ValidChannelCount);
13715 pwdiRoamOffloadScanInfo->ValidChannelCount =
13716 pRoamOffloadScanReqParams->ValidChannelCount;
13717 pwdiRoamOffloadScanInfo->us24GProbeSize =
13718 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13719 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13720 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13721 pRoamOffloadScanReqParams->p24GProbeTemplate,
13722 pwdiRoamOffloadScanInfo->us24GProbeSize);
13723 pwdiRoamOffloadScanInfo->us5GProbeSize =
13724 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13725 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13726 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13727 pRoamOffloadScanReqParams->p5GProbeTemplate,
13728 pwdiRoamOffloadScanInfo->us5GProbeSize);
13729 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13730 pRoamOffloadScanReqParams->MDID.mdiePresent;
13731 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13732 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013733 pwdiRoamOffloadScanInfo->nProbes =
13734 pRoamOffloadScanReqParams->nProbes;
13735 pwdiRoamOffloadScanInfo->HomeAwayTime =
13736 pRoamOffloadScanReqParams->HomeAwayTime;
13737 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013738 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013739 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013740 pWdaParams->pWdaContext = pWDA;
13741 /* Store param pointer as passed in by caller */
13742 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013743 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013744 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13745 if(IS_WDI_STATUS_FAILURE(status))
13746 {
13747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13748 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13750 vos_mem_free(pWdaParams->wdaMsgParam);
13751 pWdaParams->wdaWdiApiMsgParam = NULL;
13752 pWdaParams->wdaMsgParam = NULL;
13753 }
13754 return CONVERT_WDI2VOS_STATUS(status) ;
13755}
13756#endif
13757
Jeff Johnson295189b2012-06-20 16:38:30 -070013758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013759 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013760 *
13761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013762void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013763{
13764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13765
13766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013768
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013769 if(NULL == pWdaParams)
13770 {
13771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013772 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013773 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013774 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013775 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013776
Jeff Johnson295189b2012-06-20 16:38:30 -070013777 vos_mem_free(pWdaParams->wdaMsgParam) ;
13778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13779 vos_mem_free(pWdaParams) ;
13780
13781 return ;
13782}
13783/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013784 * FUNCTION: WDA_RssiFilterReqCallback
13785 * Free memory.
13786 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13787 */
13788void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13789{
13790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13791
13792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13793 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13794
13795 if(NULL == pWdaParams)
13796 {
13797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13798 "%s: pWdaParams received NULL", __func__);
13799 VOS_ASSERT(0);
13800 return;
13801 }
13802
13803 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13804 {
13805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13806 vos_mem_free(pWdaParams->wdaMsgParam);
13807 vos_mem_free(pWdaParams);
13808 }
13809
13810 return;
13811}
13812/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13814 * Request to WDI to set Preferred Network List.Offload
13815 */
13816VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13817 tSirSetRSSIFilterReq* pRssiFilterParams)
13818{
Jeff Johnson43971f52012-07-17 12:26:56 -070013819 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13821 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13822 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013825 if(NULL == pwdiSetRssiFilterReqInfo)
13826 {
13827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013829 VOS_ASSERT(0);
13830 return VOS_STATUS_E_NOMEM;
13831 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13833 if(NULL == pWdaParams)
13834 {
13835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 VOS_ASSERT(0);
13838 vos_mem_free(pwdiSetRssiFilterReqInfo);
13839 return VOS_STATUS_E_NOMEM;
13840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013842 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13843 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013844
Jeff Johnson295189b2012-06-20 16:38:30 -070013845 /* Store Params pass it to WDI */
13846 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13847 pWdaParams->pWdaContext = pWDA;
13848 /* Store param pointer as passed in by caller */
13849 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013851 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013852 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 if(IS_WDI_STATUS_FAILURE(status))
13854 {
13855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13856 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13858 vos_mem_free(pWdaParams->wdaMsgParam);
13859 pWdaParams->wdaWdiApiMsgParam = NULL;
13860 pWdaParams->wdaMsgParam = NULL;
13861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013862 return CONVERT_WDI2VOS_STATUS(status) ;
13863}
13864
Jeff Johnson295189b2012-06-20 16:38:30 -070013865/*
13866 * FUNCTION: WDA_ProcessUpdateScanParams
13867 * Request to WDI to update Scan Parameters
13868 */
13869VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13870 tSirUpdateScanParams *pUpdateScanParams)
13871{
Jeff Johnson43971f52012-07-17 12:26:56 -070013872 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13874 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13875 sizeof(WDI_UpdateScanParamsInfoType)) ;
13876 tWDA_ReqParams *pWdaParams ;
13877 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013879 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013880 if(NULL == wdiUpdateScanParamsInfoType)
13881 {
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 VOS_ASSERT(0);
13885 return VOS_STATUS_E_NOMEM;
13886 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13888 if ( NULL == pWdaParams )
13889 {
13890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013892 VOS_ASSERT(0);
13893 vos_mem_free(wdiUpdateScanParamsInfoType);
13894 return VOS_STATUS_E_NOMEM;
13895 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013896 //
13897 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13898 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13900 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13901 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13902 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080013903 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 pUpdateScanParams->b11dEnabled,
13905 pUpdateScanParams->b11dResolved,
13906 pUpdateScanParams->ucChannelCount,
13907 pUpdateScanParams->usPassiveMinChTime,
13908 pUpdateScanParams->usPassiveMaxChTime,
13909 pUpdateScanParams->usActiveMinChTime,
13910 pUpdateScanParams->usActiveMaxChTime,
13911 sizeof(tSirUpdateScanParams),
13912 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13913
Jeff Johnson295189b2012-06-20 16:38:30 -070013914 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13915 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013916 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13917 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013918 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13919 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013920 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13921 pUpdateScanParams->usActiveMaxChTime;
13922 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13923 pUpdateScanParams->usActiveMinChTime;
13924 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13925 pUpdateScanParams->usPassiveMaxChTime;
13926 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13927 pUpdateScanParams->usPassiveMinChTime;
13928
Jeff Johnson295189b2012-06-20 16:38:30 -070013929 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013930 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13931 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013932
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 for ( i = 0; i <
13934 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13935 i++)
13936 {
13937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13938 "Update Scan Parameters channel: %d",
13939 pUpdateScanParams->aChannels[i]);
13940
13941 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13942 pUpdateScanParams->aChannels[i];
13943 }
13944
Yue Ma7f44bbe2013-04-12 11:47:39 -070013945 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13946 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013947
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 /* Store Params pass it to WDI */
13949 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13950 pWdaParams->pWdaContext = pWDA;
13951 /* Store param pointer as passed in by caller */
13952 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013953
Jeff Johnson295189b2012-06-20 16:38:30 -070013954
13955
13956 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013957 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013959 if(IS_WDI_STATUS_FAILURE(status))
13960 {
13961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13962 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13964 vos_mem_free(pWdaParams->wdaMsgParam);
13965 vos_mem_free(pWdaParams);
13966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 return CONVERT_WDI2VOS_STATUS(status) ;
13968}
13969#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013970
13971#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13972/*
13973 * FUNCTION: WDA_RoamOffloadScanReqCallback
13974 *
13975 */
13976void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13977{
13978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013979 vos_msg_t vosMsg;
13980 wpt_uint8 reason = 0;
13981
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013983 "<------ %s " ,__func__);
13984 if (NULL == pWdaParams)
13985 {
13986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13987 "%s: pWdaParams received NULL", __func__);
13988 VOS_ASSERT(0) ;
13989 return ;
13990 }
13991 if ( pWdaParams != NULL )
13992 {
13993 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13994 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013995 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13997 }
13998 if ( pWdaParams->wdaMsgParam != NULL)
13999 {
14000 vos_mem_free(pWdaParams->wdaMsgParam);
14001 }
14002
14003 vos_mem_free(pWdaParams) ;
14004 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014005 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14006 vosMsg.bodyptr = NULL;
14007 if (WDI_STATUS_SUCCESS != status)
14008 {
14009 reason = 0;
14010 }
14011 vosMsg.bodyval = reason;
14012 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14013 {
14014 /* free the mem and return */
14015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014016 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014017 }
14018
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014019 return ;
14020}
14021#endif
14022
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014024 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014025 *
14026 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014027void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014028{
14029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14030
14031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14032 "<------ %s " ,__func__);
14033
14034 if(NULL == pWdaParams)
14035 {
14036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14037 "%s: pWdaParams received NULL", __func__);
14038 VOS_ASSERT(0);
14039 return;
14040 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014041
14042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14043 vos_mem_free(pWdaParams->wdaMsgParam);
14044 vos_mem_free(pWdaParams);
14045
14046 return;
14047}
14048/*
14049 * FUNCTION: WDA_SetPowerParamsReqCallback
14050 * Free memory.
14051 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14052 */
14053void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14054{
14055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14056
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14058 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14059
14060 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014061 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14063 "%s: pWdaParams received NULL", __func__);
14064 VOS_ASSERT(0);
14065 return;
14066 }
14067
14068 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14069 {
14070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14071 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014072 vos_mem_free(pWdaParams);
14073 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014074
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014075 return;
14076}
14077
Jeff Johnson295189b2012-06-20 16:38:30 -070014078#ifdef WLAN_FEATURE_PACKET_FILTERING
14079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014080 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014081 *
14082 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014083void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014084 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14085 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014086{
14087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014089 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 if(NULL == pWdaParams)
14091 {
14092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014093 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 VOS_ASSERT(0) ;
14095 return ;
14096 }
14097
14098 vos_mem_free(pWdaParams->wdaMsgParam) ;
14099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14100 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014101 //print a msg, nothing else to do
14102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014103 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014104 return ;
14105}
Jeff Johnson295189b2012-06-20 16:38:30 -070014106/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014107 * FUNCTION: WDA_8023MulticastListReqCallback
14108 * Free memory.
14109 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14110 */
14111void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14112{
14113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14114
14115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14116 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14117
14118 if(NULL == pWdaParams)
14119 {
14120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14121 "%s: pWdaParams received NULL", __func__);
14122 VOS_ASSERT(0);
14123 return;
14124 }
14125
14126 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14127 {
14128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14129 vos_mem_free(pWdaParams->wdaMsgParam);
14130 vos_mem_free(pWdaParams);
14131 }
14132
14133 return;
14134}
14135/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 * FUNCTION: WDA_Process8023MulticastListReq
14137 * Request to WDI to add 8023 Multicast List
14138 */
14139VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14140 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14141{
Jeff Johnson43971f52012-07-17 12:26:56 -070014142 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014143 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14144 tWDA_ReqParams *pWdaParams ;
14145 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014147 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 pwdiFltPktSetMcListReqParamsType =
14149 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14150 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14151 ) ;
14152 if(NULL == pwdiFltPktSetMcListReqParamsType)
14153 {
14154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014156 return VOS_STATUS_E_NOMEM;
14157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14159 if(NULL == pWdaParams)
14160 {
14161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14164 return VOS_STATUS_E_NOMEM;
14165 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014166
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 //
14168 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14169 //
14170 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014171 pRcvFltMcAddrList->ulMulticastAddrCnt;
14172
14173 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14174 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14175 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14176 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14177
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14179 {
14180 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14181 &(pRcvFltMcAddrList->multicastAddr[i]),
14182 sizeof(tSirMacAddr));
14183 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014184 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14185 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014186
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 /* Store Params pass it to WDI */
14188 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14189 pWdaParams->pWdaContext = pWDA;
14190 /* Store param pointer as passed in by caller */
14191 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014192 status = WDI_8023MulticastListReq(
14193 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014194 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014195 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014196 if(IS_WDI_STATUS_FAILURE(status))
14197 {
14198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14199 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14201 vos_mem_free(pWdaParams->wdaMsgParam);
14202 vos_mem_free(pWdaParams);
14203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 return CONVERT_WDI2VOS_STATUS(status) ;
14205}
Jeff Johnson295189b2012-06-20 16:38:30 -070014206/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014207 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014208 *
14209 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014210void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014211 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14212 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014213{
14214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014216 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014217 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 if(NULL == pWdaParams)
14219 {
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 VOS_ASSERT(0) ;
14223 return ;
14224 }
14225
14226 vos_mem_free(pWdaParams->wdaMsgParam) ;
14227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14228 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014229 //print a msg, nothing else to do
14230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014231 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014232 return ;
14233}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014234
14235/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014236 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14237 * Free memory.
14238 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014239 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014240void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014241 void* pUserData)
14242{
14243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14244
14245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14246 "<------ %s, wdiStatus: %d",
14247 __func__, wdiStatus);
14248
14249 if (NULL == pWdaParams)
14250 {
14251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14252 "%s: Invalid pWdaParams pointer", __func__);
14253 VOS_ASSERT(0);
14254 return;
14255 }
14256
14257 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14258 {
14259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14260 vos_mem_free(pWdaParams->wdaMsgParam);
14261 vos_mem_free(pWdaParams);
14262 }
14263
14264 return;
14265}
14266
Jeff Johnson295189b2012-06-20 16:38:30 -070014267/*
14268 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14269 * Request to WDI to set Receive Filters
14270 */
14271VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14272 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14273{
Jeff Johnson43971f52012-07-17 12:26:56 -070014274 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014275 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14276 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14277 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14278 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14279 tWDA_ReqParams *pWdaParams ;
14280 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014283 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14284 {
14285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014287 VOS_ASSERT(0);
14288 return VOS_STATUS_E_NOMEM;
14289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14291 if(NULL == pWdaParams)
14292 {
14293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014295 VOS_ASSERT(0);
14296 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14297 return VOS_STATUS_E_NOMEM;
14298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14300 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14301 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14302 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014303 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14304 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14305
14306 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14307 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014308
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14310 "FID %d FT %d NParams %d CT %d",
14311 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14312 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14313 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14314 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14316 {
14317 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14318 &pRcvPktFilterCfg->paramsData[i],
14319 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014321 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014322 pwdiSetRcvPktFilterReqParamsType->
14323 wdiPktFilterCfg.paramsData[i].protocolLayer,
14324 pwdiSetRcvPktFilterReqParamsType->
14325 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014327 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014328 pwdiSetRcvPktFilterReqParamsType->
14329 wdiPktFilterCfg.paramsData[i].dataOffset,
14330 pwdiSetRcvPktFilterReqParamsType->
14331 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014333 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014334 pwdiSetRcvPktFilterReqParamsType->
14335 wdiPktFilterCfg.paramsData[i].compareData[0],
14336 pwdiSetRcvPktFilterReqParamsType->
14337 wdiPktFilterCfg.paramsData[i].compareData[1],
14338 pwdiSetRcvPktFilterReqParamsType->
14339 wdiPktFilterCfg.paramsData[i].compareData[2],
14340 pwdiSetRcvPktFilterReqParamsType->
14341 wdiPktFilterCfg.paramsData[i].compareData[3],
14342 pwdiSetRcvPktFilterReqParamsType->
14343 wdiPktFilterCfg.paramsData[i].compareData[4],
14344 pwdiSetRcvPktFilterReqParamsType->
14345 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014347 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014348 pwdiSetRcvPktFilterReqParamsType->
14349 wdiPktFilterCfg.paramsData[i].dataMask[0],
14350 pwdiSetRcvPktFilterReqParamsType->
14351 wdiPktFilterCfg.paramsData[i].dataMask[1],
14352 pwdiSetRcvPktFilterReqParamsType->
14353 wdiPktFilterCfg.paramsData[i].dataMask[2],
14354 pwdiSetRcvPktFilterReqParamsType->
14355 wdiPktFilterCfg.paramsData[i].dataMask[3],
14356 pwdiSetRcvPktFilterReqParamsType->
14357 wdiPktFilterCfg.paramsData[i].dataMask[4],
14358 pwdiSetRcvPktFilterReqParamsType->
14359 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014360 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014361 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014362 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 /* Store Params pass it to WDI */
14364 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14365 pWdaParams->pWdaContext = pWDA;
14366 /* Store param pointer as passed in by caller */
14367 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014368 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014369 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014370 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014371 if(IS_WDI_STATUS_FAILURE(status))
14372 {
14373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14374 "Failure in SetFilter(),free all the memory,status %d ",status);
14375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14376 vos_mem_free(pWdaParams->wdaMsgParam);
14377 vos_mem_free(pWdaParams);
14378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014379 return CONVERT_WDI2VOS_STATUS(status) ;
14380}
Jeff Johnson295189b2012-06-20 16:38:30 -070014381/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014382 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014383 *
14384 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014385void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014386 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14387 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014388{
14389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14390 tWDA_CbContext *pWDA;
14391 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14392 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14393 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14394 tANI_U8 i;
14395 vos_msg_t vosMsg;
14396
14397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014399 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14400
Jeff Johnsone7245742012-09-05 17:12:55 -070014401 if(NULL == pRcvFltPktMatchCntRsp)
14402 {
14403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014404 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014405 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014406 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014407 return ;
14408 }
14409
Jeff Johnson295189b2012-06-20 16:38:30 -070014410 if(NULL == pWdaParams)
14411 {
14412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014413 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014414 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014415 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014416 return ;
14417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14419 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014420 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14421 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14422
14423 /* Message Header */
14424 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14425 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14426
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014427 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014428
14429 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14430 {
14431 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14432 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014434 /* VOS message wrapper */
14435 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14436 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14437 vosMsg.bodyval = 0;
14438 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14439 {
14440 /* free the mem and return */
14441 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14442 }
14443
14444 vos_mem_free(pWdaParams->wdaMsgParam) ;
14445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14446 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014447
14448 return;
14449}
14450/*
14451 * FUNCTION: WDA_FilterMatchCountReqCallback
14452 * Free memory and send RSP back to SME.
14453 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14454 */
14455void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14456{
14457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14458 vos_msg_t vosMsg;
14459
14460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14461 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14462
14463 if(NULL == pWdaParams)
14464 {
14465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14466 "%s: pWdaParams received NULL", __func__);
14467 VOS_ASSERT(0);
14468 return;
14469 }
14470
14471 /* VOS message wrapper */
14472 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14473 vosMsg.bodyptr = NULL;
14474 vosMsg.bodyval = 0;
14475
14476 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14477 {
14478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14479 vos_mem_free(pWdaParams->wdaMsgParam);
14480 vos_mem_free(pWdaParams);
14481 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14482 }
14483
14484 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014485}
Jeff Johnson295189b2012-06-20 16:38:30 -070014486/*
14487 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14488 * Request to WDI to get PC Filter Match Count
14489 */
14490VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14491{
Jeff Johnson43971f52012-07-17 12:26:56 -070014492 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14494 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14495 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014497 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014498 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14499 {
14500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014502 VOS_ASSERT(0);
14503 return VOS_STATUS_E_NOMEM;
14504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014505 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14506 if(NULL == pWdaParams)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014510 VOS_ASSERT(0);
14511 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14512 return VOS_STATUS_E_NOMEM;
14513 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014514
Yue Ma7f44bbe2013-04-12 11:47:39 -070014515 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14516 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014517
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014518 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14519 pRcvFltPktMatchRsp->bssId,
14520 sizeof(wpt_macAddr));
14521
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 /* Store Params pass it to WDI */
14523 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14524 pWdaParams->pWdaContext = pWDA;
14525 /* Store param pointer as passed in by caller */
14526 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014527 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014528 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 if(IS_WDI_STATUS_FAILURE(status))
14531 {
14532 /* failure returned by WDI API */
14533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14534 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14536 vos_mem_free(pWdaParams) ;
14537 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14538 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 return CONVERT_WDI2VOS_STATUS(status) ;
14541}
Jeff Johnson295189b2012-06-20 16:38:30 -070014542/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014543 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 *
14545 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014546void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014547 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14548 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014549{
14550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014553/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14554 if(NULL == pWdaParams)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014557 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 VOS_ASSERT(0) ;
14559 return ;
14560 }
14561
14562 vos_mem_free(pWdaParams->wdaMsgParam) ;
14563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14564 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 //print a msg, nothing else to do
14566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014567 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014568 return ;
14569}
Jeff Johnson295189b2012-06-20 16:38:30 -070014570/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014571 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14572 * Free memory.
14573 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14574 */
14575void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14576{
14577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14578
14579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14580 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14581
14582 if(NULL == pWdaParams)
14583 {
14584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14585 "%s: Invalid pWdaParams pointer", __func__);
14586 VOS_ASSERT(0);
14587 return;
14588 }
14589
14590 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14591 {
14592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14593 vos_mem_free(pWdaParams->wdaMsgParam);
14594 vos_mem_free(pWdaParams);
14595 }
14596
14597 return;
14598}
14599/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014600 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14601 * Request to WDI to clear Receive Filters
14602 */
14603VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14604 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14605{
Jeff Johnson43971f52012-07-17 12:26:56 -070014606 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014607 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14608 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14609 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014611 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 if(NULL == pwdiRcvFltPktClearReqParamsType)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014616 VOS_ASSERT(0);
14617 return VOS_STATUS_E_NOMEM;
14618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14620 if(NULL == pWdaParams)
14621 {
14622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014624 VOS_ASSERT(0);
14625 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14626 return VOS_STATUS_E_NOMEM;
14627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14629 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014630 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14631 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14632 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14633 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014634
Yue Ma7f44bbe2013-04-12 11:47:39 -070014635 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014636 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014637 /* Store Params pass it to WDI */
14638 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14639 pWdaParams->pWdaContext = pWDA;
14640 /* Store param pointer as passed in by caller */
14641 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014642 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014643 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014644 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014645 if(IS_WDI_STATUS_FAILURE(status))
14646 {
14647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14648 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014650 vos_mem_free(pWdaParams->wdaMsgParam);
14651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014653 return CONVERT_WDI2VOS_STATUS(status) ;
14654}
14655#endif // WLAN_FEATURE_PACKET_FILTERING
14656
Jeff Johnson295189b2012-06-20 16:38:30 -070014657/*
14658 * FUNCTION: WDA_ProcessSetPowerParamsReq
14659 * Request to WDI to set power params
14660 */
14661VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14662 tSirSetPowerParamsReq *pPowerParams)
14663{
Jeff Johnson43971f52012-07-17 12:26:56 -070014664 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014665 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14666 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014667 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014670 if(NULL == pwdiSetPowerParamsReqInfo)
14671 {
14672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014674 VOS_ASSERT(0);
14675 return VOS_STATUS_E_NOMEM;
14676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14678 if(NULL == pWdaParams)
14679 {
14680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014682 VOS_ASSERT(0);
14683 vos_mem_free(pwdiSetPowerParamsReqInfo);
14684 return VOS_STATUS_E_NOMEM;
14685 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014686
Jeff Johnson295189b2012-06-20 16:38:30 -070014687
14688 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14689 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014690 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14691 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014692 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14693 pPowerParams->uListenInterval;
14694 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14695 pPowerParams->uBcastMcastFilter;
14696 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14697 pPowerParams->uEnableBET;
14698 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14699 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014700 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14701 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014702 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14703 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014704
Jeff Johnson295189b2012-06-20 16:38:30 -070014705 /* Store Params pass it to WDI */
14706 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14707 pWdaParams->pWdaContext = pWDA;
14708 /* Store param pointer as passed in by caller */
14709 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014710 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014711 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014712 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014713 if(IS_WDI_STATUS_FAILURE(status))
14714 {
14715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14716 "Failure in Set power params REQ WDI API, free all the memory " );
14717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14718 vos_mem_free(pWdaParams->wdaMsgParam);
14719 pWdaParams->wdaWdiApiMsgParam = NULL;
14720 pWdaParams->wdaMsgParam = NULL;
14721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014722 return CONVERT_WDI2VOS_STATUS(status) ;
14723}
14724
14725/*
14726 * FUNCTION: WDA_SetTmLevelRspCallback
14727 * Set TM Level response
14728 */
14729void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14730{
14731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14732
14733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014734 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014735
14736 if(NULL == pWdaParams)
14737 {
14738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 VOS_ASSERT(0) ;
14741 return ;
14742 }
14743
14744 /* Dose not need to send notification to upper layer
14745 * Just free allocated resources */
14746 if( pWdaParams != NULL )
14747 {
14748 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14749 {
14750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14751 }
14752 vos_mem_free(pWdaParams->wdaMsgParam) ;
14753 vos_mem_free(pWdaParams) ;
14754 }
14755}
14756
14757/*
14758 * FUNCTION: WDA_ProcessSetTmLevelReq
14759 * Set TM Level request
14760 */
14761VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14762 tAniSetTmLevelReq *setTmLevelReq)
14763{
14764 WDI_Status status = WDI_STATUS_SUCCESS ;
14765 tWDA_ReqParams *pWdaParams ;
14766 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14767 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14768 sizeof(WDI_SetTmLevelReqType)) ;
14769 if(NULL == wdiSetTmLevelReq)
14770 {
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014773 VOS_ASSERT(0);
14774 return VOS_STATUS_E_NOMEM;
14775 }
14776
14777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14778 if(NULL == pWdaParams)
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 VOS_ASSERT(0);
14783 vos_mem_free(wdiSetTmLevelReq);
14784 return VOS_STATUS_E_NOMEM;
14785 }
14786
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014788 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014789
14790 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14791 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14792
14793 pWdaParams->pWdaContext = pWDA;
14794 pWdaParams->wdaMsgParam = setTmLevelReq;
14795 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14796
14797 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14798 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14799
14800 if(IS_WDI_STATUS_FAILURE(status))
14801 {
14802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014803 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014804 vos_mem_free(pWdaParams->wdaMsgParam) ;
14805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14806 vos_mem_free(pWdaParams) ;
14807 }
14808
14809 return CONVERT_WDI2VOS_STATUS(status) ;
14810}
14811
14812VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14813 tpTxControlParams pTxCtrlParam)
14814{
14815 VOS_STATUS wdaStatus;
14816
14817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014818 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 if( pTxCtrlParam == NULL )
14820 {
14821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014822 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014823 return VOS_STATUS_E_FAILURE;
14824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014825 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14826 {
14827 wdaStatus = WDA_SuspendDataTx(pWDA);
14828 }
14829 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14830 {
14831 wdaStatus = WDA_ResumeDataTx(pWDA);
14832 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014833 return wdaStatus;
14834}
14835
14836 /* FUNCTION WDA_featureCapsExchange
14837 * WDA API to invoke capability exchange between host and FW.
14838 */
14839void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14840{
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014842 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 WDI_featureCapsExchangeReq( NULL, pVosContext);
14844}
14845
Yathish9f22e662012-12-10 14:21:35 -080014846/* FUNCTION WDA_disableCapablityFeature
14847 * WDA API to diable Active mode offload in host.
14848 */
14849void WDA_disableCapablityFeature(tANI_U8 feature_index)
14850{
14851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14852 "%s:enter", __func__ );
14853 WDI_disableCapablityFeature(feature_index);
14854}
14855
Jeff Johnson295189b2012-06-20 16:38:30 -070014856 /* FUNCTION WDA_getHostWlanFeatCaps
14857 * Wrapper for WDI API, that will return if the feature (enum value).passed
14858 * to this API is supported or not in Host
14859 * return value
14860 * 0 - implies feature is NOT Supported
14861 * any non zero value - implies feature is SUPPORTED
14862 */
14863tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14864{
14865 return WDI_getHostWlanFeatCaps(featEnumValue);
14866}
14867
14868 /* FUNCTION WDA_getFwWlanFeatCaps
14869 * Wrapper for WDI API, that will return if the feature (enum value).passed
14870 * to this API is supported or not in FW
14871 * return value
14872 * 0 - implies feature is NOT Supported
14873 * any non zero value - implies feature is SUPPORTED
14874 */
14875tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14876{
14877 return WDI_getFwWlanFeatCaps(featEnumValue);
14878}
14879
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014880
Jeff Johnson295189b2012-06-20 16:38:30 -070014881/*
14882 * FUNCTION: WDA_shutdown
14883 * Shutdown WDA/WDI without handshaking with Riva.
14884 * Synchronous function.
14885 */
14886VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14887{
14888 WDI_Status wdiStatus;
14889 //tANI_U8 eventIdx = 0;
14890 VOS_STATUS status = VOS_STATUS_SUCCESS;
14891 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 if (NULL == pWDA)
14893 {
14894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014895 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 VOS_ASSERT(0);
14897 return VOS_STATUS_E_FAILURE;
14898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 /* FTM mode stay START_STATE */
14900 if( (WDA_READY_STATE != pWDA->wdaState) &&
14901 (WDA_INIT_STATE != pWDA->wdaState) &&
14902 (WDA_START_STATE != pWDA->wdaState) )
14903 {
14904 VOS_ASSERT(0);
14905 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014906
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014907 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14908 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014909 {
14910 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014911 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014912 }
Leo Chang9d76f622013-08-23 16:34:52 -070014913 else
14914 {
14915 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14916 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014917
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 /* call WDI shutdown */
14919 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014920 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14921 {
14922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14923 "error in WDA Stop" );
14924 status = VOS_STATUS_E_FAILURE;
14925 }
14926 /* WDI stop is synchrnous, shutdown is complete when it returns */
14927 pWDA->wdaState = WDA_STOP_STATE;
14928
Jeff Johnson295189b2012-06-20 16:38:30 -070014929 /* shutdown should perform the stop & close actions. */
14930 /* Destroy the event */
14931 status = vos_event_destroy(&pWDA->txFrameEvent);
14932 if(!VOS_IS_STATUS_SUCCESS(status))
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014935 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 status = VOS_STATUS_E_FAILURE;
14937 }
14938 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14939 if(!VOS_IS_STATUS_SUCCESS(status))
14940 {
14941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014942 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 status = VOS_STATUS_E_FAILURE;
14944 }
14945 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14946 if(!VOS_IS_STATUS_SUCCESS(status))
14947 {
14948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014949 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014950 status = VOS_STATUS_E_FAILURE;
14951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014952 /* free WDA context */
14953 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14954 if ( !VOS_IS_STATUS_SUCCESS(status) )
14955 {
14956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14957 "error in WDA close " );
14958 status = VOS_STATUS_E_FAILURE;
14959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 return status;
14961}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014962
Jeff Johnsone7245742012-09-05 17:12:55 -070014963/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014964 * FUNCTION: WDA_setNeedShutdown
14965 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014966 */
14967
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014968void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014969{
14970 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014971 if(pWDA == NULL)
14972 {
14973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14974 "Could not get the WDA Context pointer" );
14975 return;
14976 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014977 pWDA->needShutdown = TRUE;
14978}
14979/*
14980 * FUNCTION: WDA_needShutdown
14981 * WDA needs a shutdown
14982 */
14983
14984v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14985{
14986 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014987 if(pWDA == NULL)
14988 {
14989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14990 "Could not get the WDA Context pointer" );
14991 return 0;
14992 }
14993 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014994}
14995
Mohit Khanna4a70d262012-09-11 16:30:12 -070014996#ifdef WLAN_FEATURE_11AC
14997/*
14998 * FUNCTION: WDA_SetBeaconFilterReqCallback
14999 *
15000 */
15001void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15002{
15003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015005 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015006 if(NULL == pWdaParams)
15007 {
15008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015009 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015010 VOS_ASSERT(0) ;
15011 return ;
15012 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015013
Mohit Khanna4a70d262012-09-11 16:30:12 -070015014 vos_mem_free(pWdaParams->wdaMsgParam) ;
15015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15016 vos_mem_free(pWdaParams) ;
15017 /*
15018 * No respone required for SetBeaconFilter req so just free the request
15019 * param here
15020 */
15021
15022 return ;
15023}
15024
15025VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15026 tUpdateVHTOpMode *pData)
15027{
15028 WDI_Status status = WDI_STATUS_SUCCESS ;
15029 tWDA_ReqParams *pWdaParams ;
15030 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15031 sizeof(WDI_UpdateVHTOpMode)) ;
15032 if(NULL == wdiTemp)
15033 {
15034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015035 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015036 VOS_ASSERT(0);
15037 return VOS_STATUS_E_NOMEM;
15038 }
15039 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15040 if(NULL == pWdaParams)
15041 {
15042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015043 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015044 VOS_ASSERT(0);
15045 vos_mem_free(wdiTemp);
15046 return VOS_STATUS_E_NOMEM;
15047 }
15048
15049 wdiTemp->opMode = pData->opMode;
15050 wdiTemp->staId = pData->staId;
15051
15052 pWdaParams->pWdaContext = pWDA;
15053 /* Store Req pointer, as this will be used for response */
15054 pWdaParams->wdaMsgParam = (void *)pData;
15055 /* store Params pass it to WDI */
15056 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15057
15058 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15059
15060 if(IS_WDI_STATUS_FAILURE(status))
15061 {
15062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15063 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15065 vos_mem_free(pWdaParams->wdaMsgParam);
15066 vos_mem_free(pWdaParams);
15067 }
15068 return CONVERT_WDI2VOS_STATUS(status) ;
15069}
15070#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015071
15072/*==========================================================================
15073 FUNCTION WDA_TransportChannelDebug
15074
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015075 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015076 Display Transport Channel debugging information
15077 User may request to display DXE channel snapshot
15078 Or if host driver detects any abnormal stcuk may display
15079
15080 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015081 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015082 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015083 enableStallDetect : Enable stall detect feature
15084 This feature will take effect to data performance
15085 Not integrate till fully verification
15086
15087 RETURN VALUE
15088 NONE
15089
15090===========================================================================*/
15091void WDA_TransportChannelDebug
15092(
schang6295e542013-03-12 15:31:23 -070015093 tpAniSirGlobal pMac,
15094 v_BOOL_t displaySnapshot,
15095 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015096)
15097{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015098 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015099 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015100}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015101
15102/*==========================================================================
15103 FUNCTION WDA_SetEnableSSR
15104
15105 DESCRIPTION
15106 API to enable/disable SSR on WDI timeout
15107
15108 PARAMETERS
15109 enableSSR : enable/disable SSR
15110
15111 RETURN VALUE
15112 NONE
15113
15114===========================================================================*/
15115void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15116{
15117 WDI_SetEnableSSR(enableSSR);
15118}
Leo Chang9056f462013-08-01 19:21:11 -070015119
15120#ifdef FEATURE_WLAN_LPHB
15121/*
15122 * FUNCTION: WDA_LPHBconfRspCallback
15123 *
15124 */
15125void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15126{
15127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15128
15129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15130 "<------ %s " ,__func__);
15131 if (NULL == pWdaParams)
15132 {
15133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15134 "%s: pWdaParams received NULL", __func__);
15135 VOS_ASSERT(0) ;
15136 return ;
15137 }
15138
15139 /* Do not need to send notification to upper layer
15140 * Just free allocated resources */
15141 if (pWdaParams != NULL)
15142 {
15143 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15144 {
15145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15146 }
15147 vos_mem_free(pWdaParams->wdaMsgParam) ;
15148 vos_mem_free(pWdaParams) ;
15149 }
15150
15151 return;
15152}
15153
15154/*
15155 * FUNCTION: WDA_ProcessLPHBConfReq
15156 *
15157 */
15158VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15159 tSirLPHBReq *pData)
15160{
15161 WDI_Status wdiStatus;
15162 tWDA_ReqParams *pWdaParams ;
15163
15164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15165 "------> %s " , __func__);
15166
15167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15168 if (NULL == pWdaParams)
15169 {
15170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15171 "%s: VOS MEM Alloc Failure", __func__);
15172 VOS_ASSERT(0);
15173 vos_mem_free(pData);
15174 return VOS_STATUS_E_NOMEM;
15175 }
15176
15177 pWdaParams->pWdaContext = pWDA;
15178 pWdaParams->wdaMsgParam = (void *)pData;
15179 pWdaParams->wdaWdiApiMsgParam = NULL;
15180
15181 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15182 if (WDI_STATUS_PENDING == wdiStatus)
15183 {
15184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15185 "Pending received for %s:%d ", __func__, __LINE__);
15186 }
15187 else if (WDI_STATUS_SUCCESS != wdiStatus)
15188 {
15189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15190 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15191 vos_mem_free(pWdaParams->wdaMsgParam);
15192 vos_mem_free(pWdaParams);
15193 }
15194
15195 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15196}
15197#endif /* FEATURE_WLAN_LPHB */
15198