blob: 8df25044db86d8ef01b85c90bcdc7aa0077d73b3 [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,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011189 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011190{
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
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011398 if (VOS_IS_STATUS_SUCCESS(status))
11399 {
11400 if (pMac->fEnableDebugLog & 0x1)
11401 {
11402 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11403 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11404 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11405 {
11406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11407 pFc->type, pFc->subType);
11408 }
11409 }
11410 }
11411
11412
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 return status;
11414}
Jeff Johnson295189b2012-06-20 16:38:30 -070011415/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011416 * FUNCTION: WDA_ProcessDHCPStartInd
11417 * Forward DHCP Start to WDI
11418 */
11419static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11420 tAniDHCPInd *dhcpStartInd)
11421{
11422 WDI_Status status;
11423 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11424 if (NULL == wdiDHCPInd)
11425 {
11426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11427 "%s: VOS MEM Alloc Failure", __func__);
11428 VOS_ASSERT(0);
11429 vos_mem_free(dhcpStartInd);
11430 return VOS_STATUS_E_NOMEM;
11431 }
11432
11433 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11434 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11435 sizeof(tSirMacAddr));
11436
11437 status = WDI_dhcpStartInd(wdiDHCPInd);
11438
11439 if (IS_WDI_STATUS_FAILURE(status))
11440 {
11441 vos_mem_free(wdiDHCPInd);
11442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11443 "DHCP Start Indication failed");
11444 }
11445 vos_mem_free(dhcpStartInd);
11446 return CONVERT_WDI2VOS_STATUS(status) ;
11447}
11448
11449 /*
11450 * FUNCTION: WDA_ProcessDHCPStopInd
11451 * Forward DHCP Stop to WDI
11452 */
11453 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11454 tAniDHCPInd *dhcpStopInd)
11455 {
11456 WDI_Status status;
11457 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11458 if (NULL == wdiDHCPInd)
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11461 "%s: VOS MEM Alloc Failure", __func__);
11462 VOS_ASSERT(0);
11463 vos_mem_free(dhcpStopInd);
11464 return VOS_STATUS_E_NOMEM;
11465 }
11466 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11467 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11468 status = WDI_dhcpStopInd(wdiDHCPInd);
11469 if (IS_WDI_STATUS_FAILURE(status))
11470 {
11471 vos_mem_free(wdiDHCPInd);
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11473 "DHCP Start Indication failed");
11474 }
11475 vos_mem_free(dhcpStopInd);
11476 return CONVERT_WDI2VOS_STATUS(status) ;
11477 }
11478
11479/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 * FUNCTION: WDA_McProcessMsg
11481 * Trigger DAL-AL to start CFG download
11482 */
11483VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11484{
11485 VOS_STATUS status = VOS_STATUS_SUCCESS;
11486 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 if(NULL == pMsg)
11488 {
11489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011490 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 VOS_ASSERT(0);
11492 return VOS_STATUS_E_FAILURE;
11493 }
11494
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011496 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011497
11498 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11499 if(NULL == pWDA )
11500 {
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011504 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 return VOS_STATUS_E_FAILURE;
11506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 /* Process all the WDA messages.. */
11508 switch( pMsg->type )
11509 {
11510 case WNI_CFG_DNLD_REQ:
11511 {
11512 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 /* call WDA complete event if config download success */
11514 if( VOS_IS_STATUS_SUCCESS(status) )
11515 {
11516 vos_WDAComplete_cback(pVosContext);
11517 }
11518 else
11519 {
11520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11521 "WDA Config Download failure" );
11522 }
11523 break ;
11524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 /*
11526 * Init SCAN request from PE, convert it into DAL format
11527 * and send it to DAL
11528 */
11529 case WDA_INIT_SCAN_REQ:
11530 {
11531 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11532 break ;
11533 }
11534 /* start SCAN request from PE */
11535 case WDA_START_SCAN_REQ:
11536 {
11537 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11538 break ;
11539 }
11540 /* end SCAN request from PE */
11541 case WDA_END_SCAN_REQ:
11542 {
11543 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11544 break ;
11545 }
11546 /* end SCAN request from PE */
11547 case WDA_FINISH_SCAN_REQ:
11548 {
11549 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11550 break ;
11551 }
11552 /* join request from PE */
11553 case WDA_CHNL_SWITCH_REQ:
11554 {
11555 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11556 {
11557 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11558 }
11559 else
11560 {
11561 WDA_ProcessChannelSwitchReq(pWDA,
11562 (tSwitchChannelParams*)pMsg->bodyptr) ;
11563 }
11564 break ;
11565 }
11566 /* ADD BSS request from PE */
11567 case WDA_ADD_BSS_REQ:
11568 {
11569 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11570 break ;
11571 }
11572 case WDA_ADD_STA_REQ:
11573 {
11574 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11575 break ;
11576 }
11577 case WDA_DELETE_BSS_REQ:
11578 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11580 break ;
11581 }
11582 case WDA_DELETE_STA_REQ:
11583 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11585 break ;
11586 }
11587 case WDA_CONFIG_PARAM_UPDATE_REQ:
11588 {
11589 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11590 break ;
11591 }
11592 case WDA_SET_BSSKEY_REQ:
11593 {
11594 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11595 break ;
11596 }
11597 case WDA_SET_STAKEY_REQ:
11598 {
11599 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11600 break ;
11601 }
11602 case WDA_SET_STA_BCASTKEY_REQ:
11603 {
11604 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11605 break ;
11606 }
11607 case WDA_REMOVE_BSSKEY_REQ:
11608 {
11609 WDA_ProcessRemoveBssKeyReq(pWDA,
11610 (tRemoveBssKeyParams *)pMsg->bodyptr);
11611 break ;
11612 }
11613 case WDA_REMOVE_STAKEY_REQ:
11614 {
11615 WDA_ProcessRemoveStaKeyReq(pWDA,
11616 (tRemoveStaKeyParams *)pMsg->bodyptr);
11617 break ;
11618 }
11619 case WDA_REMOVE_STA_BCASTKEY_REQ:
11620 {
11621 /* TODO: currently UMAC is not sending this request, Add the code for
11622 handling this request when UMAC supports */
11623 break;
11624 }
11625#ifdef FEATURE_WLAN_CCX
11626 case WDA_TSM_STATS_REQ:
11627 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011628 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 break;
11630 }
11631#endif
11632 case WDA_UPDATE_EDCA_PROFILE_IND:
11633 {
11634 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11635 break;
11636 }
11637 case WDA_ADD_TS_REQ:
11638 {
11639 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11640 break;
11641 }
11642 case WDA_DEL_TS_REQ:
11643 {
11644 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11645 break;
11646 }
11647 case WDA_ADDBA_REQ:
11648 {
11649 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11650 break;
11651 }
11652 case WDA_DELBA_IND:
11653 {
11654 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11655 break;
11656 }
11657 case WDA_SET_LINK_STATE:
11658 {
11659 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11660 break;
11661 }
11662 case WDA_GET_STATISTICS_REQ:
11663 {
11664 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11665 break;
11666 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011667#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11668 case WDA_GET_ROAM_RSSI_REQ:
11669 {
11670 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11671 break;
11672 }
11673#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 case WDA_PWR_SAVE_CFG:
11675 {
11676 if(pWDA->wdaState == WDA_READY_STATE)
11677 {
11678 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11679 }
11680 else
11681 {
11682 if(NULL != pMsg->bodyptr)
11683 {
11684 vos_mem_free(pMsg->bodyptr);
11685 }
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11687 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11688 }
11689 break;
11690 }
11691 case WDA_ENTER_IMPS_REQ:
11692 {
11693 if(pWDA->wdaState == WDA_READY_STATE)
11694 {
11695 WDA_ProcessEnterImpsReq(pWDA);
11696 }
11697 else
11698 {
11699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11700 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11701 }
11702 break;
11703 }
11704 case WDA_EXIT_IMPS_REQ:
11705 {
11706 if(pWDA->wdaState == WDA_READY_STATE)
11707 {
11708 WDA_ProcessExitImpsReq(pWDA);
11709 }
11710 else
11711 {
11712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11713 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11714 }
11715 break;
11716 }
11717 case WDA_ENTER_BMPS_REQ:
11718 {
11719 if(pWDA->wdaState == WDA_READY_STATE)
11720 {
11721 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11722 }
11723 else
11724 {
11725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11726 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11727 }
11728 break;
11729 }
11730 case WDA_EXIT_BMPS_REQ:
11731 {
11732 if(pWDA->wdaState == WDA_READY_STATE)
11733 {
11734 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11735 }
11736 else
11737 {
11738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11739 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11740 }
11741 break;
11742 }
11743 case WDA_ENTER_UAPSD_REQ:
11744 {
11745 if(pWDA->wdaState == WDA_READY_STATE)
11746 {
11747 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11748 }
11749 else
11750 {
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11752 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11753 }
11754 break;
11755 }
11756 case WDA_EXIT_UAPSD_REQ:
11757 {
11758 if(pWDA->wdaState == WDA_READY_STATE)
11759 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011760 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 }
11762 else
11763 {
11764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11765 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11766 }
11767 break;
11768 }
11769 case WDA_UPDATE_UAPSD_IND:
11770 {
11771 if(pWDA->wdaState == WDA_READY_STATE)
11772 {
11773 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11774 }
11775 else
11776 {
11777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11778 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11779 }
11780 break;
11781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 case WDA_REGISTER_PE_CALLBACK :
11783 {
11784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11785 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11786 /*TODO: store the PE callback */
11787 /* Do Nothing? MSG Body should be freed at here */
11788 if(NULL != pMsg->bodyptr)
11789 {
11790 vos_mem_free(pMsg->bodyptr);
11791 }
11792 break;
11793 }
11794 case WDA_SYS_READY_IND :
11795 {
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11797 "Handling msg type WDA_SYS_READY_IND " );
11798 pWDA->wdaState = WDA_READY_STATE;
11799 if(NULL != pMsg->bodyptr)
11800 {
11801 vos_mem_free(pMsg->bodyptr);
11802 }
11803 break;
11804 }
11805 case WDA_BEACON_FILTER_IND :
11806 {
11807 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11808 break;
11809 }
11810 case WDA_BTC_SET_CFG:
11811 {
11812 /*TODO: handle this while dealing with BTC */
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11814 "Handling msg type WDA_BTC_SET_CFG " );
11815 /* Do Nothing? MSG Body should be freed at here */
11816 if(NULL != pMsg->bodyptr)
11817 {
11818 vos_mem_free(pMsg->bodyptr);
11819 }
11820 break;
11821 }
11822 case WDA_SIGNAL_BT_EVENT:
11823 {
11824 /*TODO: handle this while dealing with BTC */
11825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11826 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11827 /* Do Nothing? MSG Body should be freed at here */
11828 if(NULL != pMsg->bodyptr)
11829 {
11830 vos_mem_free(pMsg->bodyptr);
11831 }
11832 break;
11833 }
11834 case WDA_CFG_RXP_FILTER_REQ:
11835 {
11836 WDA_ProcessConfigureRxpFilterReq(pWDA,
11837 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11838 break;
11839 }
11840 case WDA_SET_HOST_OFFLOAD:
11841 {
11842 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11843 break;
11844 }
11845 case WDA_SET_KEEP_ALIVE:
11846 {
11847 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11848 break;
11849 }
11850#ifdef WLAN_NS_OFFLOAD
11851 case WDA_SET_NS_OFFLOAD:
11852 {
11853 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11854 break;
11855 }
11856#endif //WLAN_NS_OFFLOAD
11857 case WDA_ADD_STA_SELF_REQ:
11858 {
11859 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11860 break;
11861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 case WDA_DEL_STA_SELF_REQ:
11863 {
11864 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11865 break;
11866 }
11867 case WDA_WOWL_ADD_BCAST_PTRN:
11868 {
11869 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11870 break;
11871 }
11872 case WDA_WOWL_DEL_BCAST_PTRN:
11873 {
11874 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11875 break;
11876 }
11877 case WDA_WOWL_ENTER_REQ:
11878 {
11879 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11880 break;
11881 }
11882 case WDA_WOWL_EXIT_REQ:
11883 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011884 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 break;
11886 }
11887 case WDA_TL_FLUSH_AC_REQ:
11888 {
11889 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11890 break;
11891 }
11892 case WDA_SIGNAL_BTAMP_EVENT:
11893 {
11894 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11895 break;
11896 }
11897#ifdef WDA_UT
11898 case WDA_WDI_EVENT_MSG:
11899 {
11900 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11901 break ;
11902 }
11903#endif
11904 case WDA_UPDATE_BEACON_IND:
11905 {
11906 WDA_ProcessUpdateBeaconParams(pWDA,
11907 (tUpdateBeaconParams *)pMsg->bodyptr);
11908 break;
11909 }
11910 case WDA_SEND_BEACON_REQ:
11911 {
11912 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11913 break;
11914 }
11915 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11916 {
11917 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11918 (tSendProbeRespParams *)pMsg->bodyptr);
11919 break;
11920 }
11921#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11922 case WDA_SET_MAX_TX_POWER_REQ:
11923 {
11924 WDA_ProcessSetMaxTxPowerReq(pWDA,
11925 (tMaxTxPowerParams *)pMsg->bodyptr);
11926 break;
11927 }
11928#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070011929 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
11930 {
11931 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
11932 pMsg->bodyptr);
11933 break;
11934 }
schang86c22c42013-03-13 18:41:24 -070011935 case WDA_SET_TX_POWER_REQ:
11936 {
11937 WDA_ProcessSetTxPowerReq(pWDA,
11938 (tSirSetTxPowerReq *)pMsg->bodyptr);
11939 break;
11940 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 case WDA_SET_P2P_GO_NOA_REQ:
11942 {
11943 WDA_ProcessSetP2PGONOAReq(pWDA,
11944 (tP2pPsParams *)pMsg->bodyptr);
11945 break;
11946 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 /* timer related messages */
11948 case WDA_TIMER_BA_ACTIVITY_REQ:
11949 {
11950 WDA_BaCheckActivity(pWDA) ;
11951 break ;
11952 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011953
11954 /* timer related messages */
11955 case WDA_TIMER_TRAFFIC_STATS_IND:
11956 {
11957 WDA_TimerTrafficStatsInd(pWDA);
11958 break;
11959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011960#ifdef WLAN_FEATURE_VOWIFI_11R
11961 case WDA_AGGR_QOS_REQ:
11962 {
11963 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11964 break;
11965 }
11966#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011967 case WDA_FTM_CMD_REQ:
11968 {
11969 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11970 break ;
11971 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011972#ifdef FEATURE_OEM_DATA_SUPPORT
11973 case WDA_START_OEM_DATA_REQ:
11974 {
11975 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11976 break;
11977 }
11978#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 /* Tx Complete Time out Indication */
11980 case WDA_TX_COMPLETE_TIMEOUT_IND:
11981 {
11982 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11983 break;
11984 }
11985 case WDA_WLAN_SUSPEND_IND:
11986 {
11987 WDA_ProcessWlanSuspendInd(pWDA,
11988 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11989 break;
11990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 case WDA_WLAN_RESUME_REQ:
11992 {
11993 WDA_ProcessWlanResumeReq(pWDA,
11994 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11995 break;
11996 }
11997
11998 case WDA_UPDATE_CF_IND:
11999 {
12000 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12001 pMsg->bodyptr = NULL;
12002 break;
12003 }
12004#ifdef FEATURE_WLAN_SCAN_PNO
12005 case WDA_SET_PNO_REQ:
12006 {
12007 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12008 break;
12009 }
12010 case WDA_UPDATE_SCAN_PARAMS_REQ:
12011 {
12012 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12013 break;
12014 }
12015 case WDA_SET_RSSI_FILTER_REQ:
12016 {
12017 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12018 break;
12019 }
12020#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012021#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012022 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012023 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012024 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012025 break;
12026 }
12027#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 case WDA_SET_TX_PER_TRACKING_REQ:
12029 {
12030 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12031 break;
12032 }
12033
12034#ifdef WLAN_FEATURE_PACKET_FILTERING
12035 case WDA_8023_MULTICAST_LIST_REQ:
12036 {
12037 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12038 break;
12039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12041 {
12042 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12043 break;
12044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12046 {
12047 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12048 break;
12049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12051 {
12052 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12053 break;
12054 }
12055#endif // WLAN_FEATURE_PACKET_FILTERING
12056
12057
12058 case WDA_TRANSMISSION_CONTROL_IND:
12059 {
12060 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12061 break;
12062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012063 case WDA_SET_POWER_PARAMS_REQ:
12064 {
12065 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12066 break;
12067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012068#ifdef WLAN_FEATURE_GTK_OFFLOAD
12069 case WDA_GTK_OFFLOAD_REQ:
12070 {
12071 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12072 break;
12073 }
12074
12075 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12076 {
12077 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12078 break;
12079 }
12080#endif //WLAN_FEATURE_GTK_OFFLOAD
12081
12082 case WDA_SET_TM_LEVEL_REQ:
12083 {
12084 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12085 break;
12086 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012087
Mohit Khanna4a70d262012-09-11 16:30:12 -070012088 case WDA_UPDATE_OP_MODE:
12089 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012090 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12091 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12092 {
12093 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12094 }
12095 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012096 {
12097 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12098 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12099 else
12100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012101 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012102 }
12103 else
12104 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012105 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012106 break;
12107 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012108#ifdef WLAN_FEATURE_11W
12109 case WDA_EXCLUDE_UNENCRYPTED_IND:
12110 {
12111 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12112 break;
12113 }
12114#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012115#ifdef FEATURE_WLAN_TDLS
12116 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12117 {
12118 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12119 break;
12120 }
12121#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012122 case WDA_DHCP_START_IND:
12123 {
12124 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12125 break;
12126 }
12127 case WDA_DHCP_STOP_IND:
12128 {
12129 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12130 break;
12131 }
Leo Chang9056f462013-08-01 19:21:11 -070012132#ifdef FEATURE_WLAN_LPHB
12133 case WDA_LPHB_CONF_REQ:
12134 {
12135 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12136 break;
12137 }
12138#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012139 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12140 {
12141 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12142 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12143 break;
12144 }
12145 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12146 {
12147 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12148 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12149 break;
12150 }
12151
Rajeev79dbe4c2013-10-05 11:03:42 +053012152#ifdef FEATURE_WLAN_BATCH_SCAN
12153 case WDA_SET_BATCH_SCAN_REQ:
12154 {
12155 WDA_ProcessSetBatchScanReq(pWDA,
12156 (tSirSetBatchScanReq *)pMsg->bodyptr);
12157 break;
12158 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012159 case WDA_RATE_UPDATE_IND:
12160 {
12161 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12162 break;
12163 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012164 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12165 {
12166 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12167 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12168 break;
12169 }
12170 case WDA_STOP_BATCH_SCAN_IND:
12171 {
12172 WDA_ProcessStopBatchScanInd(pWDA,
12173 (tSirStopBatchScanInd *)pMsg->bodyptr);
12174 break;
12175 }
12176#endif
12177
Jeff Johnson295189b2012-06-20 16:38:30 -070012178 default:
12179 {
12180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12181 "No Handling for msg type %x in WDA "
12182 ,pMsg->type);
12183 /* Do Nothing? MSG Body should be freed at here */
12184 if(NULL != pMsg->bodyptr)
12185 {
12186 vos_mem_free(pMsg->bodyptr);
12187 }
12188 //WDA_VOS_ASSERT(0) ;
12189 }
12190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 return status ;
12192}
12193
Jeff Johnson295189b2012-06-20 16:38:30 -070012194/*
12195 * FUNCTION: WDA_LowLevelIndCallback
12196 * IND API callback from WDI, send Ind to PE
12197 */
12198void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12199 void* pUserData )
12200{
12201 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12202#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12203 tSirRSSINotification rssiNotification;
12204#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012205 if(NULL == pWDA)
12206 {
12207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012208 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012209 VOS_ASSERT(0);
12210 return ;
12211 }
12212
12213 switch(wdiLowLevelInd->wdiIndicationType)
12214 {
12215 case WDI_RSSI_NOTIFICATION_IND:
12216 {
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12218 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012219#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12220 rssiNotification.bReserved =
12221 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12222 rssiNotification.bRssiThres1NegCross =
12223 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12224 rssiNotification.bRssiThres1PosCross =
12225 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12226 rssiNotification.bRssiThres2NegCross =
12227 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12228 rssiNotification.bRssiThres2PosCross =
12229 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12230 rssiNotification.bRssiThres3NegCross =
12231 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12232 rssiNotification.bRssiThres3PosCross =
12233 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012234 rssiNotification.avgRssi = (v_S7_t)
12235 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 WLANTL_BMPSRSSIRegionChangedNotification(
12237 pWDA->pVosContext,
12238 &rssiNotification);
12239#endif
12240 break ;
12241 }
12242 case WDI_MISSED_BEACON_IND:
12243 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012244 tpSirSmeMissedBeaconInd pMissBeacInd =
12245 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12247 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012249 if(NULL == pMissBeacInd)
12250 {
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12252 "%s: VOS MEM Alloc Failure", __func__);
12253 break;
12254 }
12255 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12256 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12257 pMissBeacInd->bssIdx =
12258 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12259 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 break ;
12261 }
12262 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12263 {
12264 /* TODO: Decode Ind and send Ind to PE */
12265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12266 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12267 break ;
12268 }
12269
12270 case WDI_MIC_FAILURE_IND:
12271 {
12272 tpSirSmeMicFailureInd pMicInd =
12273 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12274
12275 if(NULL == pMicInd)
12276 {
12277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012279 break;
12280 }
12281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12282 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12284 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12285 vos_mem_copy(pMicInd->bssId,
12286 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12287 sizeof(tSirMacAddr));
12288 vos_mem_copy(pMicInd->info.srcMacAddr,
12289 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12290 sizeof(tSirMacAddr));
12291 vos_mem_copy(pMicInd->info.taMacAddr,
12292 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12293 sizeof(tSirMacAddr));
12294 vos_mem_copy(pMicInd->info.dstMacAddr,
12295 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12296 sizeof(tSirMacAddr));
12297 vos_mem_copy(pMicInd->info.rxMacAddr,
12298 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12299 sizeof(tSirMacAddr));
12300 pMicInd->info.multicast =
12301 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12302 pMicInd->info.keyId=
12303 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12304 pMicInd->info.IV1=
12305 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12306 vos_mem_copy(pMicInd->info.TSC,
12307 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012308 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12309 (void *)pMicInd , 0) ;
12310 break ;
12311 }
12312 case WDI_FATAL_ERROR_IND:
12313 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012314 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 /* TODO: Decode Ind and send Ind to PE */
12316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12317 "Received WDI_FATAL_ERROR_IND from WDI ");
12318 break ;
12319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 case WDI_DEL_STA_IND:
12321 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012322 tpDeleteStaContext pDelSTACtx =
12323 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12324
12325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12326 "Received WDI_DEL_STA_IND from WDI ");
12327 if(NULL == pDelSTACtx)
12328 {
12329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012331 break;
12332 }
12333 vos_mem_copy(pDelSTACtx->addr2,
12334 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12335 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 vos_mem_copy(pDelSTACtx->bssId,
12337 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12338 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 pDelSTACtx->assocId =
12340 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12341 pDelSTACtx->reasonCode =
12342 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12343 pDelSTACtx->staId =
12344 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12346 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 break ;
12348 }
12349 case WDI_COEX_IND:
12350 {
12351 tANI_U32 index;
12352 vos_msg_t vosMsg;
12353 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12354 if(NULL == pSmeCoexInd)
12355 {
12356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012357 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 break;
12359 }
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12361 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012362 /* Message Header */
12363 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12364 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012365 /* Info from WDI Indication */
12366 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12367 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12368 {
12369 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 /* VOS message wrapper */
12372 vosMsg.type = eWNI_SME_COEX_IND;
12373 vosMsg.bodyptr = (void *)pSmeCoexInd;
12374 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 /* Send message to SME */
12376 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12377 {
12378 /* free the mem and return */
12379 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12380 }
12381 else
12382 {
12383 /* DEBUG */
12384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12385 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12386 pSmeCoexInd->coexIndType,
12387 pSmeCoexInd->coexIndData[0],
12388 pSmeCoexInd->coexIndData[1],
12389 pSmeCoexInd->coexIndData[2],
12390 pSmeCoexInd->coexIndData[3]);
12391 }
12392 break;
12393 }
12394 case WDI_TX_COMPLETE_IND:
12395 {
12396 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12397 /* Calling TxCompleteAck Indication from wda context*/
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12399 "Complete Indication received from HAL");
12400 if( pWDA->pAckTxCbFunc )
12401 {
12402 if( VOS_STATUS_SUCCESS !=
12403 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12404 {
12405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12406 "Tx Complete timeout Timer Stop Failed ");
12407 }
12408 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12409 pWDA->pAckTxCbFunc = NULL;
12410 }
12411 else
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12414 "Tx Complete Indication is received after timeout ");
12415 }
12416 break;
12417 }
Viral Modid86bde22012-12-10 13:09:21 -080012418 case WDI_P2P_NOA_START_IND :
12419 {
12420 tSirP2PNoaStart *pP2pNoaStart =
12421 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12422
12423 if (NULL == pP2pNoaStart)
12424 {
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12426 "Memory allocation failure, "
12427 "WDI_P2P_NOA_START_IND not forwarded");
12428 break;
12429 }
12430 pP2pNoaStart->status =
12431 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12432 pP2pNoaStart->bssIdx =
12433 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12434 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12435 (void *)pP2pNoaStart , 0) ;
12436 break;
12437 }
12438
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012439#ifdef FEATURE_WLAN_TDLS
12440 case WDI_TDLS_IND :
12441 {
12442 tSirTdlsInd *pTdlsInd =
12443 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12444
12445 if (NULL == pTdlsInd)
12446 {
12447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12448 "Memory allocation failure, "
12449 "WDI_TDLS_IND not forwarded");
12450 break;
12451 }
12452 pTdlsInd->status =
12453 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12454 pTdlsInd->assocId =
12455 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12456 pTdlsInd->staIdx =
12457 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12458 pTdlsInd->reasonCode =
12459 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12460 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12461 (void *)pTdlsInd , 0) ;
12462 break;
12463 }
12464#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 case WDI_P2P_NOA_ATTR_IND :
12466 {
12467 tSirP2PNoaAttr *pP2pNoaAttr =
12468 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12470 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 if (NULL == pP2pNoaAttr)
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "Memory allocation failure, "
12475 "WDI_P2P_NOA_ATTR_IND not forwarded");
12476 break;
12477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 pP2pNoaAttr->index =
12479 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12480 pP2pNoaAttr->oppPsFlag =
12481 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12482 pP2pNoaAttr->ctWin =
12483 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12484
12485 pP2pNoaAttr->uNoa1IntervalCnt =
12486 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12487 pP2pNoaAttr->uNoa1Duration =
12488 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12489 pP2pNoaAttr->uNoa1Interval =
12490 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12491 pP2pNoaAttr->uNoa1StartTime =
12492 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012493 pP2pNoaAttr->uNoa2IntervalCnt =
12494 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12495 pP2pNoaAttr->uNoa2Duration =
12496 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12497 pP2pNoaAttr->uNoa2Interval =
12498 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12499 pP2pNoaAttr->uNoa2StartTime =
12500 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12502 (void *)pP2pNoaAttr , 0) ;
12503 break;
12504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012505#ifdef FEATURE_WLAN_SCAN_PNO
12506 case WDI_PREF_NETWORK_FOUND_IND:
12507 {
12508 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012509 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12510 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12511 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12512 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12513
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12515 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 if (NULL == pPrefNetworkFoundInd)
12517 {
12518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12519 "Memory allocation failure, "
12520 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012521 if (NULL !=
12522 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12523 {
12524 wpalMemoryFree(
12525 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12526 );
12527 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012529 break;
12530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012531 /* Message Header */
12532 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012533 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012534
12535 /* Info from WDI Indication */
12536 pPrefNetworkFoundInd->ssId.length =
12537 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012539 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12540 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12541 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012542 if (NULL !=
12543 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12544 {
12545 pPrefNetworkFoundInd->frameLength =
12546 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12547 vos_mem_copy( pPrefNetworkFoundInd->data,
12548 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12549 pPrefNetworkFoundInd->frameLength);
12550 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12551 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12552 }
12553 else
12554 {
12555 pPrefNetworkFoundInd->frameLength = 0;
12556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012557 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012558 /* VOS message wrapper */
12559 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12560 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12561 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 /* Send message to SME */
12563 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12564 {
12565 /* free the mem and return */
12566 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012568 break;
12569 }
12570#endif // FEATURE_WLAN_SCAN_PNO
12571
12572#ifdef WLAN_WAKEUP_EVENTS
12573 case WDI_WAKE_REASON_IND:
12574 {
12575 vos_msg_t vosMsg;
12576 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12577 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12578 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12579
12580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12581 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12582 wdiLowLevelInd->wdiIndicationType,
12583 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12584 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12585 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12586
12587 if (NULL == pWakeReasonInd)
12588 {
12589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12590 "Memory allocation failure, "
12591 "WDI_WAKE_REASON_IND not forwarded");
12592 break;
12593 }
12594
12595 vos_mem_zero(pWakeReasonInd, allocSize);
12596
12597 /* Message Header */
12598 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12599 pWakeReasonInd->mesgLen = allocSize;
12600
12601 /* Info from WDI Indication */
12602 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12603 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12604 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12605 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12606 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12607 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12608 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12609 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12610
12611 /* VOS message wrapper */
12612 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12613 vosMsg.bodyptr = (void *) pWakeReasonInd;
12614 vosMsg.bodyval = 0;
12615
12616 /* Send message to SME */
12617 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12618 {
12619 /* free the mem and return */
12620 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12621 }
12622
12623 break;
12624 }
12625#endif // WLAN_WAKEUP_EVENTS
12626
12627 case WDI_TX_PER_HIT_IND:
12628 {
12629 vos_msg_t vosMsg;
12630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12631 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12632 /* VOS message wrapper */
12633 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12634 vosMsg.bodyptr = NULL;
12635 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 /* Send message to SME */
12637 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12638 {
12639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12640 }
12641 break;
12642 }
12643
Leo Chang9056f462013-08-01 19:21:11 -070012644#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012645 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012646 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012647 vos_msg_t vosMsg;
12648 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012649
Leo Changd9df8aa2013-09-26 13:32:26 -070012650 lphbInd =
12651 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12652 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012653 {
12654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12655 "%s: LPHB IND buffer alloc Fail", __func__);
12656 return ;
12657 }
12658
Leo Changd9df8aa2013-09-26 13:32:26 -070012659 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012660 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012661 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012662 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012663 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012664 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12665
12666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012667 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012668 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12669
Leo Changd9df8aa2013-09-26 13:32:26 -070012670 vosMsg.type = eWNI_SME_LPHB_IND;
12671 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012672 vosMsg.bodyval = 0;
12673 /* Send message to SME */
12674 if (VOS_STATUS_SUCCESS !=
12675 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12676 {
12677 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12678 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012679 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012680 }
12681 break;
12682 }
12683#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012684 case WDI_PERIODIC_TX_PTRN_FW_IND:
12685 {
12686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12687 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12688 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12689 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12690 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12691 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12692 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12693
12694 break;
12695 }
Leo Chang9056f462013-08-01 19:21:11 -070012696
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012697 case WDI_IBSS_PEER_INACTIVITY_IND:
12698 {
12699 tSirIbssPeerInactivityInd *pIbssInd =
12700 (tSirIbssPeerInactivityInd *)
12701 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12702
12703 if (NULL == pIbssInd)
12704 {
12705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12706 "Memory allocation failure, "
12707 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12708 break;
12709 }
12710
12711 pIbssInd->bssIdx =
12712 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12713 pIbssInd->staIdx =
12714 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12715 vos_mem_copy(pIbssInd->peerAddr,
12716 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12717 sizeof(tSirMacAddr));
12718 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12719 break;
12720 }
12721
Rajeev79dbe4c2013-10-05 11:03:42 +053012722#ifdef FEATURE_WLAN_BATCH_SCAN
12723 case WDI_BATCH_SCAN_RESULT_IND:
12724 {
12725 void *pBatchScanResult;
12726 void *pCallbackContext;
12727 tpAniSirGlobal pMac;
12728
12729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12730 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12731
12732 /*sanity check*/
12733 if(NULL == pWDA)
12734 {
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12736 "%s:pWDA is NULL", __func__);
12737 VOS_ASSERT(0);
12738 return;
12739 }
12740
12741 pBatchScanResult =
12742 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12743 if (NULL == pBatchScanResult)
12744 {
12745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12746 "%s:Batch scan result from FW is null can't invoke HDD callback",
12747 __func__);
12748 VOS_ASSERT(0);
12749 return;
12750 }
12751
12752 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12753 if (NULL == pMac)
12754 {
12755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12756 "%s:pMac is NULL", __func__);
12757 VOS_ASSERT(0);
12758 return;
12759 }
12760
12761 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12762 /*call hdd callback with set batch scan response data*/
12763 if(pMac->pmc.batchScanResultCallback)
12764 {
12765 pMac->pmc.batchScanResultCallback(pCallbackContext,
12766 pBatchScanResult);
12767 }
12768 else
12769 {
12770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12771 "%s:HDD callback is null", __func__);
12772 VOS_ASSERT(0);
12773 }
12774 break;
12775 }
12776#endif
12777
Leo Chang0b0e45a2013-12-15 15:18:55 -080012778#ifdef FEATURE_WLAN_CH_AVOID
12779 case WDI_CH_AVOID_IND:
12780 {
12781 vos_msg_t vosMsg;
12782 tSirChAvoidIndType *chAvoidInd;
12783
12784 chAvoidInd =
12785 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
12786 if (NULL == chAvoidInd)
12787 {
12788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12789 "%s: CH_AVOID IND buffer alloc Fail", __func__);
12790 return ;
12791 }
12792
12793 chAvoidInd->avoidRangeCount =
12794 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
12795 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
12796 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
12797 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
12798
12799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12800 "%s : WDA CH avoid notification", __func__);
12801
12802 vosMsg.type = eWNI_SME_CH_AVOID_IND;
12803 vosMsg.bodyptr = chAvoidInd;
12804 vosMsg.bodyval = 0;
12805 /* Send message to SME */
12806 if (VOS_STATUS_SUCCESS !=
12807 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12808 {
12809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12810 "post eWNI_SME_CH_AVOID_IND to SME Failed");
12811 vos_mem_free(chAvoidInd);
12812 }
12813 break;
12814 }
12815#endif /* FEATURE_WLAN_CH_AVOID */
12816
Jeff Johnson295189b2012-06-20 16:38:30 -070012817 default:
12818 {
12819 /* TODO error */
12820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12821 "Received UNKNOWN Indication from WDI ");
12822 }
12823 }
12824 return ;
12825}
12826
Jeff Johnson295189b2012-06-20 16:38:30 -070012827/*
12828 * BA related processing in WDA.
12829 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012830void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12831 void* pUserData)
12832{
12833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12834 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012835 if(NULL == pWdaParams)
12836 {
12837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012839 VOS_ASSERT(0) ;
12840 return ;
12841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012842 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012843 vos_mem_free(pWdaParams->wdaMsgParam) ;
12844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12845 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12849 {
12850 tANI_U8 i = 0 ;
12851 tBaActivityInd *baActivityInd = NULL ;
12852 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12853 tANI_U8 allocSize = sizeof(tBaActivityInd)
12854 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12855 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12856 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012857 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 if(NULL == baActivityInd)
12859 {
12860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 VOS_ASSERT(0) ;
12863 return;
12864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012865 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12866 sizeof(tSirMacAddr)) ;
12867 baActivityInd->baCandidateCnt = baCandidateCount ;
12868
12869 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12870 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12871
12872 for(i = 0 ; i < baCandidateCount ; i++)
12873 {
12874 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12876 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012877 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12878 {
12879 baCandidate->baInfo[tid].fBaEnable =
12880 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12881 baCandidate->baInfo[tid].startingSeqNum =
12882 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12883 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012884 wdiBaCandidate++ ;
12885 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012887 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12888 }
12889 else
12890 {
12891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12892 "BA Trigger RSP with Failure received ");
12893 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012894 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012895}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012896
12897
12898/*
12899 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12900 * during MCC
12901 */
12902void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12903{
12904 wpt_uint32 enabled;
12905 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12906 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12907 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12908
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012909 if (NULL == pMac )
12910 {
12911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12912 "%s: Invoked with invalid MAC context ", __func__ );
12913 VOS_ASSERT(0);
12914 return;
12915 }
12916
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012917 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12918 != eSIR_SUCCESS)
12919 {
12920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12921 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12922 return;
12923 }
12924
12925 if(!enabled)
12926 {
12927 return;
12928 }
12929
12930 if(NULL == pWDA)
12931 {
12932 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12933 "%s:WDA context is NULL", __func__);
12934 VOS_ASSERT(0);
12935 return;
12936 }
12937
12938 if(activate)
12939 {
12940 if( VOS_STATUS_SUCCESS !=
12941 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12942 {
12943 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12944 "Traffic Stats Timer Start Failed ");
12945 return;
12946 }
12947 WDI_DS_ActivateTrafficStats();
12948 }
12949 else
12950 {
12951 WDI_DS_DeactivateTrafficStats();
12952 WDI_DS_ClearTrafficStats();
12953
12954 if( VOS_STATUS_SUCCESS !=
12955 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12956 {
12957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12958 "Traffic Stats Timer Stop Failed ");
12959 return;
12960 }
12961 }
12962}
12963
12964/*
12965 * Traffic Stats Timer handler
12966 */
12967void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12968{
12969 WDI_Status wdiStatus;
12970 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12971 WDI_TrafficStatsIndType trafficStatsIndParams;
12972 wpt_uint32 length, enabled;
12973 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12974
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012975 if (NULL == pMac )
12976 {
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12978 "%s: Invoked with invalid MAC context ", __func__ );
12979 VOS_ASSERT(0);
12980 return;
12981 }
12982
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012983 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12984 != eSIR_SUCCESS)
12985 {
12986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12987 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12988 return;
12989 }
12990
12991 if(!enabled)
12992 {
12993 WDI_DS_DeactivateTrafficStats();
12994 return;
12995 }
12996
12997 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12998
12999 if(pWdiTrafficStats != NULL)
13000 {
13001 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13002 trafficStatsIndParams.length = length;
13003 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013004 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013005 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13006 trafficStatsIndParams.pUserData = pWDA;
13007
13008 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13009
13010 if(WDI_STATUS_PENDING == wdiStatus)
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13013 "Pending received for %s:%d ",__func__,__LINE__ );
13014 }
13015 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13016 {
13017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13018 "Failure in %s:%d ",__func__,__LINE__ );
13019 }
13020
13021 WDI_DS_ClearTrafficStats();
13022 }
13023 else
13024 {
13025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13026 "pWdiTrafficStats is Null");
13027 }
13028
13029 if( VOS_STATUS_SUCCESS !=
13030 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13031 {
13032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13033 "Traffic Stats Timer Start Failed ");
13034 return;
13035 }
13036}
13037
Jeff Johnson295189b2012-06-20 16:38:30 -070013038/*
13039 * BA Activity check timer handler
13040 */
13041void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13042{
13043 tANI_U8 curSta = 0 ;
13044 tANI_U8 tid = 0 ;
13045 tANI_U8 size = 0 ;
13046 tANI_U8 baCandidateCount = 0 ;
13047 tANI_U8 newBaCandidate = 0 ;
13048 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13049
13050 if(NULL == pWDA)
13051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013053 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 VOS_ASSERT(0);
13055 return ;
13056 }
13057 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13058 {
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13060 "Inconsistent STA entries in WDA");
13061 VOS_ASSERT(0) ;
13062 }
13063 /* walk through all STA entries and find out TX packet count */
13064 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13065 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013066#ifdef WLAN_SOFTAP_VSTA_FEATURE
13067 // We can only do BA on "hard" STAs.
13068 if (!(IS_HWSTA_IDX(curSta)))
13069 {
13070 continue;
13071 }
13072#endif //WLAN_SOFTAP_VSTA_FEATURE
13073 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13074 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013075 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013076 tANI_U32 txPktCount = 0 ;
13077 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013078 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013079 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13080 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13082 curSta, tid, &txPktCount)))
13083 {
13084#if 0
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13086 "************* %d:%d, %d ",curSta, txPktCount,
13087 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13088#endif
13089 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013090 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013091 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13092 curSta, tid)))
13093 {
13094 /* get prepare for sending message to HAL */
13095 //baCandidate[baCandidateCount].staIdx = curSta ;
13096 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13097 newBaCandidate = WDA_ENABLE_BA ;
13098 }
13099 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13100 }
13101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013102 /* fill the entry for all the sta with given TID's */
13103 if(WDA_ENABLE_BA == newBaCandidate)
13104 {
13105 /* move to next BA candidate */
13106 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13107 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13108 baCandidateCount++ ;
13109 newBaCandidate = WDA_DISABLE_BA ;
13110 }
13111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013112 /* prepare and send message to hal */
13113 if( 0 < baCandidateCount)
13114 {
13115 WDI_Status status = WDI_STATUS_SUCCESS ;
13116 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13117 tWDA_ReqParams *pWdaParams =
13118 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 if(NULL == pWdaParams)
13120 {
13121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 VOS_ASSERT(0) ;
13124 return;
13125 }
13126 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13127 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13128 if(NULL == wdiTriggerBaReq)
13129 {
13130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013132 VOS_ASSERT(0) ;
13133 vos_mem_free(pWdaParams);
13134 return;
13135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 do
13137 {
13138 WDI_TriggerBAReqinfoType *triggerBaInfo =
13139 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13140 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13141 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13142 * for each request */
13143 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13144 triggerBaInfo->ucBASessionID = 0;
13145 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13146 } while(0) ;
13147 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013149 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 pWdaParams->pWdaContext = pWDA;
13151 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13152 pWdaParams->wdaMsgParam = NULL;
13153 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13154 WDA_TriggerBaReqCallback, pWdaParams) ;
13155 if(IS_WDI_STATUS_FAILURE(status))
13156 {
13157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13158 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13159 vos_mem_free(pWdaParams->wdaMsgParam) ;
13160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13161 vos_mem_free(pWdaParams) ;
13162 }
13163 }
13164 else
13165 {
13166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13167 "There is no TID for initiating BA");
13168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 if( VOS_STATUS_SUCCESS !=
13170 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13171 {
13172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13173 "BA Activity Timer Stop Failed ");
13174 return ;
13175 }
13176 if( VOS_STATUS_SUCCESS !=
13177 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13178 {
13179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13180 "BA Activity Timer Start Failed ");
13181 return;
13182 }
13183 return ;
13184}
Jeff Johnson295189b2012-06-20 16:38:30 -070013185/*
13186 * WDA common routine to create timer used by WDA.
13187 */
13188static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13189{
Jeff Johnson295189b2012-06-20 16:38:30 -070013190 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13191 tANI_U32 val = 0 ;
13192 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13193
13194 if(NULL == pMac)
13195 {
13196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013197 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 VOS_ASSERT(0);
13199 return VOS_STATUS_E_FAILURE;
13200 }
13201 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13202 != eSIR_SUCCESS)
13203 {
13204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13205 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13206 return VOS_STATUS_E_FAILURE;
13207 }
13208 val = SYS_MS_TO_TICKS(val) ;
13209
13210 /* BA activity check timer */
13211 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13212 "BA Activity Check timer", WDA_TimerHandler,
13213 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13214 if(status != TX_SUCCESS)
13215 {
13216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13217 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013218 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 /* Tx Complete Timeout timer */
13222 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13223 "Tx Complete Check timer", WDA_TimerHandler,
13224 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013225 if(status != TX_SUCCESS)
13226 {
13227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13228 "Unable to create Tx Complete Timeout timer");
13229 /* Destroy timer of BA activity check timer */
13230 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13231 if(status != TX_SUCCESS)
13232 {
13233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13234 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013235 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013237 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013239
13240 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13241
13242 /* Traffic Stats timer */
13243 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13244 "Traffic Stats timer", WDA_TimerHandler,
13245 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13246 if(status != TX_SUCCESS)
13247 {
13248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13249 "Unable to create traffic stats timer");
13250 /* Destroy timer of BA activity check timer */
13251 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13252 if(status != TX_SUCCESS)
13253 {
13254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13255 "Unable to Destroy BA activity timer");
13256 }
13257 /* Destroy timer of tx complete timer */
13258 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13259 if(status != TX_SUCCESS)
13260 {
13261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13262 "Unable to Tx complete timer");
13263 }
13264 return VOS_STATUS_E_FAILURE ;
13265 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013266 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013267}
Jeff Johnson295189b2012-06-20 16:38:30 -070013268/*
13269 * WDA common routine to destroy timer used by WDA.
13270 */
13271static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13272{
13273 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13275 if(status != TX_SUCCESS)
13276 {
13277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13278 "Unable to Destroy Tx Complete Timeout timer");
13279 return eSIR_FAILURE ;
13280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013281 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13282 if(status != TX_SUCCESS)
13283 {
13284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13285 "Unable to Destroy BA activity timer");
13286 return eSIR_FAILURE ;
13287 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013288 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13289 if(status != TX_SUCCESS)
13290 {
13291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13292 "Unable to Destroy traffic stats timer");
13293 return eSIR_FAILURE ;
13294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 return eSIR_SUCCESS ;
13296}
Jeff Johnson295189b2012-06-20 16:38:30 -070013297/*
13298 * WDA timer handler.
13299 */
13300void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13301{
13302 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13303 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 /*
13305 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13306 */
13307 wdaMsg.type = timerInfo ;
13308 wdaMsg.bodyptr = NULL;
13309 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 /* post the message.. */
13311 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13312 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13313 {
13314 vosStatus = VOS_STATUS_E_BADMSG;
13315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013316}
Jeff Johnson295189b2012-06-20 16:38:30 -070013317/*
13318 * WDA Tx Complete timeout Indication.
13319 */
13320void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13321{
13322 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 if( pWDA->pAckTxCbFunc )
13324 {
13325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013326 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 pWDA->pAckTxCbFunc( pMac, 0);
13328 pWDA->pAckTxCbFunc = NULL;
13329 }
13330 else
13331 {
13332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013333 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013335}
Jeff Johnson295189b2012-06-20 16:38:30 -070013336/*
13337 * WDA Set REG Domain to VOS NV
13338 */
Abhishek Singha306a442013-11-07 18:39:01 +053013339eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13340 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013341{
Abhishek Singha306a442013-11-07 18:39:01 +053013342 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 {
13344 return eHAL_STATUS_INVALID_PARAMETER;
13345 }
13346 return eHAL_STATUS_SUCCESS;
13347}
Jeff Johnson295189b2012-06-20 16:38:30 -070013348
Jeff Johnson295189b2012-06-20 16:38:30 -070013349#ifdef FEATURE_WLAN_SCAN_PNO
13350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013351 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 *
13353 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013354void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013355{
13356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013358 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013359 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 {
13361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013363 VOS_ASSERT(0) ;
13364 return ;
13365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013366
Yue Ma7f44bbe2013-04-12 11:47:39 -070013367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13368 vos_mem_free(pWdaParams->wdaMsgParam);
13369 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013370
13371 return ;
13372}
Jeff Johnson295189b2012-06-20 16:38:30 -070013373/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013374 * FUNCTION: WDA_PNOScanReqCallback
13375 * Free memory.
13376 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13377 */
13378void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013379{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13381
13382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13383 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13384
13385 if(NULL == pWdaParams)
13386 {
13387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13388 "%s: pWdaParams received NULL", __func__);
13389 VOS_ASSERT(0);
13390 return;
13391 }
13392
13393 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13394 {
13395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13396 vos_mem_free(pWdaParams->wdaMsgParam);
13397 vos_mem_free(pWdaParams);
13398 }
13399
13400 return;
13401}
13402/*
13403 * FUNCTION: WDA_UpdateScanParamsRespCallback
13404 *
13405 */
13406void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13407{
13408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013410 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013411 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013412 {
13413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013414 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013415 VOS_ASSERT(0) ;
13416 return ;
13417 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013418
13419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13420 vos_mem_free(pWdaParams->wdaMsgParam);
13421 vos_mem_free(pWdaParams);
13422
Jeff Johnson295189b2012-06-20 16:38:30 -070013423 return ;
13424}
Jeff Johnson295189b2012-06-20 16:38:30 -070013425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013426 * FUNCTION: WDA_UpdateScanParamsReqCallback
13427 * Free memory.
13428 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13429 */
13430void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13431{
13432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13433
13434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13435 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13436
13437 if(NULL == pWdaParams)
13438 {
13439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13440 "%s: pWdaParams received NULL", __func__);
13441 VOS_ASSERT(0);
13442 return;
13443 }
13444
13445 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13446 {
13447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13448 vos_mem_free(pWdaParams->wdaMsgParam);
13449 vos_mem_free(pWdaParams);
13450 }
13451
13452 return;
13453}
13454/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13456 * Request to WDI to set Preferred Network List.Offload
13457 */
13458VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13459 tSirPNOScanReq *pPNOScanReqParams)
13460{
Jeff Johnson43971f52012-07-17 12:26:56 -070013461 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13463 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13464 tWDA_ReqParams *pWdaParams ;
13465 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 if(NULL == pwdiPNOScanReqInfo)
13469 {
13470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013472 VOS_ASSERT(0);
13473 return VOS_STATUS_E_NOMEM;
13474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13476 if(NULL == pWdaParams)
13477 {
13478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 VOS_ASSERT(0);
13481 vos_mem_free(pwdiPNOScanReqInfo);
13482 return VOS_STATUS_E_NOMEM;
13483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 //
13485 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13486 //
13487 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13488 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013489 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13490 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13491 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13493 {
13494 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13495 &pPNOScanReqParams->aNetworks[i],
13496 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013498 /*Scan timer intervals*/
13499 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13500 &pPNOScanReqParams->scanTimers,
13501 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013502 /*Probe template for 2.4GHz band*/
13503 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13504 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13505 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13507 pPNOScanReqParams->p24GProbeTemplate,
13508 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 /*Probe template for 5GHz band*/
13510 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13511 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13512 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013513 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13514 pPNOScanReqParams->p5GProbeTemplate,
13515 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013516 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13517 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013518
Jeff Johnson295189b2012-06-20 16:38:30 -070013519 /* Store Params pass it to WDI */
13520 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13521 pWdaParams->pWdaContext = pWDA;
13522 /* Store param pointer as passed in by caller */
13523 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013525 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 if(IS_WDI_STATUS_FAILURE(status))
13527 {
13528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13529 "Failure in Set PNO REQ WDI API, free all the memory " );
13530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13531 vos_mem_free(pWdaParams->wdaMsgParam);
13532 pWdaParams->wdaWdiApiMsgParam = NULL;
13533 pWdaParams->wdaMsgParam = NULL;
13534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013535 return CONVERT_WDI2VOS_STATUS(status) ;
13536}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013537
13538#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13539
13540void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13541{
13542 /*Convert the CSR Auth types to WDI Auth types */
13543 switch (csrAuthType)
13544 {
13545 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13546 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13547 break;
13548#ifdef FEATURE_WLAN_CCX
13549 case eCSR_AUTH_TYPE_CCKM_WPA:
13550 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13551 break;
13552#endif
13553 case eCSR_AUTH_TYPE_WPA:
13554 *AuthType = eWDA_AUTH_TYPE_WPA;
13555 break;
13556 case eCSR_AUTH_TYPE_WPA_PSK:
13557 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13558 break;
13559#ifdef FEATURE_WLAN_CCX
13560 case eCSR_AUTH_TYPE_CCKM_RSN:
13561 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13562 break;
13563#endif
13564 case eCSR_AUTH_TYPE_RSN:
13565 *AuthType = eWDA_AUTH_TYPE_RSN;
13566 break;
13567 case eCSR_AUTH_TYPE_RSN_PSK:
13568 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13569 break;
13570#if defined WLAN_FEATURE_VOWIFI_11R
13571 case eCSR_AUTH_TYPE_FT_RSN:
13572 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13573 break;
13574 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13575 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13576 break;
13577#endif
13578#ifdef FEATURE_WLAN_WAPI
13579 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13580 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13581 break;
13582 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13583 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13584 break;
13585#endif /* FEATURE_WLAN_WAPI */
13586 case eCSR_AUTH_TYPE_SHARED_KEY:
13587 case eCSR_AUTH_TYPE_AUTOSWITCH:
13588 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13589 break;
13590#if 0
13591 case eCSR_AUTH_TYPE_SHARED_KEY:
13592 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13593 break;
13594 case eCSR_AUTH_TYPE_AUTOSWITCH:
13595 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13596#endif
13597 default:
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13599 "%s: Unknown Auth Type", __func__);
13600 break;
13601 }
13602}
13603void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13604{
13605 switch (csrEncrType)
13606 {
13607 case eCSR_ENCRYPT_TYPE_NONE:
13608 *EncrType = WDI_ED_NONE;
13609 break;
13610 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13611 case eCSR_ENCRYPT_TYPE_WEP40:
13612 *EncrType = WDI_ED_WEP40;
13613 break;
13614 case eCSR_ENCRYPT_TYPE_WEP104:
13615 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13616 *EncrType = WDI_ED_WEP104;
13617 break;
13618 case eCSR_ENCRYPT_TYPE_TKIP:
13619 *EncrType = WDI_ED_TKIP;
13620 break;
13621 case eCSR_ENCRYPT_TYPE_AES:
13622 *EncrType = WDI_ED_CCMP;
13623 break;
13624#ifdef WLAN_FEATURE_11W
13625 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13626 *EncrType = WDI_ED_AES_128_CMAC;
13627 break;
13628#endif
13629#ifdef FEATURE_WLAN_WAPI
13630 case eCSR_ENCRYPT_TYPE_WPI:
13631 *EncrType = WDI_ED_WPI;
13632 break;
13633#endif
13634 case eCSR_ENCRYPT_TYPE_ANY:
13635 *EncrType = WDI_ED_ANY;
13636 break;
13637
13638 default:
13639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13640 "%s: Unknown Encryption Type", __func__);
13641 break;
13642 }
13643}
13644
13645/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013646 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013647 * Request to WDI to set Roam Offload Scan
13648 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013649VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013650 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13651{
13652 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013653 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13654 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013655 tWDA_ReqParams *pWdaParams ;
13656 v_U8_t csrAuthType;
13657 WDI_RoamNetworkType *pwdiRoamNetworkType;
13658 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13660 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013661 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013662 {
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13664 "%s: VOS MEM Alloc Failure", __func__);
13665 VOS_ASSERT(0);
13666 return VOS_STATUS_E_NOMEM;
13667 }
13668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13669 if (NULL == pWdaParams)
13670 {
13671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13672 "%s: VOS MEM Alloc Failure", __func__);
13673 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013674 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013675 return VOS_STATUS_E_NOMEM;
13676 }
13677
13678 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013679 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013680 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013681 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13682 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013683 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13684 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13685 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13686 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13687 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13688 sizeof(pwdiRoamNetworkType->currAPbssid));
13689 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13690 csrAuthType);
13691 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13692 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13693 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13694 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13695 pwdiRoamOffloadScanInfo->LookupThreshold =
13696 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080013697 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
13698 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013699 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13700 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013701 pwdiRoamOffloadScanInfo->MAWCEnabled =
13702 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013703 pwdiRoamOffloadScanInfo->Command =
13704 pRoamOffloadScanReqParams->Command ;
13705 pwdiRoamOffloadScanInfo->StartScanReason =
13706 pRoamOffloadScanReqParams->StartScanReason ;
13707 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13708 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13709 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13710 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13711 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13712 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13713 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13714 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13715 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13716 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13717 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13718 pRoamOffloadScanReqParams->IsCCXEnabled ;
13719 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13720 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13721 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13722 pwdiRoamNetworkType->ssId.ucLength =
13723 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13724 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13725 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13726 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13727 pwdiRoamNetworkType->ChannelCount =
13728 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13729 pwdiRoamOffloadScanInfo->ChannelCacheType =
13730 pRoamOffloadScanReqParams->ChannelCacheType;
13731 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13732 pRoamOffloadScanReqParams->ValidChannelList,
13733 pRoamOffloadScanReqParams->ValidChannelCount);
13734 pwdiRoamOffloadScanInfo->ValidChannelCount =
13735 pRoamOffloadScanReqParams->ValidChannelCount;
13736 pwdiRoamOffloadScanInfo->us24GProbeSize =
13737 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13738 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13739 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13740 pRoamOffloadScanReqParams->p24GProbeTemplate,
13741 pwdiRoamOffloadScanInfo->us24GProbeSize);
13742 pwdiRoamOffloadScanInfo->us5GProbeSize =
13743 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13744 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13745 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13746 pRoamOffloadScanReqParams->p5GProbeTemplate,
13747 pwdiRoamOffloadScanInfo->us5GProbeSize);
13748 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13749 pRoamOffloadScanReqParams->MDID.mdiePresent;
13750 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13751 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013752 pwdiRoamOffloadScanInfo->nProbes =
13753 pRoamOffloadScanReqParams->nProbes;
13754 pwdiRoamOffloadScanInfo->HomeAwayTime =
13755 pRoamOffloadScanReqParams->HomeAwayTime;
13756 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013757 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013758 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013759 pWdaParams->pWdaContext = pWDA;
13760 /* Store param pointer as passed in by caller */
13761 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013762 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013763 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13764 if(IS_WDI_STATUS_FAILURE(status))
13765 {
13766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13767 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13769 vos_mem_free(pWdaParams->wdaMsgParam);
13770 pWdaParams->wdaWdiApiMsgParam = NULL;
13771 pWdaParams->wdaMsgParam = NULL;
13772 }
13773 return CONVERT_WDI2VOS_STATUS(status) ;
13774}
13775#endif
13776
Jeff Johnson295189b2012-06-20 16:38:30 -070013777/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013778 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013779 *
13780 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013781void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013782{
13783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13784
13785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013787
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013788 if(NULL == pWdaParams)
13789 {
13790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013791 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013792 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013793 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013795
Jeff Johnson295189b2012-06-20 16:38:30 -070013796 vos_mem_free(pWdaParams->wdaMsgParam) ;
13797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13798 vos_mem_free(pWdaParams) ;
13799
13800 return ;
13801}
13802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013803 * FUNCTION: WDA_RssiFilterReqCallback
13804 * Free memory.
13805 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13806 */
13807void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13808{
13809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13810
13811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13813
13814 if(NULL == pWdaParams)
13815 {
13816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13817 "%s: pWdaParams received NULL", __func__);
13818 VOS_ASSERT(0);
13819 return;
13820 }
13821
13822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13823 {
13824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13825 vos_mem_free(pWdaParams->wdaMsgParam);
13826 vos_mem_free(pWdaParams);
13827 }
13828
13829 return;
13830}
13831/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013832 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13833 * Request to WDI to set Preferred Network List.Offload
13834 */
13835VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13836 tSirSetRSSIFilterReq* pRssiFilterParams)
13837{
Jeff Johnson43971f52012-07-17 12:26:56 -070013838 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13840 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13841 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 if(NULL == pwdiSetRssiFilterReqInfo)
13845 {
13846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013848 VOS_ASSERT(0);
13849 return VOS_STATUS_E_NOMEM;
13850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13852 if(NULL == pWdaParams)
13853 {
13854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 VOS_ASSERT(0);
13857 vos_mem_free(pwdiSetRssiFilterReqInfo);
13858 return VOS_STATUS_E_NOMEM;
13859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013860 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013861 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13862 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013863
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 /* Store Params pass it to WDI */
13865 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13866 pWdaParams->pWdaContext = pWDA;
13867 /* Store param pointer as passed in by caller */
13868 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013869 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013870 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013871 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 if(IS_WDI_STATUS_FAILURE(status))
13873 {
13874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13875 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13877 vos_mem_free(pWdaParams->wdaMsgParam);
13878 pWdaParams->wdaWdiApiMsgParam = NULL;
13879 pWdaParams->wdaMsgParam = NULL;
13880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013881 return CONVERT_WDI2VOS_STATUS(status) ;
13882}
13883
Jeff Johnson295189b2012-06-20 16:38:30 -070013884/*
13885 * FUNCTION: WDA_ProcessUpdateScanParams
13886 * Request to WDI to update Scan Parameters
13887 */
13888VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13889 tSirUpdateScanParams *pUpdateScanParams)
13890{
Jeff Johnson43971f52012-07-17 12:26:56 -070013891 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013892 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13893 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13894 sizeof(WDI_UpdateScanParamsInfoType)) ;
13895 tWDA_ReqParams *pWdaParams ;
13896 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 if(NULL == wdiUpdateScanParamsInfoType)
13900 {
13901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013903 VOS_ASSERT(0);
13904 return VOS_STATUS_E_NOMEM;
13905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13907 if ( NULL == pWdaParams )
13908 {
13909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 VOS_ASSERT(0);
13912 vos_mem_free(wdiUpdateScanParamsInfoType);
13913 return VOS_STATUS_E_NOMEM;
13914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 //
13916 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13917 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13919 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13920 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13921 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080013922 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 pUpdateScanParams->b11dEnabled,
13924 pUpdateScanParams->b11dResolved,
13925 pUpdateScanParams->ucChannelCount,
13926 pUpdateScanParams->usPassiveMinChTime,
13927 pUpdateScanParams->usPassiveMaxChTime,
13928 pUpdateScanParams->usActiveMinChTime,
13929 pUpdateScanParams->usActiveMaxChTime,
13930 sizeof(tSirUpdateScanParams),
13931 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13932
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13934 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13936 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13938 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013939 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13940 pUpdateScanParams->usActiveMaxChTime;
13941 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13942 pUpdateScanParams->usActiveMinChTime;
13943 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13944 pUpdateScanParams->usPassiveMaxChTime;
13945 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13946 pUpdateScanParams->usPassiveMinChTime;
13947
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013949 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13950 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013951
Jeff Johnson295189b2012-06-20 16:38:30 -070013952 for ( i = 0; i <
13953 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13954 i++)
13955 {
13956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13957 "Update Scan Parameters channel: %d",
13958 pUpdateScanParams->aChannels[i]);
13959
13960 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13961 pUpdateScanParams->aChannels[i];
13962 }
13963
Yue Ma7f44bbe2013-04-12 11:47:39 -070013964 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13965 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013966
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 /* Store Params pass it to WDI */
13968 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13969 pWdaParams->pWdaContext = pWDA;
13970 /* Store param pointer as passed in by caller */
13971 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013972
Jeff Johnson295189b2012-06-20 16:38:30 -070013973
13974
13975 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013976 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013978 if(IS_WDI_STATUS_FAILURE(status))
13979 {
13980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13981 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13983 vos_mem_free(pWdaParams->wdaMsgParam);
13984 vos_mem_free(pWdaParams);
13985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 return CONVERT_WDI2VOS_STATUS(status) ;
13987}
13988#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013989
13990#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13991/*
13992 * FUNCTION: WDA_RoamOffloadScanReqCallback
13993 *
13994 */
13995void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13996{
13997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013998 vos_msg_t vosMsg;
13999 wpt_uint8 reason = 0;
14000
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014002 "<------ %s " ,__func__);
14003 if (NULL == pWdaParams)
14004 {
14005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14006 "%s: pWdaParams received NULL", __func__);
14007 VOS_ASSERT(0) ;
14008 return ;
14009 }
14010 if ( pWdaParams != NULL )
14011 {
14012 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14013 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014014 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14016 }
14017 if ( pWdaParams->wdaMsgParam != NULL)
14018 {
14019 vos_mem_free(pWdaParams->wdaMsgParam);
14020 }
14021
14022 vos_mem_free(pWdaParams) ;
14023 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014024 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14025 vosMsg.bodyptr = NULL;
14026 if (WDI_STATUS_SUCCESS != status)
14027 {
14028 reason = 0;
14029 }
14030 vosMsg.bodyval = reason;
14031 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14032 {
14033 /* free the mem and return */
14034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014035 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014036 }
14037
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014038 return ;
14039}
14040#endif
14041
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014043 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014044 *
14045 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014046void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014047{
14048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14049
14050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14051 "<------ %s " ,__func__);
14052
14053 if(NULL == pWdaParams)
14054 {
14055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14056 "%s: pWdaParams received NULL", __func__);
14057 VOS_ASSERT(0);
14058 return;
14059 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014060
14061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14062 vos_mem_free(pWdaParams->wdaMsgParam);
14063 vos_mem_free(pWdaParams);
14064
14065 return;
14066}
14067/*
14068 * FUNCTION: WDA_SetPowerParamsReqCallback
14069 * Free memory.
14070 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14071 */
14072void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14073{
14074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14075
14076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14077 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14078
14079 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014080 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14082 "%s: pWdaParams received NULL", __func__);
14083 VOS_ASSERT(0);
14084 return;
14085 }
14086
14087 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14088 {
14089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14090 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014091 vos_mem_free(pWdaParams);
14092 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014093
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014094 return;
14095}
14096
Jeff Johnson295189b2012-06-20 16:38:30 -070014097#ifdef WLAN_FEATURE_PACKET_FILTERING
14098/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014099 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 *
14101 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014102void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014103 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14104 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014105{
14106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014108 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014109 if(NULL == pWdaParams)
14110 {
14111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014112 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 VOS_ASSERT(0) ;
14114 return ;
14115 }
14116
14117 vos_mem_free(pWdaParams->wdaMsgParam) ;
14118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14119 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014120 //print a msg, nothing else to do
14121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014122 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014123 return ;
14124}
Jeff Johnson295189b2012-06-20 16:38:30 -070014125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014126 * FUNCTION: WDA_8023MulticastListReqCallback
14127 * Free memory.
14128 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14129 */
14130void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14131{
14132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14133
14134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14136
14137 if(NULL == pWdaParams)
14138 {
14139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14140 "%s: pWdaParams received NULL", __func__);
14141 VOS_ASSERT(0);
14142 return;
14143 }
14144
14145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14146 {
14147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14148 vos_mem_free(pWdaParams->wdaMsgParam);
14149 vos_mem_free(pWdaParams);
14150 }
14151
14152 return;
14153}
14154/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 * FUNCTION: WDA_Process8023MulticastListReq
14156 * Request to WDI to add 8023 Multicast List
14157 */
14158VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14159 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14160{
Jeff Johnson43971f52012-07-17 12:26:56 -070014161 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14163 tWDA_ReqParams *pWdaParams ;
14164 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014166 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 pwdiFltPktSetMcListReqParamsType =
14168 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14169 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14170 ) ;
14171 if(NULL == pwdiFltPktSetMcListReqParamsType)
14172 {
14173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014175 return VOS_STATUS_E_NOMEM;
14176 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14178 if(NULL == pWdaParams)
14179 {
14180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14183 return VOS_STATUS_E_NOMEM;
14184 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014185
Jeff Johnson295189b2012-06-20 16:38:30 -070014186 //
14187 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14188 //
14189 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014190 pRcvFltMcAddrList->ulMulticastAddrCnt;
14191
14192 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14193 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14194 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14195 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14196
Jeff Johnson295189b2012-06-20 16:38:30 -070014197 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14198 {
14199 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14200 &(pRcvFltMcAddrList->multicastAddr[i]),
14201 sizeof(tSirMacAddr));
14202 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014203 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14204 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014205
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 /* Store Params pass it to WDI */
14207 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14208 pWdaParams->pWdaContext = pWDA;
14209 /* Store param pointer as passed in by caller */
14210 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014211 status = WDI_8023MulticastListReq(
14212 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014213 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014214 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 if(IS_WDI_STATUS_FAILURE(status))
14216 {
14217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14218 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14220 vos_mem_free(pWdaParams->wdaMsgParam);
14221 vos_mem_free(pWdaParams);
14222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 return CONVERT_WDI2VOS_STATUS(status) ;
14224}
Jeff Johnson295189b2012-06-20 16:38:30 -070014225/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014226 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014227 *
14228 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014229void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014230 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14231 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014232{
14233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014235 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014236 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 if(NULL == pWdaParams)
14238 {
14239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 VOS_ASSERT(0) ;
14242 return ;
14243 }
14244
14245 vos_mem_free(pWdaParams->wdaMsgParam) ;
14246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14247 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014248 //print a msg, nothing else to do
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014250 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014251 return ;
14252}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014253
14254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014255 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14256 * Free memory.
14257 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014258 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014259void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014260 void* pUserData)
14261{
14262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14263
14264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14265 "<------ %s, wdiStatus: %d",
14266 __func__, wdiStatus);
14267
14268 if (NULL == pWdaParams)
14269 {
14270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14271 "%s: Invalid pWdaParams pointer", __func__);
14272 VOS_ASSERT(0);
14273 return;
14274 }
14275
14276 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14277 {
14278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14279 vos_mem_free(pWdaParams->wdaMsgParam);
14280 vos_mem_free(pWdaParams);
14281 }
14282
14283 return;
14284}
14285
Jeff Johnson295189b2012-06-20 16:38:30 -070014286/*
14287 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14288 * Request to WDI to set Receive Filters
14289 */
14290VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14291 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14292{
Jeff Johnson43971f52012-07-17 12:26:56 -070014293 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014294 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14295 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14296 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14297 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14298 tWDA_ReqParams *pWdaParams ;
14299 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014302 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14303 {
14304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 VOS_ASSERT(0);
14307 return VOS_STATUS_E_NOMEM;
14308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14310 if(NULL == pWdaParams)
14311 {
14312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014314 VOS_ASSERT(0);
14315 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14316 return VOS_STATUS_E_NOMEM;
14317 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014318 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14319 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14320 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14321 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014322 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14323 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14324
14325 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14326 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014327
14328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14329 "FID %d FT %d NParams %d CT %d",
14330 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14331 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14332 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14333 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014334 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14335 {
14336 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14337 &pRcvPktFilterCfg->paramsData[i],
14338 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014340 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014341 pwdiSetRcvPktFilterReqParamsType->
14342 wdiPktFilterCfg.paramsData[i].protocolLayer,
14343 pwdiSetRcvPktFilterReqParamsType->
14344 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014346 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 pwdiSetRcvPktFilterReqParamsType->
14348 wdiPktFilterCfg.paramsData[i].dataOffset,
14349 pwdiSetRcvPktFilterReqParamsType->
14350 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014352 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014353 pwdiSetRcvPktFilterReqParamsType->
14354 wdiPktFilterCfg.paramsData[i].compareData[0],
14355 pwdiSetRcvPktFilterReqParamsType->
14356 wdiPktFilterCfg.paramsData[i].compareData[1],
14357 pwdiSetRcvPktFilterReqParamsType->
14358 wdiPktFilterCfg.paramsData[i].compareData[2],
14359 pwdiSetRcvPktFilterReqParamsType->
14360 wdiPktFilterCfg.paramsData[i].compareData[3],
14361 pwdiSetRcvPktFilterReqParamsType->
14362 wdiPktFilterCfg.paramsData[i].compareData[4],
14363 pwdiSetRcvPktFilterReqParamsType->
14364 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014366 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 pwdiSetRcvPktFilterReqParamsType->
14368 wdiPktFilterCfg.paramsData[i].dataMask[0],
14369 pwdiSetRcvPktFilterReqParamsType->
14370 wdiPktFilterCfg.paramsData[i].dataMask[1],
14371 pwdiSetRcvPktFilterReqParamsType->
14372 wdiPktFilterCfg.paramsData[i].dataMask[2],
14373 pwdiSetRcvPktFilterReqParamsType->
14374 wdiPktFilterCfg.paramsData[i].dataMask[3],
14375 pwdiSetRcvPktFilterReqParamsType->
14376 wdiPktFilterCfg.paramsData[i].dataMask[4],
14377 pwdiSetRcvPktFilterReqParamsType->
14378 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014379 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014380 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014381 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014382 /* Store Params pass it to WDI */
14383 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14384 pWdaParams->pWdaContext = pWDA;
14385 /* Store param pointer as passed in by caller */
14386 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014387 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014388 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014389 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014390 if(IS_WDI_STATUS_FAILURE(status))
14391 {
14392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14393 "Failure in SetFilter(),free all the memory,status %d ",status);
14394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14395 vos_mem_free(pWdaParams->wdaMsgParam);
14396 vos_mem_free(pWdaParams);
14397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014398 return CONVERT_WDI2VOS_STATUS(status) ;
14399}
Jeff Johnson295189b2012-06-20 16:38:30 -070014400/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014401 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014402 *
14403 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014404void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014405 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14406 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014407{
14408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14409 tWDA_CbContext *pWDA;
14410 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14411 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14412 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14413 tANI_U8 i;
14414 vos_msg_t vosMsg;
14415
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14419
Jeff Johnsone7245742012-09-05 17:12:55 -070014420 if(NULL == pRcvFltPktMatchCntRsp)
14421 {
14422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014423 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014424 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014425 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014426 return ;
14427 }
14428
Jeff Johnson295189b2012-06-20 16:38:30 -070014429 if(NULL == pWdaParams)
14430 {
14431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014433 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014434 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014435 return ;
14436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14438 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014439 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14440 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14441
14442 /* Message Header */
14443 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14444 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14445
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014446 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014447
14448 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14449 {
14450 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14451 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014453 /* VOS message wrapper */
14454 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14455 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14456 vosMsg.bodyval = 0;
14457 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14458 {
14459 /* free the mem and return */
14460 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14461 }
14462
14463 vos_mem_free(pWdaParams->wdaMsgParam) ;
14464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14465 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014466
14467 return;
14468}
14469/*
14470 * FUNCTION: WDA_FilterMatchCountReqCallback
14471 * Free memory and send RSP back to SME.
14472 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14473 */
14474void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14475{
14476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14477 vos_msg_t vosMsg;
14478
14479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14481
14482 if(NULL == pWdaParams)
14483 {
14484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14485 "%s: pWdaParams received NULL", __func__);
14486 VOS_ASSERT(0);
14487 return;
14488 }
14489
14490 /* VOS message wrapper */
14491 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14492 vosMsg.bodyptr = NULL;
14493 vosMsg.bodyval = 0;
14494
14495 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14496 {
14497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14498 vos_mem_free(pWdaParams->wdaMsgParam);
14499 vos_mem_free(pWdaParams);
14500 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14501 }
14502
14503 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014504}
Jeff Johnson295189b2012-06-20 16:38:30 -070014505/*
14506 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14507 * Request to WDI to get PC Filter Match Count
14508 */
14509VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14510{
Jeff Johnson43971f52012-07-17 12:26:56 -070014511 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14513 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14514 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014516 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014517 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14518 {
14519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 VOS_ASSERT(0);
14522 return VOS_STATUS_E_NOMEM;
14523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14525 if(NULL == pWdaParams)
14526 {
14527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 VOS_ASSERT(0);
14530 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14531 return VOS_STATUS_E_NOMEM;
14532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014533
Yue Ma7f44bbe2013-04-12 11:47:39 -070014534 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14535 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014536
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014537 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14538 pRcvFltPktMatchRsp->bssId,
14539 sizeof(wpt_macAddr));
14540
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 /* Store Params pass it to WDI */
14542 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14543 pWdaParams->pWdaContext = pWDA;
14544 /* Store param pointer as passed in by caller */
14545 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014547 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 if(IS_WDI_STATUS_FAILURE(status))
14550 {
14551 /* failure returned by WDI API */
14552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14553 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14555 vos_mem_free(pWdaParams) ;
14556 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14557 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014559 return CONVERT_WDI2VOS_STATUS(status) ;
14560}
Jeff Johnson295189b2012-06-20 16:38:30 -070014561/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014562 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014563 *
14564 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014565void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014566 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14567 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014568{
14569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014572/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14573 if(NULL == pWdaParams)
14574 {
14575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014576 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014577 VOS_ASSERT(0) ;
14578 return ;
14579 }
14580
14581 vos_mem_free(pWdaParams->wdaMsgParam) ;
14582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14583 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014584 //print a msg, nothing else to do
14585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014586 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014587 return ;
14588}
Jeff Johnson295189b2012-06-20 16:38:30 -070014589/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014590 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14591 * Free memory.
14592 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14593 */
14594void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14595{
14596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14597
14598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14599 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14600
14601 if(NULL == pWdaParams)
14602 {
14603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14604 "%s: Invalid pWdaParams pointer", __func__);
14605 VOS_ASSERT(0);
14606 return;
14607 }
14608
14609 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14610 {
14611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14612 vos_mem_free(pWdaParams->wdaMsgParam);
14613 vos_mem_free(pWdaParams);
14614 }
14615
14616 return;
14617}
14618/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014619 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14620 * Request to WDI to clear Receive Filters
14621 */
14622VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14623 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14624{
Jeff Johnson43971f52012-07-17 12:26:56 -070014625 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014626 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14627 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14628 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014631 if(NULL == pwdiRcvFltPktClearReqParamsType)
14632 {
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014635 VOS_ASSERT(0);
14636 return VOS_STATUS_E_NOMEM;
14637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14639 if(NULL == pWdaParams)
14640 {
14641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014643 VOS_ASSERT(0);
14644 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14645 return VOS_STATUS_E_NOMEM;
14646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014647 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14648 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014649 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14650 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14651 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14652 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014653
Yue Ma7f44bbe2013-04-12 11:47:39 -070014654 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014655 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014656 /* Store Params pass it to WDI */
14657 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14658 pWdaParams->pWdaContext = pWDA;
14659 /* Store param pointer as passed in by caller */
14660 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014661 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014662 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 if(IS_WDI_STATUS_FAILURE(status))
14665 {
14666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14667 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014669 vos_mem_free(pWdaParams->wdaMsgParam);
14670 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014672 return CONVERT_WDI2VOS_STATUS(status) ;
14673}
14674#endif // WLAN_FEATURE_PACKET_FILTERING
14675
Jeff Johnson295189b2012-06-20 16:38:30 -070014676/*
14677 * FUNCTION: WDA_ProcessSetPowerParamsReq
14678 * Request to WDI to set power params
14679 */
14680VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14681 tSirSetPowerParamsReq *pPowerParams)
14682{
Jeff Johnson43971f52012-07-17 12:26:56 -070014683 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014684 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14685 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014689 if(NULL == pwdiSetPowerParamsReqInfo)
14690 {
14691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014693 VOS_ASSERT(0);
14694 return VOS_STATUS_E_NOMEM;
14695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14697 if(NULL == pWdaParams)
14698 {
14699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014701 VOS_ASSERT(0);
14702 vos_mem_free(pwdiSetPowerParamsReqInfo);
14703 return VOS_STATUS_E_NOMEM;
14704 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014705
Jeff Johnson295189b2012-06-20 16:38:30 -070014706
14707 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14708 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14710 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014711 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14712 pPowerParams->uListenInterval;
14713 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14714 pPowerParams->uBcastMcastFilter;
14715 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14716 pPowerParams->uEnableBET;
14717 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14718 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014719 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14720 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014721 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14722 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014723
Jeff Johnson295189b2012-06-20 16:38:30 -070014724 /* Store Params pass it to WDI */
14725 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14726 pWdaParams->pWdaContext = pWDA;
14727 /* Store param pointer as passed in by caller */
14728 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014729 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014730 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014731 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014732 if(IS_WDI_STATUS_FAILURE(status))
14733 {
14734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14735 "Failure in Set power params REQ WDI API, free all the memory " );
14736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14737 vos_mem_free(pWdaParams->wdaMsgParam);
14738 pWdaParams->wdaWdiApiMsgParam = NULL;
14739 pWdaParams->wdaMsgParam = NULL;
14740 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014741 return CONVERT_WDI2VOS_STATUS(status) ;
14742}
14743
14744/*
14745 * FUNCTION: WDA_SetTmLevelRspCallback
14746 * Set TM Level response
14747 */
14748void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14749{
14750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14751
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014754
14755 if(NULL == pWdaParams)
14756 {
14757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014759 VOS_ASSERT(0) ;
14760 return ;
14761 }
14762
14763 /* Dose not need to send notification to upper layer
14764 * Just free allocated resources */
14765 if( pWdaParams != NULL )
14766 {
14767 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14768 {
14769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14770 }
14771 vos_mem_free(pWdaParams->wdaMsgParam) ;
14772 vos_mem_free(pWdaParams) ;
14773 }
14774}
14775
14776/*
14777 * FUNCTION: WDA_ProcessSetTmLevelReq
14778 * Set TM Level request
14779 */
14780VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14781 tAniSetTmLevelReq *setTmLevelReq)
14782{
14783 WDI_Status status = WDI_STATUS_SUCCESS ;
14784 tWDA_ReqParams *pWdaParams ;
14785 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14786 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14787 sizeof(WDI_SetTmLevelReqType)) ;
14788 if(NULL == wdiSetTmLevelReq)
14789 {
14790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014792 VOS_ASSERT(0);
14793 return VOS_STATUS_E_NOMEM;
14794 }
14795
14796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14797 if(NULL == pWdaParams)
14798 {
14799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014801 VOS_ASSERT(0);
14802 vos_mem_free(wdiSetTmLevelReq);
14803 return VOS_STATUS_E_NOMEM;
14804 }
14805
14806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014808
14809 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14810 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14811
14812 pWdaParams->pWdaContext = pWDA;
14813 pWdaParams->wdaMsgParam = setTmLevelReq;
14814 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14815
14816 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14817 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14818
14819 if(IS_WDI_STATUS_FAILURE(status))
14820 {
14821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014822 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014823 vos_mem_free(pWdaParams->wdaMsgParam) ;
14824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14825 vos_mem_free(pWdaParams) ;
14826 }
14827
14828 return CONVERT_WDI2VOS_STATUS(status) ;
14829}
14830
14831VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14832 tpTxControlParams pTxCtrlParam)
14833{
14834 VOS_STATUS wdaStatus;
14835
14836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014838 if( pTxCtrlParam == NULL )
14839 {
14840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014841 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 return VOS_STATUS_E_FAILURE;
14843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14845 {
14846 wdaStatus = WDA_SuspendDataTx(pWDA);
14847 }
14848 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14849 {
14850 wdaStatus = WDA_ResumeDataTx(pWDA);
14851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014852 return wdaStatus;
14853}
14854
14855 /* FUNCTION WDA_featureCapsExchange
14856 * WDA API to invoke capability exchange between host and FW.
14857 */
14858void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14859{
14860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014861 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014862 WDI_featureCapsExchangeReq( NULL, pVosContext);
14863}
14864
Yathish9f22e662012-12-10 14:21:35 -080014865/* FUNCTION WDA_disableCapablityFeature
14866 * WDA API to diable Active mode offload in host.
14867 */
14868void WDA_disableCapablityFeature(tANI_U8 feature_index)
14869{
14870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14871 "%s:enter", __func__ );
14872 WDI_disableCapablityFeature(feature_index);
14873}
14874
Jeff Johnson295189b2012-06-20 16:38:30 -070014875 /* FUNCTION WDA_getHostWlanFeatCaps
14876 * Wrapper for WDI API, that will return if the feature (enum value).passed
14877 * to this API is supported or not in Host
14878 * return value
14879 * 0 - implies feature is NOT Supported
14880 * any non zero value - implies feature is SUPPORTED
14881 */
14882tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14883{
14884 return WDI_getHostWlanFeatCaps(featEnumValue);
14885}
14886
14887 /* FUNCTION WDA_getFwWlanFeatCaps
14888 * Wrapper for WDI API, that will return if the feature (enum value).passed
14889 * to this API is supported or not in FW
14890 * return value
14891 * 0 - implies feature is NOT Supported
14892 * any non zero value - implies feature is SUPPORTED
14893 */
14894tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14895{
14896 return WDI_getFwWlanFeatCaps(featEnumValue);
14897}
14898
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014899
Jeff Johnson295189b2012-06-20 16:38:30 -070014900/*
14901 * FUNCTION: WDA_shutdown
14902 * Shutdown WDA/WDI without handshaking with Riva.
14903 * Synchronous function.
14904 */
14905VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14906{
14907 WDI_Status wdiStatus;
14908 //tANI_U8 eventIdx = 0;
14909 VOS_STATUS status = VOS_STATUS_SUCCESS;
14910 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 if (NULL == pWDA)
14912 {
14913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014914 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014915 VOS_ASSERT(0);
14916 return VOS_STATUS_E_FAILURE;
14917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 /* FTM mode stay START_STATE */
14919 if( (WDA_READY_STATE != pWDA->wdaState) &&
14920 (WDA_INIT_STATE != pWDA->wdaState) &&
14921 (WDA_START_STATE != pWDA->wdaState) )
14922 {
14923 VOS_ASSERT(0);
14924 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014925
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014926 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14927 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 {
14929 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014930 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014931 }
Leo Chang9d76f622013-08-23 16:34:52 -070014932 else
14933 {
14934 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14935 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014936
Jeff Johnson295189b2012-06-20 16:38:30 -070014937 /* call WDI shutdown */
14938 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014939 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14940 {
14941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14942 "error in WDA Stop" );
14943 status = VOS_STATUS_E_FAILURE;
14944 }
14945 /* WDI stop is synchrnous, shutdown is complete when it returns */
14946 pWDA->wdaState = WDA_STOP_STATE;
14947
Jeff Johnson295189b2012-06-20 16:38:30 -070014948 /* shutdown should perform the stop & close actions. */
14949 /* Destroy the event */
14950 status = vos_event_destroy(&pWDA->txFrameEvent);
14951 if(!VOS_IS_STATUS_SUCCESS(status))
14952 {
14953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014954 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014955 status = VOS_STATUS_E_FAILURE;
14956 }
14957 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14958 if(!VOS_IS_STATUS_SUCCESS(status))
14959 {
14960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014961 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 status = VOS_STATUS_E_FAILURE;
14963 }
14964 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14965 if(!VOS_IS_STATUS_SUCCESS(status))
14966 {
14967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014968 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014969 status = VOS_STATUS_E_FAILURE;
14970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014971 /* free WDA context */
14972 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14973 if ( !VOS_IS_STATUS_SUCCESS(status) )
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "error in WDA close " );
14977 status = VOS_STATUS_E_FAILURE;
14978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 return status;
14980}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014981
Jeff Johnsone7245742012-09-05 17:12:55 -070014982/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014983 * FUNCTION: WDA_setNeedShutdown
14984 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014985 */
14986
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014987void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014988{
14989 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014990 if(pWDA == NULL)
14991 {
14992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14993 "Could not get the WDA Context pointer" );
14994 return;
14995 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014996 pWDA->needShutdown = TRUE;
14997}
14998/*
14999 * FUNCTION: WDA_needShutdown
15000 * WDA needs a shutdown
15001 */
15002
15003v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15004{
15005 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015006 if(pWDA == NULL)
15007 {
15008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15009 "Could not get the WDA Context pointer" );
15010 return 0;
15011 }
15012 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015013}
15014
Mohit Khanna4a70d262012-09-11 16:30:12 -070015015#ifdef WLAN_FEATURE_11AC
15016/*
15017 * FUNCTION: WDA_SetBeaconFilterReqCallback
15018 *
15019 */
15020void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15021{
15022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015024 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015025 if(NULL == pWdaParams)
15026 {
15027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015028 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015029 VOS_ASSERT(0) ;
15030 return ;
15031 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015032
Mohit Khanna4a70d262012-09-11 16:30:12 -070015033 vos_mem_free(pWdaParams->wdaMsgParam) ;
15034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15035 vos_mem_free(pWdaParams) ;
15036 /*
15037 * No respone required for SetBeaconFilter req so just free the request
15038 * param here
15039 */
15040
15041 return ;
15042}
15043
15044VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15045 tUpdateVHTOpMode *pData)
15046{
15047 WDI_Status status = WDI_STATUS_SUCCESS ;
15048 tWDA_ReqParams *pWdaParams ;
15049 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15050 sizeof(WDI_UpdateVHTOpMode)) ;
15051 if(NULL == wdiTemp)
15052 {
15053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015054 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015055 VOS_ASSERT(0);
15056 return VOS_STATUS_E_NOMEM;
15057 }
15058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15059 if(NULL == pWdaParams)
15060 {
15061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015062 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015063 VOS_ASSERT(0);
15064 vos_mem_free(wdiTemp);
15065 return VOS_STATUS_E_NOMEM;
15066 }
15067
15068 wdiTemp->opMode = pData->opMode;
15069 wdiTemp->staId = pData->staId;
15070
15071 pWdaParams->pWdaContext = pWDA;
15072 /* Store Req pointer, as this will be used for response */
15073 pWdaParams->wdaMsgParam = (void *)pData;
15074 /* store Params pass it to WDI */
15075 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15076
15077 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15078
15079 if(IS_WDI_STATUS_FAILURE(status))
15080 {
15081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15082 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15084 vos_mem_free(pWdaParams->wdaMsgParam);
15085 vos_mem_free(pWdaParams);
15086 }
15087 return CONVERT_WDI2VOS_STATUS(status) ;
15088}
15089#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015090
15091/*==========================================================================
15092 FUNCTION WDA_TransportChannelDebug
15093
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015094 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015095 Display Transport Channel debugging information
15096 User may request to display DXE channel snapshot
15097 Or if host driver detects any abnormal stcuk may display
15098
15099 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015100 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015101 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015102 enableStallDetect : Enable stall detect feature
15103 This feature will take effect to data performance
15104 Not integrate till fully verification
15105
15106 RETURN VALUE
15107 NONE
15108
15109===========================================================================*/
15110void WDA_TransportChannelDebug
15111(
schang6295e542013-03-12 15:31:23 -070015112 tpAniSirGlobal pMac,
15113 v_BOOL_t displaySnapshot,
15114 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015115)
15116{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015117 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015118 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015119}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015120
15121/*==========================================================================
15122 FUNCTION WDA_SetEnableSSR
15123
15124 DESCRIPTION
15125 API to enable/disable SSR on WDI timeout
15126
15127 PARAMETERS
15128 enableSSR : enable/disable SSR
15129
15130 RETURN VALUE
15131 NONE
15132
15133===========================================================================*/
15134void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15135{
15136 WDI_SetEnableSSR(enableSSR);
15137}
Leo Chang9056f462013-08-01 19:21:11 -070015138
15139#ifdef FEATURE_WLAN_LPHB
15140/*
15141 * FUNCTION: WDA_LPHBconfRspCallback
15142 *
15143 */
15144void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15145{
15146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15147
15148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15149 "<------ %s " ,__func__);
15150 if (NULL == pWdaParams)
15151 {
15152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15153 "%s: pWdaParams received NULL", __func__);
15154 VOS_ASSERT(0) ;
15155 return ;
15156 }
15157
15158 /* Do not need to send notification to upper layer
15159 * Just free allocated resources */
15160 if (pWdaParams != NULL)
15161 {
15162 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15163 {
15164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15165 }
15166 vos_mem_free(pWdaParams->wdaMsgParam) ;
15167 vos_mem_free(pWdaParams) ;
15168 }
15169
15170 return;
15171}
15172
15173/*
15174 * FUNCTION: WDA_ProcessLPHBConfReq
15175 *
15176 */
15177VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15178 tSirLPHBReq *pData)
15179{
15180 WDI_Status wdiStatus;
15181 tWDA_ReqParams *pWdaParams ;
15182
15183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15184 "------> %s " , __func__);
15185
15186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15187 if (NULL == pWdaParams)
15188 {
15189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15190 "%s: VOS MEM Alloc Failure", __func__);
15191 VOS_ASSERT(0);
15192 vos_mem_free(pData);
15193 return VOS_STATUS_E_NOMEM;
15194 }
15195
15196 pWdaParams->pWdaContext = pWDA;
15197 pWdaParams->wdaMsgParam = (void *)pData;
15198 pWdaParams->wdaWdiApiMsgParam = NULL;
15199
15200 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15201 if (WDI_STATUS_PENDING == wdiStatus)
15202 {
15203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15204 "Pending received for %s:%d ", __func__, __LINE__);
15205 }
15206 else if (WDI_STATUS_SUCCESS != wdiStatus)
15207 {
15208 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15209 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15210 vos_mem_free(pWdaParams->wdaMsgParam);
15211 vos_mem_free(pWdaParams);
15212 }
15213
15214 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15215}
15216#endif /* FEATURE_WLAN_LPHB */
15217